Abilitare l'output del live streaming

Dopo aver creato lo stream di importazione dati dati e aggiunto i nodi di elaborazione all'app, devi scegliere dove inviare i dati elaborati. Un'opzione è ricevere direttamente l'output dell'app di live streaming in modo da poter agire su queste analisi in tempo reale.

In generale, configuri l'app in modo che memorizzi l'output del modello in un Google Cloud data warehouse come Media Warehouse di Vision di Gemini Enterprise Agent Platform o BigQuery. Una volta memorizzati i dati in uno di questi warehouse, possono essere utilizzati per job di analisi offline basati sul grafico dell'applicazione. Tuttavia, puoi anche ricevere gli output del modello in live streaming. Puoi fare in modo che Vision di Gemini Enterprise Agent Platform inoltri gli output del modello a una risorsa stream e puoi utilizzare lo strumento da riga di comando (vaictl) o l'API Vision di Gemini Enterprise Agent Platform per utilizzarli in tempo reale.

Supponiamo di avere il seguente grafico dell'applicazione con i seguenti tre nodi:

  1. Il nodo dell'origine dati "Input Stream" (input-stream)
  2. Il nodo di elaborazione "Occupancy Count" (occupancy-count)
  3. Il nodo di destinazione dell'output dell'app "Media Warehouse" (warehouse)

L'output dell'app viene attualmente inviato dallo stream al processo di conteggio dell'occupazione e poi a Media Warehouse di Vision di Gemini Enterprise Agent Platform, dove viene memorizzato.

Configurazione dell'app API:

Configurazione dell'app di esempio nella console 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"
        }
    ]
  }
}

Abilitare l'output dello stream (Google Cloud console)

Puoi abilitare l'output dello stream nella Google Cloud console quando esegui il deployment del modello per la prima volta o quando annulli il deployment e poi lo esegui di nuovo.

Console

  1. Apri la scheda Applicazioni della dashboard di Vision di Gemini Enterprise Agent Platform.

    Vai alla scheda Applicazioni

  2. Accanto al nome dell'applicazione nell'elenco, seleziona Visualizza app.

  3. Nella pagina del builder del grafico dell'applicazione, fai clic sul pulsante Esegui il deployment.

  4. Nel menu delle opzioni Esegui il deployment dell'applicazione che si apre, seleziona Abilita flusso di dati di output.

    menu di deployment dell'app nella console

  5. Dal menu a discesa Modello/i corrispondente, seleziona i modelli per cui vuoi abilitare l'output dello streaming.

  6. Fai clic su Esegui il deployment.

Abilitare l'output dello stream (API)

Aggiornare il nodo dell'app

Puoi aggiornare la configurazione di un'app dalla riga di comando in modo che un nodo del modello invii l'output a uno stream specifico.

Dopo aver completato questo passaggio, puoi aggiornare l'istanza dell'app per specificare la risorsa stream che riceve i dati di output del nodo di analisi.

REST

Questo esempio utilizza il metodo projects.locations.applications.patch. Questa richiesta aggiorna la configurazione dell'app API dall'app di esempio precedente in modo che il nodo occupancy-count invii le annotazioni di output a uno stream di Vision di Gemini Enterprise Agent Platform. Questo comportamento è abilitato dal output_all_output_channels_to_stream campo.

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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

Salva il corpo della richiesta in un file denominato request.json, e quindi esegui il comando seguente:

$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
Se l'operazione di aggiornamento viene completata, l'operazione restituisce uno stato 200 OK senza errori e il servizio aggiorna di conseguenza la risorsa dell'applicazione.

Aggiornare l'istanza dell'app

L'esempio precedente mostra come aggiornare l'app, il che consente al nodo di destinazione di inviare l'output a uno stream. Dopo aver abilitato questa opzione, puoi facoltativamente aggiornare l'istanza dell'app per specificare la risorsa stream che riceve i dati di output del nodo di analisi.

Se non specifichi uno stream con questo comando, la piattaforma dell'app continua a utilizzare uno stream predefinito creato quando viene eseguito il deployment del nodo dell'app.

Prima di inviare la richiesta seguente, devi creare una risorsa stream a cui il nodo invia l'output

devi creare una risorsa stream a cui il nodo invia l'output.

REST

Questo esempio utilizza il projects.locations.applications.updateApplicationInstances metodo. Questa richiesta utilizza la configurazione dell'app API aggiornata dall'app di esempio precedente. Il comando di aggiornamento precedente ha impostato il nodo occupancy-count in modo che possa inviare le annotazioni di output a uno stream di Vision di Gemini Enterprise Agent Platform. Questo comando aggiorna l'istanza dell'app in modo che invii i dati dal nodo del produttore occupancy-count a una risorsa stream esistente.

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT: il tuo Google Cloud ID progetto o numero di progetto.
  • LOCATION_ID: la regione in cui utilizzi Vision di Agent Platform. Ad esempio: us-central1, europe-west4. Vedi regioni disponibili.
  • APPLICATION_ID: l'ID dell'applicazione di destinazione.
  • inputResources: la risorsa o le risorse di input per l'istanza dell'applicazione corrente. Si tratta di un array di oggetti che contengono i seguenti campi:
    • consumerNode: il nome del nodo del grafico che riceve la risorsa di input.
    • inputResource: il nome completo della risorsa di input.
  • outputResources.outputResource: la risorsa stream a cui inviare i dati dell'app.
  • outputResources.producerNode: il nome del nodo del produttore dell'output dell'app. In questo esempio si tratta del nodo di analisi, occupancy-count.
  • INSTANCE_ID: l'ID dell'istanza dell'app.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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

Salva il corpo della richiesta in un file denominato request.json, e quindi esegui il comando seguente:

$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
Se l'operazione di aggiornamento viene completata, l'operazione restituisce uno stato 200 OK senza errori e il servizio aggiorna di conseguenza l'istanza dell'applicazione.