1. Цели
Обзор
В этом практическом занятии мы сосредоточимся на создании комплексного приложения Vertex AI Vision для мониторинга видеозаписей дорожного движения в реальном времени . Мы будем использовать встроенные функции предварительно обученной специализированной модели Occupancy analytics для сбора следующей информации:
- Подсчитайте количество транспортных средств и людей, переходящих дорогу по определенной линии.
- Подсчитайте количество транспортных средств на одного человека на любом фиксированном участке дороги.
- Выявление заторов на любом участке дороги.
Что вы узнаете
- Как настроить виртуальную машину для приема видео для потоковой передачи.
- Как создать приложение в Vertex AI Vision
- Различные функции, доступные в Occupancy Analytics, и способы их использования.
- Как развернуть приложение
- Как искать видео в хранилище данных Vertex AI Vision Media Warehouse.
- Как подключить выходные данные к BigQuery, написать SQL-запрос для извлечения информации из JSON-данных модели и визуализировать результат в Looker Studio в режиме реального времени.
2. Перед началом работы
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud . Примечание : если вы не планируете сохранять ресурсы, созданные в ходе этой процедуры, создайте проект вместо выбора существующего. После выполнения этих шагов вы можете удалить проект, удалив все связанные с ним ресурсы. Перейдите к выбору проекта.
- Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
- Включите API Compute Engine и Vision AI. Включите API.
Создайте учетную запись службы:
- В консоли Google Cloud перейдите на страницу «Создать учетную запись службы» . Перейдите по ссылке «Создать учетную запись службы» .
- Выберите свой проект.
- В поле « Имя учетной записи службы» введите имя. Консоль Google Cloud заполнит поле «Идентификатор учетной записи службы» на основе этого имени. В поле «Описание учетной записи службы» введите описание. Например, «Учетная запись службы для быстрого запуска».
- Нажмите «Создать и продолжить» .
- Чтобы предоставить доступ к вашему проекту, назначьте вашей учетной записи службы следующие роли: Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (бета-версия), Storage > Storage Object Viewer † . В списке «Выберите роль» выберите роль. Для добавления дополнительных ролей нажмите «Добавить еще одну роль» и добавьте каждую дополнительную роль. Примечание : Поле «Роль» влияет на то, к каким ресурсам ваша учетная запись службы может получить доступ в вашем проекте. Вы можете отозвать эти роли или предоставить дополнительные роли позже. В производственных средах не назначайте роли «Владелец», «Редактор» или «Просмотрщик». Вместо этого назначьте предопределенную роль или пользовательскую роль , соответствующую вашим потребностям.
- Нажмите «Продолжить» .
- Нажмите «Готово» , чтобы завершить создание учетной записи службы. Не закрывайте окно браузера. Вы будете использовать ее на следующем шаге.
Создайте ключ учетной записи службы:
- В консоли Google Cloud щелкните адрес электронной почты созданной вами учетной записи службы.
- Нажмите клавиши .
- Нажмите «Добавить ключ» , а затем « Создать новый ключ» .
- Нажмите «Создать» . На ваш компьютер будет загружен JSON-файл с ключом.
- Нажмите «Закрыть» .
- Установите и инициализируйте Google Cloud CLI.
† Эта роль необходима только в том случае, если вы копируете образец видеофайла из хранилища Cloud Storage.
3. Настройте виртуальную машину для потоковой передачи видео.
Перед созданием приложения в Occupancy Analytics необходимо зарегистрировать поток данных, который впоследствии сможет использоваться приложением.
В этом руководстве вы создадите экземпляр виртуальной машины Compute Engine, на котором будет размещаться видео, и будете отправлять потоковые видеоданные с этой виртуальной машины.
Создайте виртуальную машину Linux.
Первым шагом при отправке видео с экземпляра виртуальной машины Compute Engine является создание этого экземпляра виртуальной машины.
- В консоли перейдите на страницу экземпляров виртуальных машин . Перейдите в раздел «Экземпляры виртуальных машин» .
- Выберите свой проект и нажмите «Продолжить» .
- Нажмите «Создать экземпляр» .
- Укажите имя для вашей виртуальной машины. Дополнительную информацию см. в разделе «Соглашение об именовании ресурсов» .
- Необязательно: измените зону для этой виртуальной машины. Compute Engine рандомизирует список зон в каждом регионе, чтобы стимулировать использование нескольких зон.
- Примите оставшиеся параметры по умолчанию. Дополнительную информацию об этих параметрах см. в разделе «Создание и запуск виртуальной машины» .
- Чтобы создать и запустить виртуальную машину, нажмите кнопку «Создать» .
Настройка среды виртуальной машины
После запуска виртуальной машины вы можете подключиться к ней по SSH через консоль в браузере. Затем вы можете загрузить инструмент командной строки vaictl для импорта видео в ваш поток.
Установите SSH-соединение с вашей виртуальной машиной.
- В консоли перейдите на страницу экземпляров виртуальных машин . Перейдите в раздел «Экземпляры виртуальных машин» .
- В разделе «Подключение» созданной вами строки экземпляра нажмите SSH . Это откроет SSH-соединение в новом окне браузера.

Загрузите инструмент командной строки vaictl.
- В окне SSH в браузере загрузите инструмент командной строки Vertex AI Vision (vaictl), используя следующую команду:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
- Установите инструмент командной строки, выполнив следующую команду:
sudo apt install ./visionai_0.0-4_amd64.deb
- Проверить установку можно, выполнив следующую команду:
vaictl --help
4. Загрузите видеофайл для потоковой передачи.
После настройки виртуальной среды вы можете скопировать образец видеофайла, а затем использовать vaictl для потоковой передачи видеоданных в ваше приложение для анализа заполняемости помещений.
Для начала активируйте API Vision AI в облачной консоли.
Зарегистрировать новый поток
- В программе Vertex AI Vision нажмите вкладку «Потоки» на левой панели.
- Нажмите «Зарегистрироваться»
- В поле "Название потока" введите 'traffic-stream'.
- В поле «Регион» введите 'us-central1'.
- Нажмите «Зарегистрироваться»
Регистрация трансляции займет несколько минут.
Скопируйте образец видео на свою виртуальную машину.
- В окне SSH-подключения в браузере вашей виртуальной машины скопируйте образец видео с помощью следующей команды 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 flag: Необязательный параметр. Зацикливает передачу данных из файла для имитации потоковой передачи.
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, выбрав поток traffic-stream.
Перейдите во вкладку «Трансляции».
Отображение видео в реальном времени, загружаемого в поток в консоли Google Cloud. Видео предоставлено: Elizabeth Mavor на Pixabay ( добавлено пикселирование ).
5. Создайте приложение
Первый шаг — создание приложения, которое будет обрабатывать ваши данные. Приложение можно рассматривать как автоматизированный конвейер, соединяющий следующие элементы:
- Ввод данных : Видеопоток вводится в поток.
- Анализ данных : После обработки данных можно добавить модель искусственного интеллекта (компьютерного зрения).
- Хранение данных : Две версии видеопотока (исходный поток и поток, обработанный моделью ИИ) могут храниться в медиатеке.
В консоли Google Cloud приложение отображается в виде графа.
Создайте пустое приложение
Прежде чем заполнять график приложения, необходимо сначала создать пустое приложение.
Создайте приложение в консоли Google Cloud.
- Перейдите в консоль Google Cloud.
- Откройте вкладку «Приложения» на панели управления Vertex AI Vision.
Перейдите на вкладку «Приложения».
- Нажмите кнопку «Добавить» > « Создать» .
- Введите traffic-app в качестве названия приложения и выберите свой регион.
- Нажмите «Создать» .
Добавить узлы компонентов приложения
После создания пустого приложения вы можете добавить три узла в граф приложения:
- Узел приема данных : ресурс потока, который принимает данные, отправляемые из созданного вами экземпляра виртуальной машины Compute Engine.
- Узел обработки : Модель анализа занятости, которая обрабатывает полученные данные.
- Узел хранения : хранилище медиафайлов, в котором хранятся обработанные видеоматериалы и которое служит хранилищем метаданных. Хранилища метаданных содержат аналитическую информацию о принятых видеоданных и информацию, полученную моделями искусственного интеллекта.
Добавьте узлы компонентов в ваше приложение через консоль.
- Откройте вкладку «Приложения» на панели управления Vertex AI Vision. Перейдите на вкладку «Приложения».
- В строке traffic-app выберите «Просмотреть график» . Это переведет вас к графической визуализации конвейера обработки.
Добавить узел приема данных
- Чтобы добавить узел входного потока, выберите параметр « Потоки» в разделе «Соединители » бокового меню.
- В разделе «Источник» открывшегося меню «Поток» выберите «Добавить потоки» .
- В меню «Добавить потоки» выберите «Зарегистрировать новые потоки » и добавьте traffic-stream в качестве имени потока.
- Чтобы добавить поток в график приложения, нажмите «Добавить потоки» .
Добавьте узел обработки данных.
- Чтобы добавить узел модели подсчета заполняемости, выберите опцию «Аналитика заполняемости» в разделе «Специализированные модели» бокового меню.
- Оставьте значения по умолчанию для пунктов «Люди» и «Транспортные средства» .
- Добавление линий в местах пересечения линий. Используйте инструмент «Многоточечная линия», чтобы нарисовать линии там, где необходимо обнаружить въезжающие или выезжающие автомобили или въезжающих людей.
- Обозначьте активные зоны, чтобы подсчитать количество людей/транспортных средств в каждой из них.
- Добавьте параметры времени задержки для обнаружения перегрузки, если отображается активная зона.
- (В настоящее время одновременное использование активной зоны и пересечения линии не поддерживается. Используйте только одну функцию за раз.)



Добавьте узел хранения данных.
- Чтобы добавить узел назначения (хранилища) выходных данных, выберите опцию Media Warehouse в разделе Connectors бокового меню Vertex AI Vision .
- В меню Media Warehouse системы Vertex AI Vision нажмите «Подключить хранилище» .
- В меню Connect warehouse выберите «Создать новый склад» . Назовите склад traffic-warehouse и оставьте значение TTL равным 14 дням.
- Нажмите кнопку «Создать» , чтобы добавить склад.
6. Подключите выходные данные к таблице BigQuery.
При добавлении коннектора BigQuery к вашему приложению Vertex AI Vision все выходные данные моделей подключенного приложения будут загружаться в целевую таблицу.
Вы можете либо создать собственную таблицу BigQuery и указать её при добавлении коннектора BigQuery в приложение, либо позволить платформе приложений Vertex AI Vision автоматически создать таблицу.
Автоматическое создание таблиц
Если вы позволите платформе приложений Vertex AI Vision автоматически создавать таблицу, вы можете указать этот параметр при добавлении узла коннектора BigQuery.
Для автоматического создания таблиц необходимо соблюдать следующие условия для набора данных и таблиц:
- Набор данных: Автоматически созданный набор данных имеет имя visionai_dataset.
- Таблица: Имя автоматически созданной таблицы — visionai_dataset.APPLICATION_ID.
- Обработка ошибок:
- Если таблица с тем же именем в том же наборе данных уже существует, автоматическое создание не происходит.
- Откройте вкладку «Приложения» на панели управления Vertex AI Vision. Перейдите на вкладку «Приложения».
- Выберите в списке пункт «Просмотреть приложение» рядом с названием вашего приложения.
- На странице конструктора приложений выберите BigQuery в разделе «Коннекторы» .
- Оставьте поле "Путь в BigQuery" пустым.

- В разделе «Метаданные хранилища» выберите только «Аналитика заполняемости» и снимите флажок «Потоки».
Итоговый график приложения должен выглядеть примерно так:

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

8. Выполните поиск видеоконтента в хранилище данных.
После загрузки видеоданных в приложение для обработки вы можете просмотреть проанализированные видеоданные и выполнить поиск по данным на основе аналитики занятости.
- Откройте вкладку «Склады» на панели управления Vertex AI Vision. Перейдите на вкладку «Склады».
- Найдите в списке склад, предназначенный для транспортировки грузов, и нажмите «Просмотреть активы» .
- В разделе «Количество людей» или «Количество транспортных средств» установите минимальное значение равным 1, а максимальное значение — 5.
- Для фильтрации обработанных видеоданных, хранящихся в хранилище медиафайлов Vertex AI Vision, нажмите «Поиск» .

Представление сохраненных видеоданных, соответствующих критериям поиска в консоли Google Cloud. Видео предоставлено: Elizabeth Mavor на Pixabay ( применены критерии поиска ).
9. Анализ результатов в таблице BigQuery
Перейдите в BigQuery
Выберите набор данных: visionai_dataset
Выберите таблицу: ваш APPLICATION_ID (в данном случае traffic-app)
Щелкните по трем точкам справа от названия таблицы и выберите «Запрос».
Напишите следующий запрос
Запрос 1: Запрос для проверки количества транспортных средств, пересекающих каждую строку в минуту.
abc.sql
—- Get list of active marked lines for each timeframe
WITH line_array AS (
SELECT
t.ingestion_time AS ingestion_time,
JSON_QUERY_ARRAY(t.annotation.stats["crossingLineCounts"]) AS lines
FROM
`PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active lines to get individual entities details
flattened AS (
SELECT
line_array.ingestion_time,
JSON_VALUE(line.annotation.id) as line_id,
JSON_QUERY_ARRAY(line["positiveDirectionCounts"]) AS entities
FROM line_array, unnest(line_array.lines) as line
)
—- Generate aggregate vehicle count per zone w.r.t time
SELECT
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, line_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM
flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, line_id
Запрос 2: Запрос для проверки количества транспортных средств в минуту в каждой зоне.
—- Get list of active zones for each timeframe
WITH zone_array AS (
SELECT
t.ingestion_time AS ingestion_time,
JSON_QUERY_ARRAY(t.annotation.stats["activeZoneCounts"]) AS zones
FROM
`PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active zones to get individual entities details
flattened AS (
SELECT zone_array.ingestion_time, JSON_VALUE(zone.annotation.id) as zone_id,
JSON_QUERY_ARRAY(zone["counts"]) AS entities
FROM zone_array, unnest(zone_array.zones) as zone
)
—- Generate aggregate vehicle count per zone w.r.t time
SELECT
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time,
zone_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, zone_id
В приведенных выше запросах вы можете заменить "Vehicle" на "Person", чтобы подсчитать количество людей.
В этом практическом занятии будут показаны примеры данных и визуализация только для запроса 1. Для запроса 2 вы можете выполнить аналогичные действия.

В правом боковом меню нажмите «Просмотреть данные» и выберите «Просмотреть с помощью Looker Studio».

В панели «Измерение» добавьте время и измените конфигурацию времени на дату и время. В панели «Измерение детализации» добавьте line_id. 
На приведенном выше графике показано количество транспортных средств на одного человека, пересекающих каждую линию в минуту.
Темно-синие и светло-синие полосы обозначают два разных идентификатора строк.
10. Поздравляем!
Поздравляем, вы завершили лабораторную работу!
Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий эти ресурсы, либо сохраните проект и удалите отдельные ресурсы.
Удалить проект
Удалить отдельные ресурсы
Ресурсы
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
Обратная связь
Нажмите здесь, чтобы оставить отзыв.