具有事件管理功能的 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 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 左侧面板上的“流”标签页。
  2. 点击“Register”(注册)
  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 MavorPixabay添加了像素化功能)。

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(计算机视觉)模型。
  • 数据存储:两个版本的视频 Feed(原始视频流和 AI 模型处理的视频流)可以存储在媒体仓库中。

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

创建空应用

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

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

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

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

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

添加应用组件节点

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

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

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 信息中心的应用标签页。前往“Applications”(应用)标签页
  2. 选择列表中的流量应用应用旁边的查看图表
  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 对你有多大用处?

非常有用 比较有用