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 estos análisis en tiempo real.

En general, configuras tu app para almacenar el resultado del modelo en un Google Cloud almacén de datos como el Almacén de medios de Vision de Gemini Enterprise Agent Platform 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 Vision de Gemini Enterprise Agent Platform reenvíe los resultados del modelo a un recurso de flujo y puedes usar la herramienta de línea de comandos (vaictl) o la API de Vision de Gemini Enterprise Agent Platform para consumirlos en tiempo real.

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

  1. El nodo de fuente de datos "Input Stream" (input-stream)
  2. El nodo de procesamiento "Occupancy Count" (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 el flujo al proceso de recuento de ocupación y, luego, al Almacén de medios de Vision de Gemini Enterprise Agent Platform, 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 salida de transmisión (Google Cloud consola)

Puedes habilitar la salida de transmisión en la Google Cloud consola cuando implementas tu modelo por primera vez o cuando anulas la implementación y, luego, vuelves a implementar el modelo.

Console

  1. Abre la pestaña Aplicaciones del panel de Vision de Gemini Enterprise Agent Platform.

    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 aplicaciones, haz clic en el botón Implementar.

  4. En el menú de opciones Implementar aplicación que se abre, selecciona Habilitar transmisión de resultados.

    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 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 específicamente el resultado 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 Vision de Gemini Enterprise Agent Platform. Este comportamiento se habilita con el output_all_output_channels_to_stream campo.

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, la operación muestra un estado 200 OK sin ningún error y el servicio actualiza el recurso de la aplicación en consecuencia.

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 el resultado a una transmisión. Después de habilitar esta opción, puedes actualizar 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 continúa 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 projects.locations.applications.updateApplicationInstances método. 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 una transmisión de Vision de Gemini Enterprise Agent Platform. Este comando actualiza la instancia de la app para enviar los datos de ese nodo productor occupancy-count 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 Vision de Agent Platform. Por ejemplo: us-central1, europe-west4. Consulta las regiones disponibles.
  • APPLICATION_ID: El ID de tu aplicación de destino.
  • inputResources: El recurso (o los recursos) de entrada para la instancia de la aplicación actual. Es un array de objetos que contienen los siguientes campos:
    • consumerNode: El nombre del nodo del gráfico que recibe el recurso de entrada.
    • inputResource: El nombre completo del recurso de entrada.
  • outputResources.outputResource: El recurso stream al que se enviarán los datos de la app.
  • outputResources.producerNode: El nombre del nodo productor de salida de la app. En este ejemplo es el nodo de análisis, occupancy-count.
  • INSTANCE_ID: 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, la operación muestra un estado 200 OK sin ningún error y el servicio actualiza la instancia de la aplicación en consecuencia.