1. 目标
概览
此 Codelab 重点介绍如何创建端到端 Vertex AI Vision 应用,以演示如何发送具有移动过滤功能的视频 。在本教程中,我们将介绍移动过滤条件配置中的不同参数:
- 移动侦测灵敏度
- 事件录制时长下限
- 回溯期
- 冷却时长
- 移动侦测区域
学习内容
- 如何提取视频以进行流式传输
- 移动过滤条件中提供的不同功能及其使用方法
- 在何处查看移动过滤条件的统计信息
- 如何根据视频调整设置
2. 准备工作
- 在 Google Cloud 控制台的“项目选择器”页面上,选择或 创建 Google Cloud 项目。注意:如果您不打算保留在此过程中创建的资源,请创建新的项目,而不要选择现有的项目。完成本教程介绍的步骤后,您可以删除所创建的项目,这会移除与该项目关联的所有资源。前往项目选择器
- 确保您的云项目已启用结算功能。了解如何 检查项目是否已启用结算功能。
- 启用 Compute Engine 和 Vision AI API。启用 API
创建服务账号:
- 在 Google Cloud 控制台中,转到创建服务账号 页面。前往“创建服务账号”
- 选择您的项目。
- 在服务账号名称 字段中,输入一个名称。Google Cloud 控制台会根据此名称填充服务账号 ID 字段。在服务账号说明 字段中,输入说明。例如,快速入门的服务账号。
- 点击创建并继续 。
- 如需提供对项目的访问权限,请向服务账号授予以下角色:Vision AI > Vision AI 编辑者、Compute Engine > Compute Instance Admin(Beta 版)、Storage > Storage 对象查看者 † 。在选择角色 列表中,选择一个角色。如需添加其他角色,请点击添加其他角色 ,然后添加其他各个角色。注意:角色字段会影响您的服务账号可以访问项目中的哪些资源。您可以撤消这些角色或稍后授予其他角色。在生产环境中,请勿授予 Owner、Editor 或 Viewer 角色。应授予满足您的需求的 预定义角色 或 自定义角色。
- 点击继续 。
- 点击完成 以完成服务账号的创建过程。不要关闭浏览器窗口。您将在下一步骤中用到它。
创建服务账号密钥:
- 在 Google Cloud 控制台中,点击您创建的服务账号的电子邮件地址。
- 点击密钥 。
- 点击添加密钥 ,然后点击创建新密钥 。
- 点击创建 。JSON 密钥文件将下载到您的计算机上。
- 点击关闭 。
- 安装并初始化 Google Cloud CLI。
† 仅当您从 Cloud Storage 存储分区复制示例视频文件时才需要此角色。
3. 移动过滤条件
移动过滤条件会捕获包含动作事件的移动和产品视频片段。通过调整移动灵敏度、事件录制时长下限、回溯期、冷却期和移动侦测区域,用户可以根据自己的需求配置过滤条件。
移动过滤条件配置
移动过滤条件中提供了 5 种配置,可供自定义。
- 移动灵敏度:触发移动事件的灵敏度。
- 事件录制时长下限:捕获动作事件的最短时长。
- 回溯期:在检测到动作事件之前,视频应开始录制的时长。
- 冷却期:动作事件结束后,系统将进入指定时长的冷却期。在冷却期内,系统不会触发移动事件。
- 移动侦测区域:用户配置的区域,用于指定应在何处运行移动侦测。(将在后面的部分中详细介绍)
移动灵敏度
在 vaictl 命令中使用标志 motion_detection_sensitivity。
字符串。默认媒介。您可以选择“低”“中”或“高”。
移动侦测灵敏度越高,对噪声和较小动作的灵敏度就越高。建议在有较小移动对象(例如远处的人)且光线稳定的情况下使用此设置。
另一方面,低灵敏度对光线干扰的敏感度较低。此设置非常适合光线干扰较多的情况(例如室外环境)以及视频质量较低且可能存在更多噪声的情况。由于此设置是所有过滤条件中最严格的,因此可能会忽略小对象的移动。
事件录制时长下限
在 vaictl 命令中使用标志 min_event_length_in_seconds。
整数。默认值为 10 秒。范围为 0 秒到 3600 秒。
在帧中检测到动作事件片段后,系统将解析的动作事件视频的最短时长。
回溯期
在 vaictl 命令中使用标志 look_back_window_in_seconds。
整数。默认值为 3 秒。范围为 0 秒到 3600 秒。
回溯期是指在检测到动作事件之前缓存的时长。如果我们想了解在检测到移动事件之前几秒钟内帧中发生的情况,此功能非常有用。
冷却期
在 vaictl 命令中使用标志 cool_down_period_in_seconds。
整数。默认值为 300 秒。范围为 0 秒到 3600 秒。
冷却期是指在捕获动作事件后,移动侦测将暂停的时长。在冷却期内,系统不会运行任何计算来检测移动。
4. 基本移动过滤条件示例
Vaictl SDK 手册
如需查看具有运动过滤条件的输入流的 vaictl 手册,请使用以下命令。
vaictl send video-file applying motion-filter -h
准备示例视频
- 您可以使用以下 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 .
准备环境变量
设置以下环境变量以使用提供的命令模板。
vaictl 变量
- 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
运动过滤条件变量
- MOTION_SENSITIVITY:移动侦测的灵敏度。
- MIN_EVENT_LENGTH:移动事件的最短时长。
- LOOK_BACK_WINDOW:在动作事件中首次移动之前捕获的时长。
- COOL_DOWN_PERIOD:在捕获动作事件后,移动侦测将暂停的时长。
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
准备移动过滤条件命令
您可以通过两种方式将移动过滤条件与输入流搭配使用。第一种方式是将动作事件发送到 Cloud 控制台中的流。第二种方式是将移动事件发送到本地存储空间。
将结果发送到 Cloud 控制台
您可以使用 vaictl 将输出视频数据流式传输到 Cloud 控制台。首先在 Cloud 控制台中启用 Vision AI API。
注册新流
- 点击 Vertex AI Vision 左侧面板中的“流”标签页。
- 点击“注册”
- 在“流名称”中输入
motion-detection-stream - 在“区域”中输入
us-central1 - 点击“注册”
将结果发送到流
此命令会将视频文件流式传输到流。如果您使用 –loop 标志,视频将循环播放到流中,直到您停止该命令为止。我们将以后台作业的形式运行此命令,以便它持续流式传输。
在开头添加 nohup,在末尾添加 &,使其成为后台作业。
INPUT_VIDEO=street_vehicles_people.mp4
vaictl -p $PROJECT \
-l $LOCATION_ID \
-c application-cluster-0 \
--service-endpoint visionai.googleapis.com \
send video-file --file-path $INPUT_VIDEO \
applying motion-filter
--motion-sensitivity=$MOTION_SENSITIVITY \
--min-event-length=$MIN_EVENT_LENGTH \
--lookback-length=$LOOK_BACK_WINDOW \
--cooldown-length=$COOL_DOWN_PERIOD \
to streams motion-detection-stream --loop
从启动 vaictl 提取操作到视频显示在信息中心内,可能需要大约 100 秒。
流提取可用后,您可以在 Vertex AI Vision 信息中心的流 标签页中选择 traffic-stream 流,以查看视频 feed。
将结果发送到本地存储空间
此命令会将视频文件流式传输到流。
在开头添加 nohup,在末尾添加 &,使其成为后台作业。
INPUT_VIDEO=street_vehicles_people.mp4
OUTPUT_PATH=<path_to_store_motion_events_on_local_disk>
nohup vaictl -p $PROJECT \
-l $LOCATION_ID \
-c application-cluster-0 \
--service-endpoint visionai.googleapis.com \
send video-file --file-path $INPUT_VIDEO \
applying motion-filter
--motion-sensitivity=$MOTION_SENSITIVITY \
--min-event-length=$MIN_EVENT_LENGTH \
--lookback-length=$LOOK_BACK_WINDOW \
--cooldown-length=$COOL_DOWN_PERIOD \
to mp4file --mp4-file-path=$OUTPUT_PATH --loop
5. 移动侦测区域
在本部分中,我们将深入探讨移动侦测区域的用法以及如何配置它。该区域旨在通过屏蔽来自您不感兴趣区域的移动来改进移动侦测。
移动侦测区域有两种类型:(1) 正区域,移动侦测仅在带注释的区域中运行;(2) 负区域,移动侦测会忽略带注释区域中的任何移动。
区域注释
在 vaictl 命令中使用标志 zone_annotation 输入区域多边形的坐标。
字符串。区域注释的默认值为空。
区域注释将是用户输入的字符串,表示用户想要隐藏或重点关注的帧中的区域。如需注释区域,用户需要为区域中的每个节点指定 x 轴和 y 轴的图片坐标。一个区域需要有三个或更多节点才能形成多边形。一个帧中可以有多个区域。如果区域彼此重叠,则两个区域覆盖的区域仍将被覆盖。
区域注释具有特定的输入语法。
- 如需表示单个节点,请使用
:连接图片坐标的 x 轴和 y 轴。例如,左上角的(0,0)节点将表示为0:0。 - 如需表示单个区域中的所有节点,请使用
;连接节点。例如,对于具有(0,0)、(100,0)、(100,100)和(0, 100)节点的区域,该区域将表示为0:0;100:0;100:100;0:100。始终将节点输入为彼此相邻的连接节点,顺序可以是顺时针或逆时针。
*具有四个节点的方形区域。
*具有三个节点的三角形区域。
- 如需表示单个帧中的多个区域,请使用
-连接不同的区域。例如,如果我们想要输入(0,0)、(100,0)、(100,100)、(0,100)和(120,120)、(110,150)、(200,160),则输入区域注释将为0:0;100:0;100:100;0:100-120:120;110:150;200:160。
*帧内的两个区域。
如需从图片获取坐标,您可以使用一些在线工具来帮助获取坐标。例如,请参阅 Wolfram - Get Coordinates from Image
排除带注释的区域
在 vaictl 命令中使用标志 exclude_annotated_zone 配置在区域内或区域外检测移动。
布尔值。默认值为 false。
排除带注释的区域是用户输入的布尔值,表示用户是否想要在移动侦测中排除带注释的区域。
- 如果设置为
true,带注释的区域将充当负区域。系统不会检测到带注释区域中的移动。
*仅在输入区域之外运行移动侦测。
- 如果设置为 false,该区域将充当正区域,移动侦测将重点关注该区域。
*仅在输入区域内运行移动侦测。
6. 具有移动侦测区域的移动过滤条件示例
在本示例中,我们将使用一个视频,该视频的前景中有一棵树在不断移动。在常规移动过滤条件设置中,视频只会生成一个动作事件,其时长与原始视频的时长相同,因为移动过滤条件会将移动的树注册为“在整个视频中不断移动”。不过,借助移动侦测区域,我们可以正确屏蔽树的移动,并重点关注汽车和行人的移动。
视频准备
示例视频 (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) 包含来自 www.changedetection.net 的树、汽车和行人。
视频来源:N. Goyette、P.-M. Jodoin、F. Porikli、J. Konrad 和 P. Ishwar,changedetection.net:A new change detection benchmark dataset,in Proc. IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012, Providence, RI, 16-21 Jun.,2012
环境变量准备
Google Cloud 项目变量。
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
基本移动过滤条件配置。
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
移动侦测区域配置。
从下方选择一个,了解移动侦测区域的不同使用方式。
排除树以进行移动侦测。
export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150" export EXCLUDE_ANNOTATED_ZONE=true
*仅在输入区域之外运行移动侦测。
将移动侦测重点放在街道上。
export ZONE_ANNOTATION="0:300;780:300;780:480;0:480" export EXCLUDE_ANNOTATED_ZONE=false
*仅在输入区域之外运行移动侦测。
发送具有移动过滤条件的视频流
将移动事件发送到 Cloud 控制台
您可以使用 vaictl 将输出视频数据流式传输到 Cloud 控制台。首先在 Cloud 控制台中启用 Vision AI API。
注册新流
- 点击 Vertex AI Vision 左侧面板中的“流”标签页。
- 点击“注册”
- 在“流名称”中输入
motion-detection-stream - 在“区域”中输入
us-central1 - 点击“注册”
将结果发送到流
此命令会将视频文件流式传输到流。如果您使用 –loop 标志,视频将循环播放到流中,直到您停止该命令为止。我们将以后台作业的形式运行此命令,以便它持续流式传输。
在开头添加 nohup,在末尾添加 &,使其成为后台作业。
vaictl -p $PROJECT \
-l $LOCATION_ID \
-c application-cluster-0 \
--service-endpoint visionai.googleapis.com \
send video-file --file-path $INPUT_VIDEO \
applying motion-filter
--motion-sensitivity=$MOTION_SENSITIVITY \
--min-event-length=$MIN_EVENT_LENGTH \
--lookback-length=$LOOK_BACK_WINDOW \
--cooldown-length=$COOL_DOWN_PERIOD \
--zone_annotation=ZONE_ANNOTATION \
--exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
to streams motion-detection-stream --loop
从启动 vaictl 提取操作到视频显示在信息中心内,可能需要大约 100 秒。
流提取可用后,您可以在 Vertex AI Vision 信息中心的流 标签页中选择 traffic-stream 流,以查看视频 feed。
将结果发送到本地存储空间
此命令会将视频文件流式传输到流。如果您使用 –loop 标志,视频将循环播放到流中,直到您停止该命令为止。我们将以后台作业的形式运行此命令,以便它持续流式传输。
在开头添加 nohup,在末尾添加 &,使其成为后台作业。
OUTPUT_PATH=<path_to_store_motion_events>
vaictl -p $PROJECT \
-l $LOCATION_ID \
-c application-cluster-0 \
--service-endpoint visionai.googleapis.com \
send video-file --file-path $INPUT_VIDEO \
applying motion-filter
--motion-sensitivity=$MOTION_SENSITIVITY \
--min-event-length=$MIN_EVENT_LENGTH \
--lookback-length=$LOOK_BACK_WINDOW \
--cooldown-length=$COOL_DOWN_PERIOD \
--zone_annotation=$ZONE_ANNOTATION \
--exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
to mp4file --mp4-file-path=$OUTPUT_PATH --loop
7. 恭喜
恭喜,您已完成此实验!
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请通过命令行使用 ctrl + z 结束 vaictl SDK 操作。
资源
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/motion-filtering-model
https://cloud.google.com/vision-ai/docs/create-manage-streams
反馈