Фильтр движения 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 (beta), 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. Пример базового фильтра движения

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

Чтобы проверить руководство 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: необязательно. Зацикливает данные файла для имитации потоковой передачи.
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 для потоковой передачи выходных видеоданных в облачную консоль. Начните с активации Vision AI API в облачной консоли.

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

  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, выбрав поток потока трафика.

Перейдите на вкладку Потоки

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

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

Добавьте 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 — получение координат из изображения.

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

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

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

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

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

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

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

6. Фильтр движения с примером зоны обнаружения движения

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

Видео подготовка

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

Видео предоставлено: Н. Гойетт, П.-М. Джодоин, Ф. Порикли, Дж. Конрад и П. Ишвар, changetection.net: Новый набор контрольных данных для обнаружения изменений , в Proc. Семинар IEEE по обнаружению изменений (CDW-2012) на CVPR-2012, Провиденс, Род-Айленд, 16–21 июня 2012 г.

Подготовка переменных среды

Переменные облачного проекта Google.

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 для потоковой передачи выходных видеоданных в облачную консоль. Начните с активации Vision AI API в облачной консоли.

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

  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, выбрав поток потока трафика.

Перейдите на вкладку Потоки

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

Эта команда передает видеофайл в поток. Если вы используете флаг –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 за ресурсы, используемые в этом руководстве, завершите операцию vaictl SDK через командную строку, нажав 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

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

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

Опрос

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

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

Насколько полезна была эта кодовая лаборатория?

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