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. Una vez que los datos se almacenan en uno de estos almacenes, se pueden usar para trabajos de análisis sin conexión basados en el gráfico de tu aplicación. Sin embargo, también puedes recibir los resultados del modelo en forma de 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 con los siguientes tres nodos:

  1. El nodo de fuente de datos "Input Stream" (input-stream)
  2. El nodo de procesamiento “Recuento de ocupación” (occupancy-count)
  3. El nodo de destino de salida de la app "Almacén de medios" (warehouse)

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

Configuración de la app de la API:

Configuración de la app de ejemplo 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 deGoogle Cloud )

Puedes habilitar la transmisión de resultados en la Google Cloud consola cuando implementes tu modelo por primera vez o cuando anules la implementación y, luego, vuelvas a implementar el modelo.

Console

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

    Ir 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 la aplicación, 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 Modelos correspondiente, selecciona los modelos para los que deseas habilitar la salida de transmisión.

  6. Haz clic en Implementar.

Habilita la transmisión de salida (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 del modelo envíe específicamente la salida 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 transmisión 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 una transmisión de Vertex AI Vision. Este comportamiento se habilita con el campo output_all_output_channels_to_stream.

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 finaliza la operación de actualización, esta devuelve 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 transmisión 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 la salida.

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 del ejemplo anterior. El comando de actualización anterior estableció el nodo occupancy-count para que pueda enviar anotaciones de salida a una transmisión de Vertex AI Vision. Este comando actualiza la instancia de la app para enviar los datos de ese nodo occupancy-count del productor a un recurso de transmisión existente.

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

  • PROJECT: Tu Google Cloud ID del proyecto 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 tu aplicación de destino.
  • inputResources: Es el recurso (o los recursos) de entrada para la instancia de 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 en el que se generarán los datos de la app.
  • outputResources.producerNode: Es el nombre del nodo 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 finaliza la operación de actualización, esta devuelve un estado 200 OK sin ningún error, y el servicio actualiza la instancia de la aplicación según corresponda.