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 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-in-browser 窗口中,使用以下命令下载 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 左侧面板上的“流”标签页。
  2. 点击“Register”(注册)
  3. 在“数据流名称”中,输入“traffic-stream”
  4. 在区域中输入“us-central1”
  5. 点击“注册”

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

将示例视频复制到虚拟机

  1. 在虚拟机的 SSH-in-browser 窗口中,使用以下 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 MavorPixabay添加了像素化功能)。

5. 创建应用

第一步是创建可处理您的数据的应用。应用可以视为连接以下各项的自动化流水线:

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

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

创建空应用

您必须先创建一个空应用,然后才能填充应用图表。

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

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

前往“Applications”(应用)标签页

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

添加应用组件节点

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

  1. 提取节点:用于提取从您创建的 Compute Engine 虚拟机实例发送的数据的流资源。
  2. 处理节点:对提取的数据执行操作的占用分析模型。
  3. 存储节点:用于存储已处理的视频并用作元数据存储空间的媒体仓库。元数据存储空间包括有关所提取视频数据的分析信息,以及 AI 模型推断出的信息。

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

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

添加数据注入节点

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

添加数据处理节点

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

3acdb6f1e8474e07 ce63449d601995e9.png

194c54d2bbcf7e8a

添加数据存储节点

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

6. 将输出连接到 BigQuery 表

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

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

自动创建表

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

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

  • 数据集:自动创建的数据集名称为 visionai_dataset。
  • 表:自动创建的表名称为 visionai_dataset.APPLICATION_ID。
  • 错误处理:
  • 如果同一数据集下已存在同名的表,系统不会自动创建该表。
  1. 打开 Vertex AI Vision 信息中心的应用标签页。前往“Applications”(应用)标签页
  2. 从列表中选择应用名称旁边的查看应用
  3. 在应用构建器页面上,从连接器部分选择 BigQuery
  4. BigQuery 路径字段留空。ee0b67d4ab2263d.png
  5. 商店元数据来源中:仅选择“占用分析”然后取消选中“视频流”

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

1787242465fd6da7

7. 部署应用以供使用

使用所有必要组件构建端到端应用后,使用应用的最后一步是部署应用。

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

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

将视频数据注入处理应用后,您可以查看经过分析的视频数据,并根据占用分析信息搜索数据。

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

e636361b19738c8d.png

查看 Google Cloud 控制台中与搜索条件匹配的存储视频数据。视频来源:Pixabay 发布的 Elizabeth Mavor已应用搜索条件)。

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

在上述查询中,您可以更改“车辆”发送至“个人”以统计人员数量。

此 Codelab 将仅显示 Query1 的示例数据和可视化内容。您可以按照与 Query2 类似的流程操作。

e6fd891f3a46246.png

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

9e737ddb4d0d25b6

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

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

深蓝色和浅蓝色的条表示两个不同的线条 ID。

10. 恭喜

恭喜,您已完成本实验!

清理

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

删除项目

删除各个资源

资源

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

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

反馈

点击此处提供反馈

调查问卷

您将如何使用本教程?

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

此 Codelab 对你有多大用处?

非常有用 比较有用