Habilita la salida de la transmisión en vivo

Después de crear el flujo de transferencia de datos y agregar los nodos de procesamiento a tu app, debes elegir dónde enviar los datos procesados. Una opción es recibir directamente el resultado de la app de transmisión en vivo para que puedas actuar en función de estas estadísticas en tiempo real.

En general, configuras tu app para que almacene el resultado del modelo en un almacén de datosGoogle Cloud , como el almacén de medios de Vertex AI Vision o BigQuery. Después de que los datos se almacenan en uno de estos almacenes, se pueden usar para trabajos de análisis sin conexión según el gráfico de tu aplicación. Sin embargo, también puedes recibir los resultados del modelo en una transmisión en vivo. Puedes hacer que Vertex AI Vision reenvíe los resultados del modelo a un recurso de transmisión, y puedes usar la herramienta de línea de comandos (vaictl) o la API de Vertex AI Vision para consumirlos en tiempo real.

Supongamos que tienes el siguiente gráfico de aplicación que tiene los siguientes tres nudos:

  1. El nodo de fuente de datos "Flujo de entrada" (input-stream)
  2. El nodo de procesamiento "Recuento de ocupación" (occupancy-count)
  3. El nodo de destino de salida de la app "Media Warehouse" (warehouse)

Actualmente, el resultado de la app se envía desde la transmisión al proceso de recuento de ocupación y, luego, al almacén de contenido multimedia de Vertex AI Vision, donde se almacena.

Configuración de la app de la API:

Configuración de ejemplo de la app en la consola de 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"
        }
    ]
  }
}

Habilita la transmisión de resultados (consola de Google Cloud)

Puedes habilitar la salida de transmisión en la consola de Google Cloud cuando despliegas tu modelo por primera vez o cuando lo inhabilitas y, luego, lo vuelves a implementar.

Console

  1. Abre la pestaña Aplicaciones del panel de Vertex AI Vision.

    Ve a la pestaña Aplicaciones.

  2. Selecciona Ver gráfico junto al nombre de tu aplicación en la lista.

  3. En la página del compilador de gráficos de aplicaciones, haz clic en el botón Implementar.

  4. En el menú de opciones Deploy application que se abre, selecciona Enable output streaming.

    Menú de implementación de la app en la consola

  5. En el menú desplegable correspondiente Modelos, selecciona los modelos para los que deseas habilitar la salida de transmisión.

  6. Haz clic en Implementar.

Habilita la salida de transmisión (API)

Actualiza el nodo de la app

Puedes actualizar la configuración de una app en la línea de comandos para que un nodo de modelo envíe resultados de forma específica a una transmisión.

Después de completar este paso, tienes la opción de actualizar la instancia de la app para especificar el recurso de flujo que recibe los datos de salida del nodo de análisis.

REST

En este ejemplo, se usa el método projects.locations.applications.patch. Esta solicitud actualiza la configuración de la app de la API de la app de ejemplo anterior para que el nodo occupancy-count envíe anotaciones de salida a un flujo de Vision de Vertex AI. El campo output_all_output_channels_to_stream habilita este comportamiento.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "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
        }
    ]
  }
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

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

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$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
Si la operación de actualización finaliza, esta muestra un estado 200 OK sin ningún error y el servicio actualiza el recurso de la aplicación según corresponda.

Actualiza la instancia de la app

En el ejemplo anterior, se muestra cómo actualizar la app, lo que permite que el nodo de destino envíe resultados a una transmisión. Después de habilitar esta opción, puedes actualizar de forma opcional la instancia de la app para especificar el recurso de flujo que recibe los datos de salida del nodo de análisis.

Si no especificas una transmisión con este comando, la plataforma de la app seguirá usando una transmisión predeterminada que se crea cuando se implementa el nodo de la app.

Debes crear un recurso de transmisión al que el nodo envíe el resultado.

antes de enviar la siguiente solicitud.

REST

En este ejemplo, se usa el método projects.locations.applications.updateApplicationInstances. Esta solicitud usa la configuración actualizada de la app de la API de la app de ejemplo anterior. El comando de actualización anterior configuró el nodo occupancy-count para que pueda enviar anotaciones de salida a un flujo de Vision de Vertex AI. Este comando actualiza la instancia de la app para enviar los datos de ese nodo occupancy-count del productor a un recurso de flujo existente.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT: Tu Google Cloud ID o número de proyecto.
  • LOCATION_ID: La región en la que usas Vertex AI Vision. Por ejemplo: us-central1, europe-west4. Consulta las regiones disponibles.
  • APPLICATION_ID: Es el ID de la aplicación de destino.
  • inputResources: Es el recurso (o los recursos) de entrada de la instancia de la aplicación actual. Es un array de objetos que contiene los siguientes campos:
    • consumerNode: Es el nombre del nodo del gráfico que recibe el recurso de entrada.
    • inputResource: Es el nombre completo del recurso de entrada.
  • outputResources.outputResource: Es el recurso stream al que se deben enviar los datos de la app.
  • outputResources.producerNode: Es el nombre del nodo del productor de salida de la app. En este ejemplo, este es el nodo de análisis, occupancy-count.
  • INSTANCE_ID: Es el ID de la instancia de la app.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "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
    }
  ]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

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

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$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
Si la operación de actualización finaliza, esta muestra un estado 200 OK sin errores, y el servicio actualiza la instancia de la aplicación según corresponda.