Vertex AI Vision 流量监控应用

1. 目标

概览

此 Codelab 将重点介绍如何端到端地创建 Vertex AI Vision 应用,以监控实时交通视频片段。我们将使用预训练的专业模型“入住情况分析”的内置功能来捕获以下内容:

  • 统计在特定线上穿过道路的车辆和人员数量。
  • 统计道路上任意固定区域内的车辆/人数。
  • 检测道路任何部分的拥堵情况。

学习内容

  • 如何设置虚拟机以提取视频进行流式传输
  • 如何在 Vertex AI Vision 中创建应用
  • 入住率分析中提供的不同功能以及如何使用这些功能
  • 如何部署应用
  • 如何在 Vertex AI Vision 的媒体仓库中搜索存储的视频。
  • 如何将输出连接到 BigQuery,编写 SQL 查询以从模型的 JSON 输出中提取数据洞见,并在 Looker Studio 中实时直观呈现结果。

2. 准备工作

  1. 在 Google Cloud 控制台的“项目选择器”页面上,选择或创建 Google Cloud 项目注意:如果您不打算保留在此过程中创建的资源,请创建新的项目,而不要选择现有的项目。完成本教程介绍的步骤后,您可以删除所创建的项目,并移除与该项目关联的所有资源。前往“项目选择器”
  2. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能
  3. 启用 Compute Engine 和 Vision AI API。启用 API

创建服务账号

  1. 在 Google Cloud 控制台中,前往创建服务账号页面。前往“创建服务账号”
  2. 选择您的项目。
  3. 服务账号名称字段中,输入一个名称。Google Cloud 控制台会根据此名称填充服务账号 ID 字段。在服务账号说明字段中,输入说明。例如,快速入门服务账号。
  4. 点击创建并继续
  5. 如需提供对项目的访问权限,请向服务账号授予以下角色:Vision AI > Vision AI Editor、Compute Engine > Compute Instance Admin(Beta 版)、Storage > Storage Object Viewer †。在选择角色列表中,选择一个角色。如需添加其他角色,请点击添加其他角色,然后添加其他各个角色。注意角色字段会影响您的服务账号可以访问项目中的哪些资源。您可以撤消这些角色或稍后授予其他角色。在生产环境中,请勿授予 Owner、Editor 或 Viewer 角色。应授予满足您的需求的预定义角色自定义角色
  6. 点击继续
  7. 点击完成以完成服务账号的创建过程。不要关闭浏览器窗口。您将在下一步骤中用到它。

创建服务账号密钥

  1. 在 Google Cloud 控制台中,点击您创建的服务账号的电子邮件地址。
  2. 点击密钥
  3. 点击添加密钥,然后点击创建新密钥
  4. 点击创建。JSON 密钥文件将下载到您的计算机上。
  5. 点击关闭
  6. 安装初始化 Google Cloud CLI。

† 仅当您从 Cloud Storage 存储分区复制示例视频文件时,才需要此角色。

3. 设置用于流式传输视频的虚拟机

在入住分析中创建应用之前,您必须先注册一个可供该应用日后使用的流。

在本教程中,您将创建一个托管视频的 Compute Engine 虚拟机实例,并从该虚拟机发送流式视频数据。

创建一个 Linux VM

从 Compute Engine 虚拟机实例发送视频的第一步是创建虚拟机实例。

  1. 在控制台中,打开虚拟机实例页面。转到“虚拟机实例”
  2. 选择您的项目并点击继续
  3. 点击创建实例
  4. 为您的虚拟机指定名称。如需了解详情,请参阅资源命名惯例
  5. 可选操作:更改此虚拟机的可用区。Compute Engine 会随机列出每个区域内的可用区,以支持跨多个可用区使用。
  6. 接受其余的默认选项。如需详细了解这些选项,请参阅创建并启动虚拟机
  7. 要创建并启动该虚拟机,请点击创建

设置虚拟机环境

虚拟机启动后,您可以使用控制台从浏览器通过 SSH 连接到虚拟机。然后,您可以下载 vaictl 命令行工具,将视频提取到您的直播中。

与虚拟机建立 SSH 连接

  1. 在控制台中,打开虚拟机实例页面。转到“虚拟机实例”
  2. 在您创建的实例行的连接部分中,点击 SSH。这将在新的浏览器窗口中打开 SSH 连接。界面中的 SSH 选项

下载 vaictl 命令行工具

  1. 浏览器中的 SSH 窗口中,使用以下命令下载 Vertex AI Vision (vaictl) 命令行工具:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
  1. 运行以下命令来安装命令行工具:
sudo apt install ./visionai_0.0-4_amd64.deb
  1. 您可以运行以下命令来测试安装:
vaictl --help

4. 注入视频文件以进行流式传输

设置虚拟机环境后,您可以复制一个示例视频文件,然后使用 vaictl 将视频数据流式传输到入住率分析应用。

首先在 Cloud 控制台中激活 Vision AI API

注册新的视频流

  1. 点击 Vertex AI Vision 左侧面板上的“Streams”(视频流)标签页。
  2. 点击“注册”
  3. 在“数据流名称”中输入“traffic-stream”
  4. 在“区域”中输入“us-central1”
  5. 点击“注册”

注册直播需要几分钟时间。

将示例视频复制到虚拟机

  1. 在虚拟机的浏览器中的 SSH 窗口中,使用以下 gsutil cp 命令复制示例视频。执行以下变量替换操作:
  • SOURCE:要使用的视频文件的位置。您可以使用自己的视频文件来源(例如 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 项目 ID。
  • LOCATION_ID:您的位置 ID。例如,us-central1。如需了解详情,请参阅 Cloud 位置
  • 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 信息中心的标签页中选择流量流,以查看视频 Feed。

前往“数据流”标签页

界面中正在直播的视频的视图在 Google Cloud 控制台中实时查看正在提取到直播中的视频。视频来源: Elizabeth Mavor on Pixabay添加了像素化效果)。

5. 创建应用

第一步是创建用于处理数据的应用。应用可以看作是一个自动化的流水线,用于连接以下各项:

  • 数据注入:将视频 Feed 注入到流中。
  • 数据分析:提取数据后,可以添加 AI(计算机视觉)模型。
  • 数据存储:视频源的两个版本(原始视频流和由 AI 模型处理的视频流)可以存储在媒体仓库中。

在 Google Cloud 控制台中,应用以图表的形式表示。

创建空应用

在填充应用图之前,您必须先创建一个空应用。

在 Google Cloud 控制台中创建应用。

  1. 前往 Google Cloud 控制台
  2. 打开 Vertex AI Vision 信息中心的应用标签页。

前往“应用”标签页

  1. 点击添加创建按钮。
  2. 输入 traffic-app 作为应用名称,然后选择您的地区。
  3. 点击创建

添加应用组件节点

创建空应用后,您可以将以下三个节点添加到应用图中:

  1. 提取节点:用于提取您创建的 Compute Engine 虚拟机实例发送的数据的流资源。
  2. 处理节点:对提取的数据进行处理的入住率分析模型。
  3. 存储节点:存储已处理视频并充当元数据存储区的媒体仓库。元数据存储区包含有关已注入视频数据的分析信息,以及 AI 模型推断出的信息。

在控制台中向应用添加组件节点。

  1. 打开 Vertex AI Vision 信息中心的应用标签页。前往“应用”标签页
  2. 在“流量-应用”行中,选择查看图表。此操作会将您带到处理流水线的图表可视化界面。

添加数据注入节点

  1. 如需添加输入视频流节点,请选择侧边菜单的连接器部分中的视频流选项。
  2. 在打开的视频流菜单的来源部分中,选择添加视频流
  3. 添加视频流菜单中,选择注册新的视频流,然后添加 traffic-stream 作为视频流名称。
  4. 如需将视频流添加到应用图表中,请点击添加视频流

添加数据处理节点

  1. 如需添加入住人数统计模型节点,请选择侧边菜单的专用模型部分中的入住分析选项。
  2. 保留默认选择的人员车辆
  3. 在“越线”中添加线条。使用多点线工具绘制需要检测车辆或人员离开或进入的线路。
  4. 绘制活跃区域,以统计该区域内的人员/车辆数量。
  5. 添加了停留时间设置,以便在绘制了活动所涉区域的情况下检测拥堵情况。
  • (目前不支持同时启用区域和线路穿越。一次只能使用一项功能。)

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

添加数据存储节点

  1. 如需添加输出目标位置(存储)节点,请选择侧边菜单的连接器部分中的 Vertex AI Vision 的媒体仓库选项。
  2. Vertex AI Vision 的媒体仓库菜单中,点击连接仓库
  3. 连接仓库菜单中,选择创建新仓库。将仓库命名为“traffic-warehouse”,并将 TTL 时长保留 14 天。
  4. 点击创建按钮以添加仓库。

6. 将输出连接到 BigQuery 表

向 Vertex AI Vision 应用添加 BigQuery 连接器后,所有已连接的应用模型输出都将提取到目标表中。

您可以自行创建 BigQuery 表,并在向应用添加 BigQuery 连接器时指定该表,也可以让 Vertex AI Vision 应用平台自动创建该表。

自动创建表格

如果您让 Vertex AI Vision 应用平台自动创建表,则可以在添加 BigQuery 连接器节点时指定此选项。

如果您想使用自动创建表功能,则必须满足以下数据集和表条件:

  • 数据集:自动创建的数据集名称为 visionai_dataset。
  • 表格:自动创建的表格名称为 visionai_dataset.APPLICATION_ID。
  • 错误处理:
  • 如果同一数据集下存在同名表,则不会自动创建。
  1. 打开 Vertex AI Vision 信息中心的应用标签页。前往“应用”标签页
  2. 从列表中选择应用名称旁边的查看应用
  3. 在应用构建器页面上,从连接器部分选择 BigQuery
  4. BigQuery 路径字段留空。ee0b67d4ab2263d.png
  5. 存储来自以下来源的元数据:中,仅选择“人员/车辆数量分析”,并取消选中数据流。

最终的应用图应如下所示:

1787242465fd6da7.png

7. 部署应用以供使用

在构建包含所有必需组件的端到端应用后,使用该应用的最后一步是部署它。

  1. 打开 Vertex AI Vision 信息中心的应用标签页。前往“应用”标签页
  2. 选择列表中的“traffic-app”应用旁边的查看图表
  3. 在应用图构建器页面中,点击部署按钮。
  4. 在随后的确认对话框中,选择部署。部署操作可能需要几分钟才能完成。部署完成后,节点旁边会显示绿色对勾标记。ee78bbf00e5db898.png

8. 搜索存储仓中的视频内容

将视频数据提取到处理应用后,您可以查看分析后的视频数据,并根据入住情况分析信息搜索数据。

  1. 打开 Vertex AI Vision 信息中心的仓库标签页。前往“数据仓库”标签页
  2. 在列表中找到流量仓库,然后点击查看资产
  3. 人数车辆数部分,将最小值设置为 1,将最大值设置为 5。
  4. 如需过滤存储在 Vertex AI Vision 的媒体仓库中的已处理视频数据,请点击搜索

e636361b19738c8d.png

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”来统计人数。

此 Codelab 将仅显示 Query1 的示例数据和可视化图表。对于 Query2,您可以遵循类似的过程。

e6fd891f3a46246.png

点击右侧侧边菜单中的“探索数据”,然后选择“使用 Looker Studio 探索”

9e737ddb4d0d25b6.png

在“维度”窗格中,添加时间并将时间配置更改为日期时间。在“细分维度”中添加 line_id。b5da9704ccd8db.png

上图显示了每分钟通过每条线的车辆/人数。

深蓝色和浅蓝色条形表示两个不同的 line-id。

10. 恭喜

恭喜,您已完成本实验!

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

删除各个资源

资源

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

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

反馈

点击此处可提供反馈

调查问卷

您将如何使用本教程?

仅阅读教程内容 阅读并完成练习

本 Codelab 对您是否有用?

非常有用 用处一般