本页面介绍了如何创建应用并组合各种组件(例如输入流、用于分析的模型和用于存储的仓库),以便在 Vertex AI Vision 的应用平台上使用。
若要构建应用,您必须考虑数据源、要执行的分析以及要如何存储结果。端到端应用可以有不同的形式,具体取决于您的使用场景。因此,应用构建方式将取决于您的目标。
在开始之前,请从负责任的 AI 角度评估您的使用场景和目标,并考虑当出现问题时,您的模型和应用可能会对最终用户产生哪些影响。详细了解在评估用例以兼顾公平性时,首先要执行哪些步骤。另请确保您对 Vertex AI Vision 的使用符合 Google Cloud的《服务条款》或离线变体,以及纳入的网址条款(例如 Google Cloud的《使用限制政策》)。
在创建应用时,请注意 AI 视觉技术可能会加剧或引入不公平的偏见,并影响基本人权。在开发应用时,您应根据公司的价值观进行道德反思,并针对您的特定应用场景(包括高风险应用场景)进行法律尽职调查。与所有技术一样,您必须考虑您在实施 AI/ML 技术的区域适用的所有法律法规。客户有责任尽职尽责,以实现在特定区域被视为高风险的用例。
创建新应用
您必须先创建应用,然后才能向该应用添加信息流或模型等组件。所有应用都必须包含以下内容才能进行部署:
- 流输入节点(数据源)。
- 至少一个其他组件节点,例如模型或仓库。
创建新的自定义应用
控制台
在 Google Cloud 控制台中创建应用。
使用模板创建应用
控制台
在 Google Cloud 控制台中创建应用。
添加数据流输入
应用必须包含视频流节点。如果您不添加 Streams 节点,则无法部署应用。
如果您的应用未部署,系统会自动将您的流输入更新应用到该应用。如果您的应用已部署,您必须先取消部署,然后更新应用才能应用更改。如需了解详情,请参阅更新应用部分。
控制台
在 Google Cloud 控制台中向应用添加信息流。
打开 Vertex AI Vision 信息中心的应用标签页。
点击相应应用的查看应用。
从组件的侧边列表中,选择连接器列表中的视频流。系统会将流节点添加到应用图表中,并打开侧边“视频流”菜单。
选择添加视频流。
如果您选择
从现有视频流中选择,请选择现有视频流,然后选择添加视频流。如果您选择
注册新的视频流,请为新视频流添加名称,然后选择添加视频流。
REST
如需向应用添加数据流,请使用 projects.locations.applications.addStreamInput 方法发送 POST 请求。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:您的 Google Cloud 项目 ID 或项目编号。
- LOCATION_ID:您使用 Vertex AI Vision 的区域。例如:
us-central1
、europe-west4
。请参阅可用区域。 - APPLICATION_ID:目标应用的 ID。
- STREAM_ID:目标视频流的 ID。
HTTP 方法和网址:
POST https://visionai.googleapis.com/v1/projects/PROJECT/locations/LOCATION_ID/applications/APPLICATION_ID:addStreamInput
请求 JSON 正文:
{ "applicationStreamInputs": [ { "streamWithAnnotation": { "stream": "projects/PROJECT/locations/LOCATION_ID/clusters/application-cluster-0/streams/STREAM_ID" } }, { "streamWithAnnotation": { "stream": "projects/PROJECT/locations/LOCATION_ID/clusters/application-cluster-0/streams/STREAM_ID" } } ] }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://visionai.googleapis.com/v1/projects/PROJECT/locations/LOCATION_ID/applications/APPLICATION_ID:addStreamInput"
PowerShell
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://visionai.googleapis.com/v1/projects/PROJECT/locations/LOCATION_ID/applications/APPLICATION_ID:addStreamInput" | Select-Object -Expand Content
您应该会收到一个成功的状态代码 (2xx) 和一个空响应。
添加带有节点注释的流输入
创建应用输入流时,您可以使用 Vertex AI Vision API 向该流添加注释。您还可以在Google Cloud 控制台中向节点添加注释。
控制台
以下示例向入住人数模型添加了可用的注释(STREAM_ANNOTATION_TYPE_ACTIVE_ZONE
和 STREAM_ANNOTATION_TYPE_CROSSING_LINE
)。
打开 Vertex AI Vision 信息中心的应用标签页。
从列表中选择应用名称旁边的查看应用。
在应用构建器页面上,选择要添加注释的具有流输入的模型。
在侧边的模型设置面板中,展开“高级设置”部分。展开该部分后,点击创建活跃区域/线条按钮。
在视频流库视图中,选择一个输入视频流以绘制活跃区域或线条。
在编辑器视图中,选择添加多点线或添加简单多边形以添加注释。使用侧边栏重命名可用区或线路名称、删除现有可用区/线路,或切换线路方向。
REST 和命令行
以下代码添加了流注释。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:您的 Google Cloud 项目 ID 或项目编号。
- LOCATION_ID:您使用 Vertex AI Vision 的区域。例如:
us-central1
、europe-west4
。请参阅可用区域。 - APPLICATION_ID:目标应用的 ID。
- STREAM_ID:目标视频流的 ID。
- NODE_NAME:应用图中的目标节点的名称。例如:
builtin-occupancy-count
。 - ANNOTATION_ID:目标注解的 ID。
- ANNOTATION_DISPLAYNAME:用户指定的目标注解的显示名称。
- ANNOTATION_TYPE:可用的枚举值之一。此类型必须与
annotation_payload
对象相匹配,即activeZone
或crossingLine
。可用的值包括:STREAM_ANNOTATION_TYPE_UNSPECIFIED
STREAM_ANNOTATION_TYPE_ACTIVE_ZONE
STREAM_ANNOTATION_TYPE_CROSSING_LINE
normalizedVertices
:每个顶点由 x、y 坐标值指定。 坐标是相对于原始图片的标准化浮点值 [0,1];0.0 表示 X_MIN 或 Y_MIN,1.0 表示 X_MAX 或 Y_MAX。
HTTP 方法和网址:
POST https://visionai.googleapis.com/v1/projects/PROJECT/locations/LOCATION_ID/applications/APPLICATION_ID:addStreamInput
请求 JSON 正文:
{ "applicationStreamInputs": [ { "streamWithAnnotation": { "stream": "projects/PROJECT/locations/LOCATION_ID/clusters/application-cluster-0/streams/STREAM_ID", "nodeAnnotations": [ { "node": "NODE_NAME", "annotations": [ { "id": "ANNOTATION_ID", "displayName": "ANNOTATION_DISPLAYNAME", "sourceStream": "projects/PROJECT/locations/LOCATION_ID/clusters/application-cluster-0/streams/STREAM_ID", "type": ANNOTATION_TYPE, "activeZone": { "normalizedVertices": { "x": 0.07434944, "y": 0.18061674 }, "normalizedVertices": { "x": 0.64684016, "y": 0.16079295 }, "normalizedVertices": { "x": 0.6047088, "y": 0.92070484 }, "normalizedVertices": { "x": 0.1251549, "y": 0.76651984 } } } ] } ] } } ] }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://visionai.googleapis.com/v1/projects/PROJECT/locations/LOCATION_ID/applications/APPLICATION_ID:addStreamInput"
PowerShell
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://visionai.googleapis.com/v1/projects/PROJECT/locations/LOCATION_ID/applications/APPLICATION_ID:addStreamInput" | Select-Object -Expand Content
您应该会收到一个成功的状态代码 (2xx) 和一个空响应。
移除视频流输入
REST
如需从应用中移除数据流,请使用 projects.locations.applications.removeStreamInput 方法发送 POST 请求。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT:您的 Google Cloud 项目 ID 或项目编号。
- LOCATION_ID:您使用 Vertex AI Vision 的区域。例如:
us-central1
、europe-west4
。请参阅可用区域。 - APPLICATION_ID:目标应用的 ID。
- STREAM_ID:目标视频流的 ID。
HTTP 方法和网址:
POST https://visionai.googleapis.com/v1/projects/PROJECT/locations/LOCATION_ID/applications/APPLICATION_ID:removeStreamInput
请求 JSON 正文:
{ "targetStreamInputs": [ { "stream": "projects/PROJECT/locations/LOCATION_ID/clusters/application-cluster-0/streams/STREAM_ID" }, { "stream": "projects/PROJECT/locations/LOCATION_ID/clusters/application-cluster-0/streams/STREAM_ID" } ] }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://visionai.googleapis.com/v1/projects/PROJECT/locations/LOCATION_ID/applications/APPLICATION_ID:removeStreamInput"
PowerShell
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://visionai.googleapis.com/v1/projects/PROJECT/locations/LOCATION_ID/applications/APPLICATION_ID:removeStreamInput" | Select-Object -Expand Content
您应该会收到一个成功的状态代码 (2xx) 和一个空响应。
添加预训练的 Vertex AI Vision 模型
创建应用后,您可以添加模型并将其连接到数据流、其他模型或媒体仓库。
模型分为两种类型:预训练模型和用户训练模型。同样,用户训练的模型也可以分为两种类型 - AutoML 或自定义训练:
- 预训练模型可实现特定目标,基于广义数据进行训练,并且可随时使用。
- 用户训练的 AutoML 模型或自定义训练的模型需要您识别并提供样本数据,然后训练更适合您独特使用情形的模型。您可以使用 Vertex AI 训练这些模型,该产品提供两种训练选项:AutoML 训练模型和自定义训练模型。如需了解详情,请参阅选择训练方法。
按照以下说明将预训练的 Vertex AI Vision 模型添加到应用图中。
控制台
打开 Vertex AI Vision 信息中心的应用标签页。
从列表中选择应用名称旁边的查看应用。
在应用构建器页面上,从 AI 模型列表中选择要添加的模型。每种型号都有各自的配置设置。
如需将此模型连接到输入源节点,请选择源节点,然后选择
添加输出。从可用节点列表中选择新创建的 AI 模型节点。
添加用户训练的 Vertex AI 模型
创建应用后,您可以添加模型并将其连接到数据流、其他模型或媒体仓库。
模型分为两种类型:预训练模型和用户训练模型。同样,用户训练的模型也可以分为两种类型 - AutoML 或自定义训练:
- 预训练模型可实现特定目标,基于广义数据进行训练,并且可随时使用。
- 用户训练的 AutoML 模型或自定义训练的模型需要您识别并提供样本数据,然后训练更适合您独特使用情形的模型。您可以使用 Vertex AI 训练这些模型,该产品提供两种训练选项:AutoML 训练模型和自定义训练模型。如需了解详情,请参阅选择训练方法。
添加 Vertex AI AutoML 对象检测流式传输模型
按照以下说明将您训练的 Vertex AI AutoML 对象检测流式传输模型添加到应用图表中。
在训练 Vertex AI AutoML 模型之前,您必须先准备对象检测数据并创建数据集。
训练模型以在 Vertex AI Vision 中使用
在 Vertex AI 中创建包含代表性数据集合的数据集后,您可以训练模型以在 Vertex AI Vision 中使用。
控制台
在 Google Cloud 控制台的 Vertex AI 信息中心内,前往数据集页面。
点击要用于训练模型的数据集的名称,以打开其详情页面。
如果您的数据类型使用注释集,请选择要用于此模型的注释集。
点击训练新模型。
在训练新模型页面中,为 AutoML 图片对象检测模型完成以下步骤:
在模型训练方法部分中,选择
AutoML。在选择模型使用位置部分中,选择
Vertex AI Vision。点击继续。
填写模型详情、训练选项以及计算和价格部分的值。如需了解详情,请参阅训练 AutoML 模型(Google Cloud 控制台)。
点击开始训练。
模型训练可能需要几个小时,具体取决于数据的大小和复杂性,以及训练预算(如果指定)。您可以关闭此标签页,稍后再返回。模型完成训练后,您会收到电子邮件。
将训练好的模型添加到应用中
模型完成训练后,您可以将其添加到 Vertex AI Vision 应用中。
控制台
打开 Vertex AI Vision 信息中心的应用标签页。
从列表中选择应用名称旁边的查看应用。
在应用构建器页面上,从侧边组件列表中选择 Add Vertex AI Model。选择此选项会打开一个侧边菜单。
在“添加 Vertex AI 模型”菜单中,保持
从 Vertex AI 导入已训练的模型选项处于选中状态,然后从现有 Vertex AI AutoML 模型列表中选择模型。选择要导入的模型后,选择添加模型。
点击添加模型按钮后,图表构建器页面的一侧会显示一个待处理模型。几秒钟后,模型即可使用。
添加 Vertex AI 自定义模型
您还可以将 Vertex AI 自定义训练模型导入 Vertex AI Vision,以用于数据分析。这些自定义训练的模型必须具有以下属性:
- 模型必须是无状态的,因为模型输入是来自不同应用实例(流)的图片,这些图片可能无序。如果您需要有状态的流式处理,可能需要在自己的容器中保留状态。
- 模型输入大小上限为 1.5MB。因此,Vertex AI Vision 必须将原始 RGB 图片压缩为有损格式,例如 JPG。
按照以下说明将您训练的现有 Vertex AI 自定义训练视频模型添加到应用图中。
如需了解如何使用自定义容器创建 Vertex AI 自定义训练模型,请参阅使用自定义容器进行预测。
指定实例 YAML 文件
添加 Vertex AI 自定义训练模型时,您必须指定存储在 Cloud Storage 中的实例 YAML 文件 (instances.yaml
)。此文件指定了模型容器的预期输入。
Vertex AI 会以以下格式发送预测请求:
{
"instances": [
<value>|<simple/nested list>|<object>,
...
]
}
在此示例中,instances.yaml
定义了载荷的架构。如需了解详情,请参阅通过自定义训练模型进行在线预测。
Vertex AI Vision 仅支持具有一个已命名预测输入的自定义训练模型。此输入类型必须是编码的 JPEG 字符串。必须使用实例架构 YAML 文件指定预测输入的架构。此架构 YAML 文件必须采用 OpenAPI 架构对象格式。
例如,以下架构将接收包含编码为名为 image_bytes
的字段的图片的请求:
properties:
image_bytes:
type: string
您的自定义模型会接收以下格式的预测输入:
{
"instances": [
{
"image_bytes" : {
"b64": "BASE64_ENCODED_IMAGE_BYTES"
}
}
]
}
在将模型导入 Vertex AI Vision 之前,请验证您的模型是否能正确处理此输入。
指定预测 YAML 文件
添加 Vertex AI 自定义训练模型时,您可以指定存储在 Cloud Storage 中的预测 YAML 文件 (predictions.yaml
)。此文件用于指定模型容器的输出。
此文件是可选的,但建议使用,以便告知 Vertex AI Vision 模型的输出结构。例如,以下 classification_1.0.0.yaml
文件描述了图片分类模型的模型输出信息:
title: Classification
type: object
description: >
The predicted AnnotationSpecs.
properties:
ids:
type: array
description: >
The resource IDs of the AnnotationSpecs that had been identified.
items:
type: integer
format: int64
enum: [0] # As values of this enum all AnnotationSpec IDs the Model
# was trained on will be populated.
displayNames:
type: array
description: >
The display names of the AnnotationSpecs that had been identified,
order matches the IDs.
items:
type: string
enum: [""] # As values of this enum all AnnotationSpec display_names
# the Model was trained on will be populated.
confidences:
type: array
description: >
The Model's confidences in correctness of the predicted IDs, higher
value means higher confidence. Order matches the Ids.
items:
type: number
format: float
minimum: 0.0
maximum: 1.0
添加自定义训练的模型
使用以下示例将 Vertex AI 自定义训练的模型添加到您的应用中。
控制台
打开 Vertex AI Vision 信息中心的应用标签页。
从列表中选择应用名称旁边的查看应用。
在应用构建器页面上,从侧边组件列表中选择 Add Vertex AI Model。选择此选项会打开一个侧边菜单。
在“添加 Vertex AI 模型”菜单中,保持
从 Vertex AI 导入已训练的模型选项处于选中状态,然后从现有 Vertex AI AutoML 模型列表中选择模型。为模型提供名称。
指定 Cloud Storage 中的实例 YAML 文件,该文件用于定义预测和说明请求中使用的单个实例的格式。
可选:指定 Cloud Storage 中的预测架构 YAML 文件,该文件用于定义单个预测或说明的格式。
提供模型名称、实例和预测信息后,选择添加模型。
点击添加模型按钮后,图表构建器页面的一侧会显示一个待处理模型。几秒钟后,模型即可使用。
可选。附加应用元数据
除了映像字节之外,您还可以设置 attach_application_metadata
,以请求 Vertex AI Vision 应用平台包含要发送到自定义容器的应用的元数据。
元数据具有以下架构:
'appPlatformMetadata': {
'application': STRING;
'instanceId': STRING;
'node': STRING;
'processor': STRING;
}
可选。添加动态配置 Pub/Sub 主题
如需动态控制 Vertex 自定义运算符向 Vertex 自定义容器发送视频帧的帧速率,您可以创建一个 Pub/Sub 主题。将其添加到节点设置的 Dynamic Configuration
部分。
如果已配置 Pub/Sub 主题,则初始帧速率为 0。在视频处理期间,您可以实时向 Pub/Sub 主题发送以下格式的 Pub/Sub 消息来更改帧速率:
{
"stream_id": "input-stream-id",
"fps": 5,
}
stream_id
字段应与应用输入源的 ID 一致。
服务账号和权限
自定义容器的默认服务凭据已配置为 Vertex AI Vision 应用平台的 Google 自有服务账号。如需从容器访问其他 Google Cloud服务,请向以下对象授予适当的权限:service-<var>PROJECT_NUMBER</var>@gcp-sa-visionai.iam.gserviceaccount.com
可选。使用 Cloud Run 函数和 Pub/Sub 对事件通知进行建模
在 Vertex AI Vision 中,模型会接收来自摄像头等设备的媒体数据,对这些数据运行 AI 预测,并持续生成注释。您通常会将处理后的数据发送到数据目的地(“数据接收器”),例如媒体仓库或 BigQuery,以进行进一步的分析作业。不过,在某些情况下,您可能需要以不同的方式处理某些注解,或者注解需求具有时效性。与 Cloud Run functions 和 Pub/Sub 集成有助于满足这些需求。
支持的模型
以下模型提供 Cloud Run functions 事件生成和 Pub/Sub 事件通知集成:
配置 Cloud Run functions 以处理模型输出
如需触发基于事件的通知,您必须先设置 Cloud Run 函数来处理模型输出并生成事件。
您的 Cloud Run 函数会连接到模型,并监听其输出作为后处理操作。Cloud Run 函数应返回 AppPlatformCloudFunctionResponse
。这些事件 (appplatformeventbody
) 会发送到您在下一步中配置的 Pub/Sub 主题。
如需查看 Cloud Run 函数示例,请参阅使用 Cloud Functions 和 Pub/Sub 启用模型事件通知。
按照以下说明将模型输出流发送到 Cloud Run 函数:
控制台
通过 Pub/Sub 启用模型事件通知
设置好 Cloud Run functions 以处理模型输出并生成事件后,您可以使用 Pub/Sub 设置事件通知。如需读取主题中的消息,您还需要选择并创建 Pub/Sub 订阅。
控制台
将模型输出与下游节点相关联
创建模型节点后,您可以将其输出连接到另一个节点。
控制台
打开 Vertex AI Vision 信息中心的应用标签页。
从列表中选择应用名称旁边的查看应用。
点击应用图表构建器中输出数据的模型节点(例如人员/车辆数量模型节点)。
在侧边设置面板中,点击添加输出按钮。
您可以添加新输出并选择要添加的新输出节点,也可以选择现有的可用节点来发送输出。
将输出连接到数据目的地
创建数据注入流并将处理节点添加到应用后,您必须选择将处理后的数据发送到何处。此数据目的地是应用图的终点,可接受流数据,但不生成任何流数据。您选择的目标位置取决于您如何使用应用输出数据。

您可以将应用输出数据连接到以下数据目的地:
Vision Warehouse:存储可供您查看和查询的原始或分析后的视频数据。
如需详细了解如何将应用输出数据发送到 Vision Warehouse,请参阅连接数据并将其存储到数据仓库。
BigQuery:将数据存储在 BigQuery 中,以便使用其离线分析功能。
如需详细了解如何将应用输出数据发送到 BigQuery,请参阅连接 BigQuery 并将数据存储到其中。
直播数据:如果您想更精细地控制实时分析,可以接收应用的实时输出。
如需详细了解如何直接流式传输应用输出数据,请参阅启用直播输出。
更新应用
未部署的应用
对应用进行任何修改(例如添加或移除组件节点);Vertex AI Vision 会自动存储这些更改。
后续步骤
- 如需了解如何部署应用以在 Deploy an application 中注入和分析数据,请参阅此页面。
- 如需了解如何开始从应用输入源中数据注入,请参阅创建和管理数据流。
- 如需了解如何在管理应用中列出应用并查看已部署应用的实例,请参阅相关文档。
- 如需了解如何从提取流或分析模型输出数据中读取应用输入数据,请参阅读取流数据。