具有事件管理功能的 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 控制台中正在提取到数据流中的视频的实时视图。视频制作人员:Pixabay 上的 Elizabeth Mavor添加了像素化效果)。

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. 点击“添加”图标 Create
  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 对你有多大用处?

非常有用 比较有用