Фильтр движения Vertex AI Vision

1. Цели

Обзор

В этом практическом занятии мы рассмотрим создание комплексного приложения Vertex AI Vision для демонстрации отправки видео с функцией фильтрации движения . В этом уроке мы рассмотрим различные параметры конфигурации фильтра движения:

  • Чувствительность обнаружения движения
  • Минимальная продолжительность мероприятия
  • Окно ретроспективного обзора
  • Время охлаждения
  • Зона обнаружения движения

Что вы узнаете

  • Как импортировать видео для потокового воспроизведения
  • Различные функции, доступные в Motion Filter, и способы их использования.
  • Где проверить статистику фильтра движения?
  • Как настроить параметры в соответствии с вашим видео

2. Перед началом работы

  1. В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud . Примечание : если вы не планируете сохранять ресурсы, созданные в ходе этой процедуры, создайте проект вместо выбора существующего. После выполнения этих шагов вы можете удалить проект, удалив все связанные с ним ресурсы. Перейдите к выбору проекта.
  2. Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
  3. Включите API Compute Engine и Vision AI. Включите API.

Создайте учетную запись службы:

  1. В консоли Google Cloud перейдите на страницу «Создать учетную запись службы» . Перейдите по ссылке «Создать учетную запись службы» .
  2. Выберите свой проект.
  3. В поле « Имя учетной записи службы» введите имя. Консоль Google Cloud заполнит поле «Идентификатор учетной записи службы» на основе этого имени. В поле «Описание учетной записи службы» введите описание. Например, «Учетная запись службы для быстрого запуска».
  4. Нажмите «Создать и продолжить» .
  5. Чтобы предоставить доступ к вашему проекту, назначьте вашей учетной записи службы следующие роли: Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (бета-версия), Storage > Storage Object Viewer † . В списке «Выберите роль» выберите роль. Для добавления дополнительных ролей нажмите «Добавить еще одну роль» и добавьте каждую дополнительную роль. Примечание : Поле «Роль» влияет на то, к каким ресурсам ваша учетная запись службы может получить доступ в вашем проекте. Вы можете отозвать эти роли или предоставить дополнительные роли позже. В производственных средах не назначайте роли «Владелец», «Редактор» или «Просмотрщик». Вместо этого назначьте предопределенную роль или пользовательскую роль , соответствующую вашим потребностям.
  6. Нажмите «Продолжить» .
  7. Нажмите «Готово» , чтобы завершить создание учетной записи службы. Не закрывайте окно браузера. Вы будете использовать ее на следующем шаге.

Создайте ключ учетной записи службы:

  1. В консоли Google Cloud щелкните адрес электронной почты созданной вами учетной записи службы.
  2. Нажмите клавиши .
  3. Нажмите «Добавить ключ» , а затем « Создать новый ключ» .
  4. Нажмите «Создать» . На ваш компьютер будет загружен JSON-файл с ключом.
  5. Нажмите «Закрыть» .
  6. Установите и инициализируйте Google Cloud CLI.

† Эта роль необходима только в том случае, если вы копируете образец видеофайла из хранилища Cloud Storage.

3. Фильтр движения

Фильтр движения захватывает сегменты видео с движением и изображением продукции, содержащие события движения. Регулируя чувствительность к движению, минимальную длину события, окно ретроспективного анализа, период охлаждения и зону обнаружения движения, пользователь может настроить фильтр в соответствии со своими потребностями.

Настройка фильтра движения

В фильтре движения доступно 5 настроек для персонализации.

  1. Чувствительность к движению: насколько чувствительным должно быть движение для срабатывания датчика.
  2. Минимальная длительность события: минимальная продолжительность, в течение которой будет зафиксировано событие движения.
  3. Окно ретроспективного анализа: как долго должна начинаться запись видео до обнаружения движения.
  4. Период ожидания: после завершения события движения наступит период ожидания указанной продолжительности. В течение этого периода события движения не будут запускаться.
  5. Зона обнаружения движения: настраиваемая пользователем зона, определяющая, где должно выполняться обнаружение движения. (Подробнее об этом будет рассказано в следующем разделе)

Чувствительность к движению

Используйте флаг motion_detection_sensitivity в команде vaictl.
Строка. Средний уровень по умолчанию. Можно выбрать низкий, средний или высокий уровень.

Чем выше чувствительность обнаружения движения, тем чувствительнее устройство к шуму и мелким движениям. Этот параметр рекомендуется использовать в условиях наличия мелких движущихся объектов (например, людей на расстоянии) и стабильного освещения.

С другой стороны, низкая чувствительность менее чувствительна к световым помехам. Этот параметр идеально подходит для случаев с повышенным уровнем световых помех, например, на открытом воздухе, а также для видео низкого качества, где может быть больше шума. Поскольку этот параметр обеспечивает наиболее агрессивную фильтрацию, он может игнорировать движения мелких объектов.

Минимальная продолжительность мероприятия

Используйте флаг min_event_length_in_seconds в команде vaictl.
Целое число. Значение по умолчанию — 10 секунд. Диапазон значений — от 0 до 3600 секунд.

Минимальная продолжительность видеороликов с событиями движения, которые будут проанализированы после обнаружения сегмента события движения в кадре.

Окно ретроспективы

Используйте флаг look_back_window_in_seconds в команде vaictl.
Целое число. Значение по умолчанию — 3 секунды. Диапазон значений — от 0 до 3600 секунд.

Окно ретроспективного анализа — это период времени, кэшированный до момента обнаружения события движения. Оно полезно, когда нам интересно посмотреть, что происходит в кадре за несколько секунд до обнаружения событий движения.

период охлаждения

Используйте флаг cool_down_period_in_seconds в команде vaictl.
Целое число. Значение по умолчанию — 300 секунд. Диапазон значений — от 0 до 3600 секунд.

Период ожидания — это время, в течение которого система обнаружения движения приостанавливается после регистрации события движения. В течение периода ожидания вычисления для обнаружения движения выполняться не будут.

4. Пример базового фильтра движения

Руководство по SDK Vaictl

Чтобы проверить руководство vaictl для входного потока с фильтром движения, используйте следующую команду.

vaictl send video-file applying motion-filter -h

Подготовьте пример видео.

  1. Вы можете скопировать образец видео с помощью следующей команды gsutil cp . Замените следующую переменную:
  • ИСТОЧНИК: Местоположение используемого видеофайла. Вы можете использовать собственный источник видеофайла (например, gs://BUCKET_NAME/FILENAME.mp4) или пример видео (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4) (видео с людьми и транспортными средствами, источник ).
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Подготовьте переменные среды.

Укажите указанные ниже переменные среды, чтобы использовать предоставленный шаблон команды.

переменные vaictl

  • PROJECT_ID: Идентификатор вашего проекта в Google Cloud.
  • LOCATION_ID: Ваш идентификатор местоположения. Например, us-central1. Для получения дополнительной информации см. раздел «Облачные местоположения» .
  • LOCAL_FILE: Имя файла локального видеофайла. Например, street_vehicles_people.mp4.
  • –loop flag: Необязательный параметр. Зацикливает передачу данных из файла для имитации потоковой передачи.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1

Переменные фильтра движения

  • MOTION_SENSITIVITY: Насколько чувствительным будет датчик движения.
  • MIN_EVENT_LENGTH: Минимальная длина событий движения.
  • LOOK_BACK_WINDOW: Длительность, которую необходимо зафиксировать до первого движения в событии обнаружения движения.
  • COOL_DOWN_PERIOD: Период, в течение которого обнаружение движения приостанавливается после регистрации события движения.
export MOTION_SENSITIVITY=<low or medium or high>
export MIN_EVENT_LENGTH=<0-3600>
export LOOK_BACK_WINDOW=<0-3600>
export COOL_DOWN_PERIOD=<0-3600>

Подготовьте команду фильтра движения

Существует два варианта использования фильтра движения с входным потоком. Первый вариант — отправка событий движения в поток в облачной консоли. Второй вариант — отправка событий движения в локальное хранилище.

Отправка результатов в облачную консоль.

Вы можете использовать vaictl для потоковой передачи выходных видеоданных в облачную консоль. Для начала активируйте API Vision AI в облачной консоли.

Зарегистрировать новый поток

  1. В левой панели Vertex AI Vision нажмите вкладку «Потоки».
  2. Нажмите «Зарегистрироваться»
  3. В поле "Название потока" введите motion-detection-stream
  4. В поле "Регион" введите us-central1
  5. Нажмите «Зарегистрироваться»

Отправка результатов в поток

Эта команда передает видеофайл в поток. Если вы используете флаг –loop, видео будет воспроизводиться циклически до тех пор, пока вы не остановите команду. Мы запустим эту команду в фоновом режиме, чтобы она продолжала передавать видеопоток.

Добавьте nohup в начало и & в конец, чтобы сделать задачу фоновой.

INPUT_VIDEO=street_vehicles_people.mp4

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
  to streams motion-detection-stream --loop

Между началом операции загрузки vaictl и появлением видео на панели управления может пройти около 100 секунд.

После того, как поток станет доступен, вы сможете просмотреть видеопоток на вкладке «Потоки» панели управления Vertex AI Vision, выбрав поток traffic-stream.

Перейдите во вкладку «Трансляции».

Отправка результатов в локальное хранилище

Эта команда передает видеофайл в поток.

Добавьте nohup в начало и & в конец, чтобы сделать задачу фоновой.

INPUT_VIDEO=street_vehicles_people.mp4
OUTPUT_PATH=<path_to_store_motion_events_on_local_disk>

nohup vaictl -p $PROJECT \
             -l $LOCATION_ID \
             -c application-cluster-0 \
             --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
  to mp4file --mp4-file-path=$OUTPUT_PATH --loop

5. Зона обнаружения движения

В этом разделе мы подробно рассмотрим использование зоны обнаружения движения и способы ее настройки. Зона предназначена для повышения эффективности обнаружения движения путем маскирования движений, исходящих из областей, которые вас не интересуют.

Зона обнаружения движения бывает двух типов: (1) положительные зоны, где обнаружение движения происходит только в аннотированной области; (2) отрицательные зоны, где обнаружение движения игнорирует любое движение в аннотированной области.

Зональная аннотация

Используйте флаг zone_annotation в команде vaictl для ввода координат полигонов зоны.
Строка. По умолчанию пустое значение для аннотаций зон.

В качестве аннотации зоны пользователь вводит строку, обозначающую зоны в кадре, которые он хочет скрыть или на которых хочет сфокусироваться. Для аннотации зоны пользователю необходимо указать координаты изображения по осям x и y для каждого узла в зоне. Для образования многоугольника зона должна содержать три или более узлов. В кадре может быть несколько зон. Если зоны перекрываются, область, покрываемая обеими зонами, будет покрываться и в этом случае.

Для аннотации зоны необходимо соблюдать определенный синтаксис ввода.

  • Для обозначения отдельного узла используйте двоеточие : для соединения осей x и y координат изображения. Например, узел (0,0) в верхнем левом углу будет обозначен как 0:0 .
  • Для обозначения всех узлов в одной зоне используйте точку с запятой ; для соединения узлов. Например, для зоны с узлами (0,0) , (100,0) , (100,100) и (0, 100) зона будет обозначена как 0:0;100:0;100:100;0:100 . Всегда указывайте узлы как соединяющие узлы, расположенные рядом друг с другом; порядок может быть как по часовой стрелке, так и против часовой стрелки.

Зона обнаружения движения - квадрат *Квадратная зона с четырьмя узлами.

Зона обнаружения движения - треугольник *Треугольная зона с тремя узлами.

  • Для обозначения нескольких зон в одном кадре используйте - для соединения различных зон. Например, если мы хотим ввести одновременно (0,0) , (100,0) , (100,100) , (0,100) и (120,120) , (110,150) , (200,160) , то аннотация входной зоны будет выглядеть 0:0;100:0;100:100;0:100-120:120;110:150;200:160 .

Зона обнаружения движения — рамка с двумя зонами. *Две зоны внутри рамки.

Для извлечения координат из изображения существует ряд онлайн-инструментов, которые помогут в этом. Например, см. Wolfram - Get Coordinates from Image.

Исключить аннотированную зону

Используйте флаг exclude_annotated_zone в команде vaictl, чтобы настроить обнаружение движения внутри зоны или за ее пределами.
Логическое значение. По умолчанию - false.

Параметр «Исключить аннотированную зону» — это логический параметр, вводимый пользователем, указывающий, хочет ли пользователь исключить аннотированную зону из обнаружения движения или нет.

  • Если установлено значение true , аннотированная зона будет действовать как отрицательная зона. Движения в аннотированных зонах не будут обнаруживаться.

Зона обнаружения движения - опция исключения *Запускайте обнаружение движения только за пределами зон ввода.

  • Если установить значение false, зона будет действовать как положительная зона, на которой будет сосредоточено обнаружение движения.

Зона обнаружения движения - включить опцию *Обнаружение движения должно запускаться только в зонах ввода.

6. Пример фильтра движения с зоной обнаружения движения.

В этом примере мы будем использовать видео, на котором дерево постоянно движется на переднем плане. При обычных настройках фильтра движения видео будет воспроизводить только одно событие движения, длительность которого равна длительности исходного видео, поскольку фильтр движения регистрирует движущееся дерево как «постоянно движущееся на протяжении всего видео». Однако с помощью зоны обнаружения движения мы можем правильно замаскировать движение дерева и сфокусироваться на движении автомобилей и пешеходов.

Подготовка видео

В примере видео (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) представлены деревья, автомобили и пешеходы с сайта www.changedetection.net .

Видео предоставлено: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad и P. Ishwar, changedetection.net: новый эталонный набор данных для обнаружения изменений , в материалах семинара IEEE по обнаружению изменений (CDW-2012) на конференции CVPR-2012, Провиденс, Род-Айленд, 16-21 июня 2012 г.

Подготовка переменных окружающей среды

Переменные проекта Google Cloud.

export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4

Базовая настройка фильтра движения.

export MOTION_SENSITIVITY=<low or medium or high>
export MIN_EVENT_LENGTH=<0-3600>
export LOOK_BACK_WINDOW=<0-3600>
export COOL_DOWN_PERIOD=<0-3600>

Настройка зоны обнаружения движения.

Выберите один из вариантов ниже, чтобы увидеть различные способы использования зоны обнаружения движения.

Исключите дерево из алгоритма обнаружения движения.

export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150"
export EXCLUDE_ANNOTATED_ZONE=true

Зона обнаружения движения — исключить зону обнаружения движения из аннотированной зоны в примере видео. *Запускайте обнаружение движения только за пределами зон ввода.

Функция обнаружения движения сфокусирована на улице.

export ZONE_ANNOTATION="0:300;780:300;780:480;0:480"
export EXCLUDE_ANNOTATED_ZONE=false

Зона обнаружения движения — запустите обнаружение движения из аннотированной зоны в примере видео. *Запускайте обнаружение движения только за пределами зон ввода.

Отправка видеопотока с фильтром движения

Отправляйте события движения в облачную консоль.

Вы можете использовать vaictl для потоковой передачи выходных видеоданных в облачную консоль. Для начала активируйте API Vision AI в облачной консоли.

Зарегистрировать новый поток

  1. В левой панели Vertex AI Vision нажмите вкладку «Потоки».
  2. Нажмите «Зарегистрироваться»
  3. В поле "Название потока" введите motion-detection-stream
  4. В поле "Регион" введите us-central1
  5. Нажмите «Зарегистрироваться»

Отправка результатов в поток

Эта команда передает видеофайл в поток. Если вы используете флаг –loop, видео будет воспроизводиться циклически до тех пор, пока вы не остановите команду. Мы запустим эту команду в фоновом режиме, чтобы она продолжала передавать видеопоток.

Добавьте nohup в начало и & в конец, чтобы сделать задачу фоновой.

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
         --zone_annotation=ZONE_ANNOTATION \
         --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
  to streams motion-detection-stream --loop

Между началом операции загрузки vaictl и появлением видео на панели управления может пройти около 100 секунд.

После того, как поток станет доступен, вы сможете просмотреть видеопоток на вкладке «Потоки» панели управления Vertex AI Vision, выбрав поток traffic-stream.

Перейдите во вкладку «Трансляции».

Отправка результатов в локальное хранилище

Эта команда передает видеофайл в поток. Если вы используете флаг –loop, видео будет воспроизводиться циклически до тех пор, пока вы не остановите команду. Мы запустим эту команду в фоновом режиме, чтобы она продолжала передавать видеопоток.

Добавьте nohup в начало и & в конец, чтобы сделать задачу фоновой.

OUTPUT_PATH=<path_to_store_motion_events>

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
         --zone_annotation=$ZONE_ANNOTATION \
         --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
  to mp4file --mp4-file-path=$OUTPUT_PATH --loop

7. Поздравляем!

Поздравляем, вы завершили лабораторную работу!

Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этом руководстве, завершите работу SDK vaictl через командную строку, нажав ctrl + z

Ресурсы

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/motion-filtering-model

https://cloud.google.com/vision-ai/docs/create-manage-streams

Обратная связь

Нажмите здесь, чтобы оставить отзыв.

Опрос

Как вы будете использовать этот учебный материал?

Прочитайте только от начала до конца. Прочитайте текст и выполните упражнения.

Насколько полезным оказался этот практический семинар?

Очень полезно Умеренно полезный