Livestreamausgabe aktivieren

Nachdem Sie den Datenaufnahmestream erstellt und Ihrer App Verarbeitungsknoten hinzugefügt haben, müssen Sie auswählen, wohin die verarbeiteten Daten gesendet werden sollen. Eine Möglichkeit besteht darin, die Ausgabe der Livestream-App direkt zu empfangen, damit Sie auf diese Echtzeitanalysen reagieren können.

Im Allgemeinen konfigurieren Sie Ihre App so, dass die Modellausgabe in einemGoogle Cloud Data Warehouse wie dem Media Warehouse von Vertex AI Vision oder BigQuery gespeichert wird. Nachdem die Daten in einem dieser Data Warehouses gespeichert wurden, können sie für Offline-Analysejobs auf Grundlage Ihres Anwendungsdiagramms verwendet werden. Sie können die Modellausgaben aber auch per Livestreaming empfangen. Sie können die Modellausgaben von Vertex AI Vision an eine Streamressource weiterleiten lassen und sie in Echtzeit über das Befehlszeilentool (vaictl) oder die Vertex AI Vision API abrufen.

Angenommen, Sie haben den folgenden Anwendungsdiagramm mit den folgenden drei Knoten:

  1. Der Datenquellenknoten „Eingabestream“ (input-stream)
  2. Der Verarbeitungsknoten „Occupancy Count“ (occupancy-count)
  3. Der Zielknoten für die App-Ausgabe „Media Warehouse“ (warehouse)

Die App-Ausgabe wird derzeit vom Stream an den Prozess zur Zählung der Belegung gesendet und dann an das Media Warehouse von Vertex AI Vision, wo sie gespeichert wird.

API-App-Konfiguration:

Konfiguration der Beispielanwendung in der 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"
        }
    ]
  }
}

Streamausgabe aktivieren (Google Cloud console)

Sie können die Streamausgabe in der Google Cloud Console aktivieren, wenn Sie Ihr Modell zum ersten Mal bereitstellen oder wenn Sie die Bereitstellung des Modells aufheben und es dann noch einmal bereitstellen.

Console

  1. Öffnen Sie den Tab Anwendungen des Vertex AI Vision-Dashboards.

    Zum Tab „Anwendungen“

  2. Wählen Sie in der Liste neben dem Namen Ihrer Anwendung Diagramm ansehen aus.

  3. Klicken Sie auf der Seite „Application Graph Builder“ (Tool zur Erstellung von Anwendungsdiagrammen) auf die Schaltfläche Deploy (Bereitstellen).

  4. Wählen Sie im Optionsmenü Anwendung bereitstellen, das sich öffnet, die Option Ausgabestreaming aktivieren aus.

    App-Menü in der Console bereitstellen

  5. Wählen Sie im entsprechenden Drop-down-Menü Modelle die Modelle aus, für die Sie die Streamingausgabe aktivieren möchten.

  6. Klicken Sie auf Bereitstellen.

Streamausgabe aktivieren (API)

App-Knoten aktualisieren

Sie können die Konfiguration einer App in der Befehlszeile aktualisieren, damit ein Modellknoten die Ausgabe speziell an einen Stream sendet.

Danach können Sie die App-Instanz aktualisieren, um die Streamressource anzugeben, in der die Ausgabedaten des Analyseknotens empfangen werden.

REST

In diesem Beispiel wird die Methode projects.locations.applications.patch verwendet. Mit dieser Anfrage wird die API-App-Konfiguration der vorherigen Beispiel-App so aktualisiert, dass der occupancy-count-Knoten Ausgabekommentare an einen Vertex AI Vision-Stream sendet. Dieses Verhalten wird durch das Feld output_all_output_channels_to_stream aktiviert.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

HTTP-Methode und URL:

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

JSON-Text der Anfrage:

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

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

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

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$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
Wenn der Aktualisierungsvorgang abgeschlossen ist, gibt der Vorgang den Status 200 OK ohne Fehler zurück und der Dienst aktualisiert die Anwendungsressource entsprechend.

App-Instanz aktualisieren

Im vorherigen Beispiel wird gezeigt, wie Sie die App aktualisieren, damit der Zielknoten Ausgaben an einen Stream senden kann. Nachdem Sie diese Option aktiviert haben, können Sie die App-Instanz optional aktualisieren, um die Stream-Ressource anzugeben, die die Ausgabedaten des Analyseknotens empfängt.

Wenn Sie mit diesem Befehl keinen Stream angeben, verwendet die App-Plattform weiterhin einen Standardstream, der beim Bereitstellen des App-Knotens erstellt wird.

Sie müssen eine Stream-Ressource erstellen, an die der Knoten die Ausgabe sendet.

bevor Sie die folgende Anfrage senden.

REST

In diesem Beispiel wird die Methode projects.locations.applications.updateApplicationInstances verwendet. Für diese Anfrage wird die aktualisierte API-App-Konfiguration aus der vorherigen Beispiel-App verwendet. Mit dem vorherigen Aktualisierungsbefehl wurde der Knoten occupancy-count so festgelegt, dass er Ausgabekommentare an einen Vertex AI Vision-Stream senden kann. Mit diesem Befehl wird die App-Instanz aktualisiert, sodass die Daten von diesem occupancy-count-Knoten an eine vorhandene Streamressource gesendet werden.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT: Ihre Google Cloud-Projekt-ID oder Projektnummer.
  • LOCATION_ID: Die Region, in der Sie Vertex AI Vision verwenden. Beispiele: us-central1, europe-west4. Verfügbare Regionen
  • APPLICATION_ID: Die ID Ihrer Zielanwendung.
  • inputResources: Die Eingaberessource (n) für die aktuelle Anwendungsinstanz. Dies ist ein Array von Objekten mit den folgenden Feldern:
    • consumerNode: Der Name des Diagrammknotens, der die Eingaberessource empfängt.
    • inputResource: Der vollständige Name der Eingaberessource.
  • outputResources.outputResource: Die stream-Ressource, in die App-Daten ausgegeben werden sollen.
  • outputResources.producerNode: Der Name des Ausgabeknotens der App. In diesem Beispiel ist das der Analysenknoten occupancy-count.
  • INSTANCE_ID: Die ID der App-Instanz.

HTTP-Methode und URL:

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

JSON-Text der Anfrage:

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

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

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

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$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
Wenn der Aktualisierungsvorgang abgeschlossen ist, gibt der Vorgang den Status 200 OK ohne Fehler zurück und der Dienst aktualisiert die Anwendungsinstanz entsprechend.