Attivare 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 in base a questi dati di 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 Vertex AI Vision o BigQuery. Una volta archiviati in uno di questi warehouse, i dati possono essere utilizzati per job di analisi offline in base al grafico dell'applicazione. Tuttavia, puoi anche ricevere gli output del modello in modalità live streaming. Puoi fare in modo che Vertex AI Vision inoltri gli output del modello a una risorsa di flusso e puoi utilizzare lo strumento a riga di comando (vaictl) o l'API Vertex AI Vision per utilizzarli in tempo reale.

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

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

L'output dell'app viene attualmente inviato dal flusso al processo di conteggio dell'occupazione e poi a Media Warehouse di Vertex AI Vision, dove viene archiviato.

Configurazione dell'app API:

Configurazione dell'app di esempio in Cloud Console
{
  "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 del flusso (consoleGoogle Cloud )

Puoi attivare l'output del flusso nella console Google Cloud 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 Vertex AI Vision.

    Vai alla scheda Applicazioni

  2. Seleziona Visualizza grafico accanto al nome dell'applicazione nell'elenco.

  3. Nella pagina del generatore di grafici delle applicazioni, fai clic sul pulsante Esegui il deployment.

  4. Nel menu delle opzioni Deploy dell'applicazione che viene visualizzato, seleziona Attiva lo streaming dell'output.

    menu di deployment dell'app nella console

  5. Nel menu a discesa Modelli corrispondente, seleziona i modelli per cui vuoi attivare l'output di streaming.

  6. Fai clic su Esegui il deployment.

Abilitare l'output di stream (API)

Aggiorna il nodo dell'app

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

Dopo aver completato questo passaggio, hai la possibilità di 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 annotazioni di output a uno stream Vertex AI Vision. Questo comportamento è attivato dal campo output_all_output_channels_to_stream.

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

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, 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 la risorsa dell'applicazione di conseguenza.

Aggiorna 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 attivato questa opzione, puoi aggiornare facoltativamente 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 app continua a utilizzare uno stream predefinito creato al momento del deployment del nodo dell'app.

Devi creare una risorsa di flusso a cui il nodo invia l'output

prima di inviare la richiesta successiva.

REST

Questo esempio utilizza il metodo projects.locations.applications.updateApplicationInstances. Questa richiesta utilizza la configurazione dell'app API aggiornata dell'app di esempio precedente. Il set di comandi di aggiornamento precedente ha impostato il nodo occupancy-count in modo che possa inviare annotazioni di output a un flusso Vertex AI Vision. Questo comando aggiorna l'istanza dell'app per inviare i dati dal nodo occupancy-count del produttore a una risorsa stream esistente.

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

  • PROJECT: il tuo Google Cloud ID progetto o numero di progetto.
  • LOCATION_ID: la regione in cui utilizzi Vertex AI Vision. Ad esempio: us-central1, europe-west4. Vedi le regioni disponibili.
  • APPLICATION_ID: l'ID dell'applicazione di destinazione.
  • inputResources: La risorsa o le risorse di input per l'istanza dell'applicazione attuale. 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 in cui generare l'output dei dati dell'app.
  • outputResources.producerNode: Il nome del nodo produttore dell'output dell'app. In questo esempio questo è il 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, 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, restituisce lo stato 200 OK senza errori e il servizio aggiorna l'istanza dell'applicazione di conseguenza.