1. 目标
概览
此 Codelab 将重点介绍如何创建一个端到端 Vertex AI Vision 应用,以演示如何使用动作过滤功能发送视频。在本教程中,我们将介绍运动滤镜配置中的不同参数:
- 移动侦测灵敏度
- 活动时长下限
- 回溯期
- 冷却时间
- 移动侦测区域
学习内容
- 如何提取视频以进行流式传输
- 动态滤镜提供的不同功能及其使用方法
- 在哪里查看动态滤镜的统计数据
- 如何根据视频调整此设置
2. 准备工作
- 在 Google Cloud 控制台的项目选择器页面上,选择或创建 Google Cloud 项目。注意:如果您不打算保留在此过程中创建的资源,请创建项目,而不是选择现有项目。完成上述步骤后,您可以删除所创建的项目,并移除与该项目关联的所有资源。前往项目选择器
- 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
- 启用 Compute Engine 和 Vision AI API。启用 API
创建服务账号:
- 在 Google Cloud 控制台中,转到创建服务账号页面。转到“创建服务账号”
- 选择您的项目。
- 在服务账号名称字段中,输入一个名称。Google Cloud 控制台会根据此名称填写服务账号 ID 字段。在服务账号说明字段中,输入说明。例如,快速入门的服务账号。
- 点击创建并继续。
- 如需提供项目访问权限,请向您的服务账号授予以下角色:Vision AI >Vision AI Editor、Compute Engine >Compute Instance Admin(Beta 版)、存储 >Storage Object Viewer †。在选择角色列表中,选择一个角色。要添加其他角色,请点击添加其他角色,然后添加其他角色。注意:角色字段会影响您的服务账号可以访问项目中的哪些资源。您可以撤消这些角色或稍后授予其他角色。在生产环境中,请勿授予 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 左侧面板中的流标签页。
- 点击“Register”(注册)
- 在数据流名称中输入
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 信息中心的数据流标签页中查看视频 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 - 从图像获取坐标
排除已添加注释的区域
使用 vaictl 命令中的 exclude_annotated_zone
标志来配置检测区域内或区域外的动作。
布尔值。默认值为 false。
排除已注释区域是用户的布尔输入,指示用户是否要在移动侦测中排除已注释区域。
- 如果设置为
true
,带注释的区域将用作负区域。系统将不会检测到已标注区间中的运动。
*仅在输入区域之外运行移动侦测。
- 如果设置为 false,该区域将作为正向区域,其中以移动侦测为焦点。
*仅在输入区域运行移动侦测。
6. 带有移动侦测区域的动态滤镜示例
在本示例中,我们将使用一个视频,其中有一棵树不断在前景中移动。在常规运动滤镜设置中,视频将仅生成一个运动事件与原始视频的时长相同,因为运动滤镜会将移动树记录为“在整个视频中不断移动”。然而,借助移动侦测区域,我们可以正确地遮挡树木的移动,并专注于汽车和行人的移动。
视频准备
示例视频 (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) 包含来自 www.changedetection.net 的树、汽车和行人。
视频来源:N.戈耶特Jodoin, F.Porikli, J.Konrad 和 P.Ishwar,changedetection.net:新的更改检测基准数据集,Proc。IEEE 变化检测研讨会 (CDW-2012),在 CVPR-2012,罗得岛州普罗维登斯,6 月 16 日至 21 日,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 左侧面板中的流标签页。
- 点击“Register”(注册)
- 在数据流名称中输入
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 信息中心的数据流标签页中查看视频 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
反馈