启用直播输出

创建数据提取流并向应用添加处理节点后,您必须选择要将处理后的数据发送到哪里。一种方法是直接接收直播应用输出,以便根据这些实时分析采取行动。

通常,您会将应用配置为将模型输出存储到Google Cloud 数据仓库(例如 Vertex AI Vision 的媒体仓库或 BigQuery)中。数据存储在其中一个仓库中后,便可用于根据应用图表执行离线分析作业。不过,您也可以通过实时流式传输方式接收模型输出。您可以让 Vertex AI Vision 将模型输出转发到流式资源,然后使用命令行工具 (vaictl) 或 Vertex AI Vision API 实时使用这些输出。

假设您有以下应用图,其中包含以下三个节点:

  1. 数据源节点“输入流”(input-stream)
  2. 处理节点“占用情况计数”(occupancy-count)
  3. 应用输出目标节点“媒体仓库”(warehouse)

应用输出目前会从数据流发送到入住人数统计进程,然后发送到 Vertex AI Vision 的媒体仓库进行存储。

API 应用配置

Cloud 控制台中的示例应用配置
{
  "applicationConfigs": {
    "nodes": [
        {
          "displayName": "Input Stream",
          "name": "input-stream",
          "processor": "builtin:stream-input"
        },
        {
          "displayName": "Occupancy Count",
          "name": "occupancy-count",
          "nodeConfig": {
            "occupancyCountConfig": {
              "enablePeopleCounting": true,
              "enableVehicleCounting": true
            }
          },
          "parents": [
            {
              "parentNode": "input-stream"
            }
          ],
          "processor": "builtin:occupancy-count"
        },
        {
          "displayName": "Media Warehouse",
          "name": "warehouse",
          "nodeConfig": {
            "mediaWarehouseConfig": {
              "corpus": "projects/PROJECT_ID/locations/LOCATION_ID/corpora/CORPUS_ID",
              "ttl": "86400s"
            }
          },
          "parents": [
            {
              "parentNode": "input-stream"
            },
            {
              "parentNode": "occupancy-count"
            }
          ],
          "processor": "builtin:media-warehouse"
        }
    ]
  }
}

启用数据流输出(Google Cloud 控制台)

您可以在首次部署模型或解除部署并重新部署模型时,在 Google Cloud 控制台中启用数据流输出。

控制台

  1. 打开 Vertex AI Vision 信息中心的应用标签页。

    前往“应用”标签页

  2. 从列表中选择应用名称旁边的查看图表

  3. 在应用图表构建器页面中,点击部署按钮。

  4. 在随即打开的部署应用选项菜单中,选择 启用输出流式传输

    控制台中的“部署应用”菜单

  5. 从相应的模型下拉菜单中,选择要为其启用流式输出的模型。

  6. 点击部署

启用串流输出 (API)

更新应用节点

您可以在命令行上更新应用的配置,以便模型节点专门将输出发送到数据流。

完成此步骤后,您可以选择更新应用实例,以指定接收分析节点输出数据的流资源。

REST

此示例使用 projects.locations.applications.patch 方法。此请求会更新上一个示例应用中的 API 应用配置,以便 occupancy-count 节点将输出注释发送到 Vertex AI Vision 数据流。此行为由 output_all_output_channels_to_stream 字段启用。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT:您的 Google Cloud 项目 ID 或项目编号
  • LOCATION_ID:您在其中使用 Vertex AI Vision 的区域。例如:us-central1europe-west4。请参阅可用区域
  • APPLICATION_ID:目标应用的 ID。

HTTP 方法和网址:

PATCH https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID

请求 JSON 正文:

{
  "applicationConfigs": {
    "nodes": [
        {
          "displayName": "Input Stream",
          "name": "input-stream",
          "processor": "builtin:stream-input"
        },
        {
          "displayName": "Occupancy Count",
          "name": "occupancy-count",
          "nodeConfig": {
            "occupancyCountConfig": {
              "enablePeopleCounting": true,
              "enableVehicleCounting": true
            }
          },
          "parents": [
            {
              "parentNode": "input-stream"
            }
          ],
          "processor": "builtin:occupancy-count",
          "output_all_output_channels_to_stream": true
        }
    ]
  }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X PATCH \
-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_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID" | Select-Object -Expand Content
如果更新操作完成,该操作会返回 200 OK 状态且没有任何错误,并且服务会相应地更新应用资源。

更新应用实例

上一个示例展示了如何更新应用,以便目标节点将输出发送到流。启用此选项后,您可以选择更新应用实例,以指定接收分析节点输出数据的流资源。

如果您未使用此命令指定数据流,应用平台将继续使用在部署应用节点时创建的默认数据流。

您必须创建一个要将节点输出发送到的流式传输资源

发送以下请求之前。

REST

此示例使用 projects.locations.applications.updateApplicationInstances 方法。此请求使用上一个示例应用中的更新版 API 应用配置。上一个更新命令设置了 occupancy-count 节点,以便将输出注释发送到 Vertex AI Vision 数据流。此命令会更新应用实例,以将数据从该提供方 occupancy-count 节点发送到现有数据流资源。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT:您的 Google Cloud 项目 ID 或项目编号
  • LOCATION_ID:您在其中使用 Vertex AI Vision 的区域。例如:us-central1europe-west4。请参阅可用区域
  • APPLICATION_ID:目标应用的 ID。
  • inputResources:当前应用实例的输入资源(或资源)。这是一个包含以下字段的对象数组:
    • consumerNode:接收输入资源的图节点的名称。
    • inputResource:完整的输入资源名称。
  • outputResources.outputResource:要将应用数据输出的 stream 资源。
  • outputResources.producerNode:应用输出提供方节点名称。在此示例中,它是分析节点 occupancy-count
  • INSTANCE_ID:应用实例的 ID。

HTTP 方法和网址:

POST https://visionai.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID:updateApplicationInstances

请求 JSON 正文:

{
  "applicationInstances": [
    {
      "instance": {
        "inputResources": [
          {
            "consumerNode": "input-stream",
            "inputResource": "projects/PROJECT_NUMBER/locations/LOCATION_ID/clusters/application-cluster-0/streams/INPUT_STREAM_ID"
          }
        ],
        "outputResources":[
          {
            "outputResource": "projects/PROJECT_NUMBER/locations/LOCATION_ID/clusters/application-cluster-0/streams/OUTPUT_STREAM_ID",
            "producerNode": "occupancy-count"
          }
        ]
      },
      "instanceId": INSTANCE_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_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID:updateApplicationInstances"

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_NUMBER/locations/LOCATION_ID/applications/APPLICATION_ID:updateApplicationInstances" | Select-Object -Expand Content
如果更新操作完成,该操作会返回 200 OK 状态且没有任何错误,并且服务会相应地更新应用实例。