1. Цели
Обзор
Эта лаборатория будет посвящена созданию комплексного приложения Vertex AI Vision для отправки событий с функцией управления событиями . Мы будем использовать предварительно обученные встроенные функции аналитики занятости специализированной модели для генерации событий на основе сбора следующих данных:
- Подсчитайте количество транспортных средств и людей, переходящих дорогу на определенной линии.
- Подсчитайте количество транспортных средств/человека на любом фиксированном участке дороги.
- Обнаружение пробок на любом участке дороги.
Что вы узнаете
- Как импортировать видео для потоковой передачи
- Как создать приложение в Vertex AI Vision
- Различные функции, доступные в аналитике занятости, и способы их использования.
- Как развернуть приложение
- Как искать видео в вашем хранилище Медиа-хранилище Vertex AI Vision.
- Как создать облачную функцию, которая обрабатывает данные модели Occupancy Analytics.
- Как создать тему Pub/Sub и подписку.
- Как настроить управление событиями для отправки событий через Pub/Sub Topic.
2. Прежде чем начать
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud . Примечание . Если вы не планируете сохранять ресурсы, созданные в ходе этой процедуры, создайте проект вместо выбора существующего проекта. После выполнения этих шагов вы можете удалить проект, удалив все ресурсы, связанные с ним. Перейти к выбору проектов
- Убедитесь, что для вашего облачного проекта включена оплата. Узнайте, как проверить, включена ли оплата в проекте .
- Включите API Compute Engine и Vision AI. Включите API
Создайте учетную запись службы:
- В консоли Google Cloud перейдите на страницу «Создать учетную запись службы» . Перейти к созданию учетной записи службы.
- Выберите свой проект.
- В поле Имя учетной записи службы введите имя. Консоль Google Cloud заполняет поле «Идентификатор учетной записи службы» на основе этого имени. В поле Описание учетной записи службы введите описание. Например, учетная запись службы для быстрого запуска.
- Нажмите «Создать» и продолжите .
- Чтобы предоставить доступ к вашему проекту, предоставьте своей сервисной учетной записи следующие роли: Vision AI > Редактор Vision AI, Compute Engine > Администратор экземпляра Compute (бета), Хранилище > Средство просмотра объектов хранилища † . В списке Выберите роль выберите роль. Для дополнительных ролей нажмите «Добавить еще одну роль» и добавьте каждую дополнительную роль. Примечание . Поле «Роль» влияет на то, к каким ресурсам ваш сервисный аккаунт может получить доступ в вашем проекте. Вы можете отозвать эти роли или предоставить дополнительные роли позже. В производственных средах не предоставляйте роли владельца, редактора или зрителя. Вместо этого предоставьте предопределенную или настраиваемую роль , соответствующую вашим потребностям.
- Нажмите Продолжить .
- Нажмите Готово , чтобы завершить создание учетной записи службы. Не закрывайте окно браузера. Вы будете использовать его на следующем шаге.
Создайте ключ сервисного аккаунта:
- В консоли Google Cloud щелкните адрес электронной почты созданной вами учетной записи службы.
- Нажмите «Ключи» .
- Нажмите «Добавить ключ» , а затем нажмите « Создать новый ключ» .
- Нажмите Создать . Ключевой файл JSON будет загружен на ваш компьютер.
- Нажмите Закрыть .
- Установите и инициализируйте Google Cloud CLI.
† Роль необходима только в том случае, если вы копируете образец видеофайла из корзины Cloud Storage.
3. Загрузите видеофайл для потоковой передачи.
Вы можете использовать vaictl для потоковой передачи видеоданных в приложение для анализа занятости.
Начните с активации Vision AI API в облачной консоли.
Зарегистрируйте новый поток
- Нажмите вкладку «Потоки» на левой панели Vertex AI Vision.
- Нажмите «Зарегистрироваться»
- В имени потока введите «traffic-stream».
- В регионе введите «us-central1».
- Нажмите «Зарегистрироваться»
Регистрация на стрим займет пару минут.
Подготовьте образец видео
- Вы можете скопировать пример видео с помощью следующей команды 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 .
Вставляйте данные в свой поток
- Чтобы отправить этот локальный видеофайл во входной поток приложения, используйте следующую команду. Вы должны сделать следующие замены переменных:
- 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
- Эта команда передает видеофайл в поток. Если вы используете флаг –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. Создайте облачную функцию
Нам понадобится облачная функция для обработки данных модели и генерации событий, которые позже будут отправлены через канал событий.
Подробнее об облачной функции можно узнать здесь.
Создайте облачную функцию, которая слушает вашу модель.
- Перейдите на страницу создания пользовательского интерфейса облачной функции.
- Задайте имя функции, которое позже будет использоваться для ссылки на эту облачную функцию в настройках управления событиями.
- Убедитесь, что регион соответствует вашему приложению.
- Отрегулируйте, а затем сохраните настройки триггера.
- Нажмите кнопку «Далее», чтобы перейти к части «кода».
- Отредактируйте свою облачную функцию. Вот пример среды выполнения 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);
}
- Нажмите кнопку «Развернуть», чтобы развернуть функцию.
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.
- Перейдите в консоль Google Cloud.
- Откройте вкладку «Приложения» панели управления Vertex AI Vision.
Перейдите на вкладку «Приложения»
- Нажмите кнопку «Добавить Создать» .
- Введите Traffic-App в качестве названия приложения и выберите свой регион.
- Нажмите Создать .
Добавьте узлы компонентов приложения
После создания пустого приложения вы можете добавить три узла в граф приложения:
- Узел приема : ресурс потока, который принимает данные.
- Узел обработки : модель анализа занятости, которая действует на основе полученных данных.
- Узел хранения : медиа-хранилище, в котором хранятся обработанные видео и служит хранилищем метаданных. Хранилища метаданных включают аналитическую информацию о загруженных видеоданных и информацию, полученную с помощью моделей искусственного интеллекта.
Добавьте узлы компонентов в свое приложение в консоли.
- Откройте вкладку «Приложения» панели управления Vertex AI Vision. Перейдите на вкладку «Приложения»
- В строке трафик-приложение выберите Просмотр графика . Это приведет вас к графической визуализации конвейера обработки.
Добавьте узел приема данных
- Чтобы добавить узел входного потока, выберите параметр «Потоки» в разделе «Соединители» бокового меню.
- В разделе «Источник» открывшегося меню «Поток» выберите «Добавить потоки» .
- В меню «Добавить потоки» выберите «Зарегистрировать новые потоки» и добавьте Traffic-stream в качестве имени потока.
- Чтобы добавить поток в график приложения, нажмите «Добавить потоки» .
Добавляем узел обработки данных
- Чтобы добавить узел модели подсчета занятости, выберите параметр «Аналитика занятости» в разделе «Специализированные модели» бокового меню.
- Оставьте настройки по умолчанию «Люди» и «Транспортные средства» .
- Добавьте линии при пересечении линий. Используйте инструмент «Многоточечная линия», чтобы нарисовать линии там, где вам нужно обнаруживать выходящие или входящие автомобили или людей.
- Нарисуйте активные зоны для подсчета людей/транспортных средств в этой зоне.
- Добавьте настройки времени задержки, чтобы обнаружить перегрузку, если нарисована активная зона.
- (в настоящее время активная зона и пересечение линии не поддерживаются одновременно. Используйте одновременно только одну функцию.)
Добавить узел хранения данных
- Чтобы добавить узел назначения вывода (хранилища), выберите параметр «Медиа-хранилище Vertex AI Vision» в разделе «Соединители» бокового меню.
- В меню «Медиа-хранилище» Vertex AI Vision нажмите «Подключить хранилище» .
- В меню Подключить склад выберите Создать новый склад . Назовите склад-склад-склад и оставьте длительность TTL равной 14 дням.
- Нажмите кнопку «Создать» , чтобы добавить склад.
7. Настройте управление событиями
Продолжительность 02:00
Мы подключим модель к ранее созданной облачной функции для постобработки, где облачная функция сможет свободно обрабатывать выходные данные модели и генерировать события в соответствии с вашими потребностями. Затем мы настроим канал событий, настроив ранее созданную тему Pub/Sub в качестве нашей цели. Вы также можете установить минимальный интервал, который поможет избежать переполнения вашего канала событий одним и тем же событием за короткий период времени.
Выберите функцию облака для постобработки.
- Нажмите на узел обработки данных ( аналитика занятости ) на графике вашего приложения, чтобы открыть боковое меню.
- Выберите облачную функцию (определяемую ее именем) в раскрывающемся списке «Постобработка».
- График приложения автоматически сохранит ваши изменения.
Настроить канал событий
- Нажмите на узел обработки данных ( аналитика занятости ) на графике вашего приложения, чтобы открыть боковое меню.
- Нажмите «НАСТРОЙКА УВЕДОМЛЕНИЯ О СОБЫТИЯХ» в разделе «Уведомление о событиях».
- Выберите тему Pub/Sub в раскрывающемся списке.
- (необязательно) установите минимальный интервал/частоту публикации событий.
8. Разверните свое приложение для использования
После того как вы создали комплексное приложение со всеми необходимыми компонентами, последним шагом к использованию приложения является его развертывание.
- Откройте вкладку «Приложения» панели управления Vertex AI Vision. Перейдите на вкладку «Приложения»
- Выберите «Просмотреть график» рядом с приложением дорожного движения в списке.
- На странице построителя графов приложений нажмите кнопку «Развернуть» .
- В следующем диалоговом окне подтверждения выберите «Развернуть» . Операция развертывания может занять несколько минут. После завершения развертывания рядом с узлами появятся зеленые галочки.
9. Проверьте события/сообщения в подписке Pub/Sub.
После того как вы загрузите видеоданные в приложение для обработки, облачная функция должна генерировать события, как только модель анализа занятости выведет аннотацию. Затем эти события должны быть опубликованы в виде сообщений в вашей теме Pub/Sub и получены по вашей подписке.
Следующие шаги предполагают, что у вас есть подписка по запросу.
- Откройте список подписок Pub/Sub в своем проекте и найдите соответствующую подписку. Перейти на страницу списка подписок Pub/Sub.
- Перейдите на вкладку «Сообщение».
- Нажмите кнопку «тянуть».
- Просмотрите свое сообщение в таблице.
Альтернативно вы можете узнать, как получать сообщения без пользовательского интерфейса. Перейти на страницу подписки
10. Поздравления
Поздравляем, вы закончили лабораторную работу!
Очистить
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удалить проект
Удаление отдельных ресурсов
Ресурсы
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
Обратная связь
Нажмите здесь, чтобы оставить отзыв