Приложение Vertex AI Vision для анализа занятости с управлением событиями

1. Цели

Обзор

Эта лаборатория будет посвящена созданию комплексного приложения Vertex AI Vision для отправки событий с функцией управления событиями . Мы будем использовать предварительно обученные встроенные функции аналитики занятости специализированной модели для генерации событий на основе сбора следующих данных:

  • Подсчитайте количество транспортных средств и людей, переходящих дорогу на определенной линии.
  • Подсчитайте количество транспортных средств/человека на любом фиксированном участке дороги.
  • Обнаружение пробок на любом участке дороги.

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

  • Как импортировать видео для потоковой передачи
  • Как создать приложение в Vertex AI Vision
  • Различные функции, доступные в аналитике занятости, и способы их использования.
  • Как развернуть приложение
  • Как искать видео в вашем хранилище Медиа-хранилище Vertex AI Vision.
  • Как создать облачную функцию, которая обрабатывает данные модели Occupancy Analytics.
  • Как создать тему Pub/Sub и подписку.
  • Как настроить управление событиями для отправки событий через Pub/Sub Topic.

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, Compute Engine > Администратор экземпляра Compute (бета), Хранилище > Средство просмотра объектов хранилища † . В списке Выберите роль выберите роль. Для дополнительных ролей нажмите «Добавить еще одну роль» и добавьте каждую дополнительную роль. Примечание . Поле «Роль» влияет на то, к каким ресурсам ваш сервисный аккаунт может получить доступ в вашем проекте. Вы можете отозвать эти роли или предоставить дополнительные роли позже. В производственных средах не предоставляйте роли владельца, редактора или зрителя. Вместо этого предоставьте предопределенную или настраиваемую роль , соответствующую вашим потребностям.
  6. Нажмите Продолжить .
  7. Нажмите Готово , чтобы завершить создание учетной записи службы. Не закрывайте окно браузера. Вы будете использовать его на следующем шаге.

Создайте ключ сервисного аккаунта:

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

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

3. Загрузите видеофайл для потоковой передачи.

Вы можете использовать vaictl для потоковой передачи видеоданных в приложение для анализа занятости.

Начните с активации Vision AI API в облачной консоли.

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

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

Регистрация на стрим займет пару минут.

Подготовьте образец видео

  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 .

Вставляйте данные в свой поток

  1. Чтобы отправить этот локальный видеофайл во входной поток приложения, используйте следующую команду. Вы должны сделать следующие замены переменных:
  • 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
export LOCAL_FILE=street_vehicles_people.mp4
  1. Эта команда передает видеофайл в поток. Если вы используете флаг –loop, видео будет зацикливаться в потоке, пока вы не остановите команду. Мы запустим эту команду как фоновое задание, чтобы она продолжала потоковую передачу.
  • (добавьте nohup в начале и '&' в конце, чтобы сделать его фоновым заданием)
nohup vaictl -p $PROJECT_ID \
    -l $LOCATION_ID \
    -c application-cluster-0 \
    --service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &

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

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

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

Просмотр потокового видео в пользовательском интерфейсе Просмотр видео в реальном времени, добавляемого в поток в консоли Google Cloud. Видео предоставлено: Элизабет Мейвор на Pixabay ( добавлена ​​пикселизация ).

4. Создайте облачную функцию

Нам понадобится облачная функция для обработки данных модели и генерации событий, которые позже будут отправлены через канал событий.

Подробнее об облачной функции можно узнать здесь.

Создайте облачную функцию, которая слушает вашу модель.

  1. Перейдите на страницу создания пользовательского интерфейса облачной функции.
  2. Задайте имя функции, которое позже будет использоваться для ссылки на эту облачную функцию в настройках управления событиями.
  3. Убедитесь, что регион соответствует вашему приложению.
  4. Отрегулируйте, а затем сохраните настройки триггера.
  5. Нажмите кнопку «Далее», чтобы перейти к части «кода». Не удалось загрузить пример создания облачной функции.
  6. Отредактируйте свою облачную функцию. Вот пример среды выполнения Node.js.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
 // Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
 // For more about logging, please see https://cloud.google.com/functions/docs/monitoring

 // The processor output will be stored in req.body.
 const messageString = constructMessage(req.body);

 // Send your message to operator output with res HTTP response context.
 res.status(200).send(messageString);
};

function constructMessage(data) {
 /**
  * Typically, your processor output should contains appPlatformMetadata & it's designed output.
  * For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
  * to construct the return annotation as such. 
  */

 // access appPlatformMetat.
 const appPlatformMetadata = data.appPlatformMetadata;

 // access annotations.
 const annotations = data.annotations.map(annotation => {
  // This is a mock OccupancyCountingPredictionResult annotation.
  return {"annotation" : {"track_info": {"track_id": "12345"}}};
 });

 const events = [];
 for(const annotation of annotations) {
   events.push({
       "event_message": "Detection event",
       "payload" : {
         "description" : "object detected"
       },
       "event_id" : "track_id_12345"
     });
 }

  /**
   * Typically, your cloud function should return a string represent a JSON which has two fields:
   * "annotations" must follow the specification of the target model.
   * "events" should be of type "AppPlatformEventBody".
   */
 const messageJson = {
   "annotations": annotations,
   "events": events,
 };
 return JSON.stringify(messageJson);
}
  1. Нажмите кнопку «Развернуть», чтобы развернуть функцию.

5. Создайте тему Pub/Sub и подписку.

Нам нужно будет предоставить приложению тему Pub/Sub, которому оно сможет отправлять событие. Чтобы получать события, подписка Pub/Sub должна подписаться на настроенную оптику.

Вы можете узнать больше о теме Pub/Sub здесь и о подписке здесь .

Создать тему Pub/Sub

Чтобы создать тему Pub/Sub, вы можете использовать CLI gcloud: (Вам следует заменить SUBSCRIPTION_ID реальным значением из ваших настроек)

gcloud pubsub topics create TOPIC_ID

Альтернативно вы можете использовать пользовательский интерфейс Pub/Sub.

Создать подписку на публикацию/подписку

Чтобы создать подписку Pub/Sub, вы можете использовать CLI gcloud: (Вам следует заменить SUBSCRIPTION_ID и TOPIC_ID реальным значением из вашей настройки)

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

Альтернативно вы можете использовать пользовательский интерфейс Pub/Sub.

6. Создайте заявку

Первый шаг — создать приложение, которое обрабатывает ваши данные. Приложение можно рассматривать как автоматизированный конвейер, который соединяет следующее:

  • Прием данных : видеопоток попадает в поток.
  • Анализ данных : после приема можно добавить модель искусственного интеллекта (компьютерного зрения).
  • Хранение данных : две версии видеопотока (исходный поток и поток, обработанный моделью искусственного интеллекта) могут храниться в хранилище мультимедиа.

В консоли Google Cloud приложение представлено в виде графика.

Создать пустое приложение

Прежде чем вы сможете заполнить граф приложения, вы должны сначала создать пустое приложение.

Создайте приложение в консоли Google Cloud.

  1. Перейдите в консоль Google Cloud.
  2. Откройте вкладку «Приложения» панели управления Vertex AI Vision.

Перейдите на вкладку «Приложения»

  1. Нажмите кнопку «Добавить Создать» .
  2. Введите Traffic-App в качестве названия приложения и выберите свой регион.
  3. Нажмите Создать .

Добавьте узлы компонентов приложения

После создания пустого приложения вы можете добавить три узла в граф приложения:

  1. Узел приема : ресурс потока, который принимает данные.
  2. Узел обработки : модель анализа занятости, которая действует на основе полученных данных.
  3. Узел хранения : медиа-хранилище, в котором хранятся обработанные видео и служит хранилищем метаданных. Хранилища метаданных включают аналитическую информацию о загруженных видеоданных и информацию, полученную с помощью моделей искусственного интеллекта.

Добавьте узлы компонентов в свое приложение в консоли.

  1. Откройте вкладку «Приложения» панели управления Vertex AI Vision. Перейдите на вкладку «Приложения»
  2. В строке трафик-приложение выберите Просмотр графика . Это приведет вас к графической визуализации конвейера обработки.

Добавьте узел приема данных

  1. Чтобы добавить узел входного потока, выберите параметр «Потоки» в разделе «Соединители» бокового меню.
  2. В разделе «Источник» открывшегося меню «Поток» выберите «Добавить потоки» .
  3. В меню «Добавить потоки» выберите «Зарегистрировать новые потоки» и добавьте Traffic-stream в качестве имени потока.
  4. Чтобы добавить поток в график приложения, нажмите «Добавить потоки» .

Добавляем узел обработки данных

  1. Чтобы добавить узел модели подсчета занятости, выберите параметр «Аналитика занятости» в разделе «Специализированные модели» бокового меню.
  2. Оставьте настройки по умолчанию «Люди» и «Транспортные средства» .
  3. Добавьте линии при пересечении линий. Используйте инструмент «Многоточечная линия», чтобы нарисовать линии там, где вам нужно обнаруживать выходящие или входящие автомобили или людей.
  4. Нарисуйте активные зоны для подсчета людей/транспортных средств в этой зоне.
  5. Добавьте настройки времени задержки, чтобы обнаружить перегрузку, если нарисована активная зона.
  • (в настоящее время активная зона и пересечение линии не поддерживаются одновременно. Используйте одновременно только одну функцию.)

3acdb6f1e8474e07.pngce63449d601995e9.png

194c54d2bbcf7e8a.png

Добавить узел хранения данных

  1. Чтобы добавить узел назначения вывода (хранилища), выберите параметр «Медиа-хранилище Vertex AI Vision» в разделе «Соединители» бокового меню.
  2. В меню «Медиа-хранилище» Vertex AI Vision нажмите «Подключить хранилище» .
  3. В меню Подключить склад выберите Создать новый склад . Назовите склад-склад-склад и оставьте длительность TTL равной 14 дням.
  4. Нажмите кнопку «Создать» , чтобы добавить склад.

7. Настройте управление событиями

Продолжительность 02:00

Мы подключим модель к ранее созданной облачной функции для постобработки, где облачная функция сможет свободно обрабатывать выходные данные модели и генерировать события в соответствии с вашими потребностями. Затем мы настроим канал событий, настроив ранее созданную тему Pub/Sub в качестве нашей цели. Вы также можете установить минимальный интервал, который поможет избежать переполнения вашего канала событий одним и тем же событием за короткий период времени.

Выберите функцию облака для постобработки.

  1. Нажмите на узел обработки данных ( аналитика занятости ) на графике вашего приложения, чтобы открыть боковое меню.
  2. Выберите облачную функцию (определяемую ее именем) в раскрывающемся списке «Постобработка».
  3. График приложения автоматически сохранит ваши изменения.

Не удалось загрузить пример настройки постобработки.

Настроить канал событий

  1. Нажмите на узел обработки данных ( аналитика занятости ) на графике вашего приложения, чтобы открыть боковое меню.
  2. Нажмите «НАСТРОЙКА УВЕДОМЛЕНИЯ О СОБЫТИЯХ» в разделе «Уведомление о событиях». Не удалось загрузить пример уведомления о событии.
  3. Выберите тему Pub/Sub в раскрывающемся списке.
  4. (необязательно) установите минимальный интервал/частоту публикации событий.

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

8. Разверните свое приложение для использования

После того как вы создали комплексное приложение со всеми необходимыми компонентами, последним шагом к использованию приложения является его развертывание.

  1. Откройте вкладку «Приложения» панели управления Vertex AI Vision. Перейдите на вкладку «Приложения»
  2. Выберите «Просмотреть график» рядом с приложением дорожного движения в списке.
  3. На странице построителя графов приложений нажмите кнопку «Развернуть» .
  4. В следующем диалоговом окне подтверждения выберите «Развернуть» . Операция развертывания может занять несколько минут. После завершения развертывания рядом с узлами появятся зеленые галочки. ee78bbf00e5db898.png

9. Проверьте события/сообщения в подписке Pub/Sub.

После того как вы загрузите видеоданные в приложение для обработки, облачная функция должна генерировать события, как только модель анализа занятости выведет аннотацию. Затем эти события должны быть опубликованы в виде сообщений в вашей теме Pub/Sub и получены по вашей подписке.

Следующие шаги предполагают, что у вас есть подписка по запросу.

  1. Откройте список подписок Pub/Sub в своем проекте и найдите соответствующую подписку. Перейти на страницу списка подписок Pub/Sub.
  2. Перейдите на вкладку «Сообщение».
  3. Нажмите кнопку «тянуть».
  4. Просмотрите свое сообщение в таблице. ошибка при загрузке изображения сообщения о подписке pub/sub

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

10. Поздравления

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

Очистить

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

Удалить проект

Удаление отдельных ресурсов

Ресурсы

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

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

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

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

Опрос

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

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

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

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