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

1. Цели

Обзор

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

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

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

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

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. Загрузите видеофайл для потоковой передачи.

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

Для начала активируйте API Vision AI в облачной консоли.

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

  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 flag: Необязательный параметр. Зацикливает передачу данных из файла для имитации потоковой передачи.
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, выбрав поток traffic-stream.

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

Отображение видео в прямом эфире в пользовательском интерфейсе. Отображение видео в реальном времени, загружаемого в поток в консоли Google Cloud. Видео предоставлено: Elizabeth Mavor на Pixabay ( добавлено пикселирование ).

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

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

Подробнее о Cloud Function можно узнать здесь.

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

  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 можно использовать 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 \

В качестве альтернативы вы можете использовать пользовательский интерфейс публикации/подписки.

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. В строке traffic-app выберите «Просмотреть график» . Это переведет вас к графической визуализации конвейера обработки.

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

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

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

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

3acdb6f1e8474e07.pngce63449d601995e9.png

194c54d2bbcf7e8a.png

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

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

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

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

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

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

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

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

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

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

Пример диалогового окна «Не удалось загрузить уведомление о событии»

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

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

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

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

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

Дальнейшие шаги предполагают наличие у вас подписки с возможностью запроса изменений (pull subscription).

  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

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

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

Опрос

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

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

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

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