具有事件管理功能的 Vertex AI Vision 占位分析应用

1. 目标

概览

此 Codelab 将重点介绍如何端到端地创建 Vertex AI Vision 应用,以使用事件管理功能发送事件。我们将使用预训练的专用模型“入住分析”的内置功能,根据以下内容的捕获情况生成事件:

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

学习内容

  • 如何提取视频以进行流式传输
  • 如何在 Vertex AI Vision 中创建应用
  • 入住率分析中提供的不同功能以及如何使用这些功能
  • 如何部署应用
  • 如何在 Vertex AI Vision 的媒体仓库中搜索存储的视频。
  • 如何创建处理入住分析模型数据的 Cloud Functions 函数。
  • 如何创建 Pub/Sub 主题和订阅。
  • 如何设置事件管理以通过 Pub/Sub 主题发送事件。

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. 注入视频文件以进行流式传输

您可以使用 vaictl 将视频数据流式传输到入住情况分析应用。

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

注册新的视频流

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

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

准备示例视频

  1. 您可以使用以下 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添加了像素化效果)。

4. 创建 Cloud Functions 函数

我们需要一个 Cloud Functions 函数来处理模型的数据并生成稍后将通过事件渠道发送的事件。

您可以点击此处详细了解 Cloud Functions

创建监听模型的 Cloud Functions 函数

  1. 前往 Cloud Functions 界面创建页面
  2. 设置函数名称,该名称稍后将用于在“活动管理”设置中引用此 Cloud Functions 函数。
  3. 确保区域与您的应用相符。
  4. 调整并保存触发器设置。
  5. 点击“下一步”按钮,前往“代码”部分。未能加载 Cloud Functions 函数创建示例
  6. 修改您的 Cloud Functions 函数。下面是一个使用 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 订阅需要订阅已配置的光学数据。

您可以点击此处此处详细了解 Pub/Sub 主题和订阅。

创建 Pub/Sub 主题

如需创建 Pub/Sub 主题,您可以使用 gcloud CLI:(您应将 SUBSCRIPTION_ID 替换为设置中的实际值)

gcloud pubsub topics create TOPIC_ID

或者,您也可以使用 Pub/Sub 界面

创建 Pub/Sub 订阅

如需创建 Pub/Sub 订阅,您可以使用 gcloud CLI:(您应将 SUBSCRIPTION_ID 和 TOPIC_ID 替换为设置中的实际值)

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

或者,您也可以使用 Pub/Sub 界面

6. 创建应用

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

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

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

创建空应用

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

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

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

前往“应用”标签页

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

添加应用组件节点

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

  1. 注入节点:注入数据的流资源。
  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. 点击创建按钮以添加仓库。

7. 配置事件管理

时长 02:00

我们将模型连接到之前创建的 Cloud Functions 以进行后处理,其中 Cloud Functions 可以自由处理模型的输出并生成符合您需求的事件。然后,我们将之前创建的 Pub/Sub 主题配置为目标,从而配置事件渠道。您还可以设置最小间隔,这有助于避免您的事件渠道在短时间内被同一事件淹没。

选择用于后处理的 Cloud Functions 函数

  1. 点击应用图中的数据处理节点(入住情况分析)以打开侧边菜单。
  2. 在“后处理”下拉菜单中选择您的 Cloud Functions 函数(通过函数名称识别)。
  3. 应用图表会自动保存您所做的更改。

未能加载配置后处理示例

配置事件渠道

  1. 点击应用图中的数据处理节点(入住情况分析)以打开侧边菜单。
  2. 在“活动通知”部分中,点击“设置活动通知”。未能加载“活动通知”示例
  3. 在下拉菜单中选择您的 Pub/Sub 主题。
  4. (可选)设置事件发布的最小间隔/频率。

未能加载“活动通知”对话框示例

8. 部署应用以供使用

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

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

9. 验证 Pub/Sub 订阅中的事件/消息

将视频数据提取到处理应用后,Cloud Functions 函数应在入住率分析模型输出注释后生成事件。然后,这些事件应通过您的 Pub/Sub 主题作为消息发布,并由您的订阅接收。

以下步骤假定您拥有拉取订阅。

  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

反馈

点击此处可提供反馈

调查问卷

您将如何使用本教程?

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

本 Codelab 对您是否有用?

非常有用 用处一般