Vertex AI Vision Occupancy Analytics App mit Ereignisverwaltung

1. Zielsetzungen

Übersicht

In diesem Codelab geht es um das Erstellen einer durchgängigen Vertex AI Vision-Anwendung zum Senden von Ereignissen mit der Funktion „Ereignisverwaltung“. Wir verwenden das vortrainierte „Specialized“-Modell Occupancy Analytics. integrierte Funktionen zum Generieren von Ereignissen, die auf der Erfassung folgender Dinge basieren:

  • Die Anzahl der Fahrzeuge und Personen zählen, die auf einer bestimmten Linie eine Straße überqueren.
  • Zählen Sie die Anzahl der Fahrzeuge und Personen in einem festen Bereich der Straße.
  • Überlastungen in allen Teilen der Straße erkennen

Aufgaben in diesem Lab

  • Videos für das Streaming aufnehmen
  • Anwendung in Vertex AI Vision erstellen
  • Verfügbare Funktionen in Occupancy Analytics und ihre Verwendung
  • Anwendung bereitstellen
  • So suchen Sie im Media Warehouse von Vertex AI Vision nach Videos in Ihrem Speicher.
  • Anleitung zum Erstellen einer Cloud Functions-Funktion, die die Daten des Occupancy Analytics-Modells verarbeitet.
  • Pub/Sub-Thema erstellen und Abo.
  • Hier erfahren Sie, wie Sie die Ereignisverwaltung einrichten, um Ereignisse über ein Pub/Sub-Thema zu senden.

2. Vorbereitung

  1. Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines. Hinweis: Wenn Sie die Ressourcen, die Sie in diesem Verfahren erstellen, nicht behalten möchten, erstellen Sie ein Projekt, anstatt ein vorhandenes Projekt auszuwählen. Wenn Sie fertig sind, können Sie das Projekt löschen und dadurch alle damit verknüpften Ressourcen entfernen. Zur Projektauswahl
  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Hier erfahren Sie, wie Sie prüfen, ob die Abrechnung für ein Projekt aktiviert ist.
  3. Aktivieren Sie die Compute Engine API und die Vision AI API. APIs aktivieren

Dienstkonto erstellen:

  1. Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen. Zur Seite „Dienstkonto erstellen“
  2. Wählen Sie Ihr Projekt aus.
  3. Geben Sie im Feld Dienstkontoname einen Namen ein. In der Google Cloud Console wird das Feld Dienstkonto-ID auf Grundlage dieses Namens ausgefüllt. Geben Sie im Feld Beschreibung des Dienstkontos eine Beschreibung ein. Beispiel: Dienstkonto für Kurzanleitung.
  4. Klicken Sie auf Erstellen und fortfahren.
  5. Weisen Sie Ihrem Dienstkonto die folgenden Rollen zu, um Zugriff auf Ihr Projekt zu ermöglichen: Vision AI > Vision AI-Bearbeiter, Compute Engine > Compute-Instanzadministrator (Beta), Speicher > Storage Object Viewer † Wählen Sie aus der Liste Rolle auswählen eine Rolle aus. Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie jede weitere Rolle hinzu. Hinweis: Das Feld Rolle wirkt sich darauf aus, auf welche Ressourcen in Ihrem Projekt das Dienstkonto zugreifen kann. Sie können diese Rollen später widerrufen oder zusätzliche Rollen erteilen. In Produktionsumgebungen sollten Sie die Rollen „Inhaber“, „Bearbeiter“ oder „Betrachter“ nicht zuweisen. Weisen Sie stattdessen eine vordefinierte Rolle oder benutzerdefinierte Rolle zu, die Ihren Anforderungen entspricht.
  6. Klicken Sie auf Weiter.
  7. Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen. Schließen Sie das Browserfenster nicht. Sie verwenden es in der nächsten Aufgabe.

Erstellen Sie einen Dienstkontoschlüssel:

  1. Klicken Sie in der Google Cloud Console auf die E-Mail-Adresse für das Dienstkonto, das Sie erstellt haben.
  2. Klicken Sie auf Schlüssel.
  3. Klicken Sie auf Schlüssel hinzufügen und dann auf Neuen Schlüssel erstellen.
  4. Klicken Sie auf Erstellen. Daraufhin wird eine JSON-Schlüsseldatei auf Ihren Computer heruntergeladen.
  5. Klicken Sie auf Schließen.
  6. Installieren und initialisieren Sie die Google Cloud CLI.

† Rolle nur erforderlich, wenn Sie eine Beispielvideodatei aus einem Cloud Storage-Bucket kopieren.

3. Videodatei für Streaming aufnehmen

Sie können vaictl verwenden, um die Videodaten in Ihre Belegungsanalyse-App zu streamen.

Aktivieren Sie zuerst die Vision AI API in der Cloud Console

Neuen Stream registrieren

  1. Klicken Sie im linken Bereich von Vertex AI Vision auf den Tab „Streams“.
  2. Klicken Sie auf „Registrieren“.
  3. Geben Sie im Namen des Streams „traffic-stream“ ein.
  4. Geben Sie in der Region „us-central1“ ein.
  5. Auf „Registrieren“ klicken

Es dauert einige Minuten, bis der Stream registriert ist.

Beispielvideo vorbereiten

  1. Mit dem folgenden gsutil cp-Befehl können Sie ein Beispielvideo kopieren. Ersetzen Sie die folgende Variable:
  • SOURCE: Der Speicherort einer zu verwendenden Videodatei. Sie können Ihre eigene Videodateiquelle (z. B. gs://BUCKET_NAME/FILENAME.mp4) oder das Beispielvideo (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(Video mit Personen und Fahrzeugen, Quelle) verwenden.
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Daten in einen Stream aufnehmen

  1. Verwenden Sie den folgenden Befehl, um diese lokale Videodatei an den App-Eingabestream zu senden. Sie müssen die folgenden Variablen ersetzen:
  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • LOCATION_ID: Ihre Standort-ID. Beispiel: us-central1. Weitere Informationen finden Sie unter Cloud-Standorte.
  • LOCAL_FILE: Der Dateiname einer lokalen Videodatei. Beispiel: street_vehicles_people.mp4.
  • –loop-Flag: Optional. Führt Dateidaten in eine Schleife ein, um das Streaming zu simulieren.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4
  1. Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt. Mit dem Flag „-loop“ wird das Video so lange in den Stream aufgenommen, bis du den Befehl beendest. Wir führen diesen Befehl als Hintergrundjob aus, damit das Streaming fortgesetzt wird.
  • ( Fügen Sie am Anfang „nohup“ und am Ende „&“ hinzu, um den Job im Hintergrund zu erstellen.)
nohup vaictl -p $PROJECT_ID \
    -l $LOCATION_ID \
    -c application-cluster-0 \
    --service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &

Nach dem Start der vaictl-Datenaufnahme kann es etwa 100 Sekunden dauern, bis das Video im Dashboard angezeigt wird.

Sobald die Streamaufnahme verfügbar ist, können Sie den Videofeed im Vertex AI Vision-Dashboard auf dem Tab Streams ansehen. Wählen Sie dazu den Trafficstream-Stream aus.

Zum Tab „Streams“

Ansicht des gestreamten Live-Videos in der BenutzeroberflächeLiveansicht von Videos, die in den Stream der Google Cloud Console aufgenommen werden. Bildnachweis: Elizabeth Mavor auf Pixabay (Pixelation hinzugefügt).

4. Cloud Functions-Funktion erstellen

Wir benötigen eine Cloud Functions-Funktion, um die Daten des Modells zu verarbeiten Generieren von Ereignissen, die später über den Ereigniskanal gesendet werden.

Weitere Informationen zu Cloud Functions

Cloud Functions-Funktion erstellen, die das Modell überwacht

  1. Rufen Sie die Seite zum Erstellen der Cloud Functions-UI auf.
  2. Legen Sie den Funktionsnamen fest. Er wird später in den Einstellungen für die Ereignisverwaltung auf diese Cloud Functions-Funktion verweisen.
  3. Achten Sie darauf, dass die Region mit Ihrer Anwendung übereinstimmt.
  4. Passen Sie die Trigger-Einstellungen an und speichern Sie sie.
  5. Klicken Sie auf die Schaltfläche „Weiter“, um zum Beispiel für das Erstellen einer Cloud Functions-Funktion konnte nicht geladen werden
  6. Cloud Functions-Funktion bearbeiten Hier ein Beispiel mit der Node.js-Laufzeit.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
 // Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
 // For more about logging, please see https://cloud.google.com/functions/docs/monitoring

 // The processor output will be stored in req.body.
 const messageString = constructMessage(req.body);

 // Send your message to operator output with res HTTP response context.
 res.status(200).send(messageString);
};

function constructMessage(data) {
 /**
  * Typically, your processor output should contains appPlatformMetadata & it's designed output.
  * For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
  * to construct the return annotation as such. 
  */

 // access appPlatformMetat.
 const appPlatformMetadata = data.appPlatformMetadata;

 // access annotations.
 const annotations = data.annotations.map(annotation => {
  // This is a mock OccupancyCountingPredictionResult annotation.
  return {"annotation" : {"track_info": {"track_id": "12345"}}};
 });

 const events = [];
 for(const annotation of annotations) {
   events.push({
       "event_message": "Detection event",
       "payload" : {
         "description" : "object detected"
       },
       "event_id" : "track_id_12345"
     });
 }

  /**
   * Typically, your cloud function should return a string represent a JSON which has two fields:
   * "annotations" must follow the specification of the target model.
   * "events" should be of type "AppPlatformEventBody".
   */
 const messageJson = {
   "annotations": annotations,
   "events": events,
 };
 return JSON.stringify(messageJson);
}
  1. Klicken Sie auf „Bereitstellen“. Schaltfläche zum Bereitstellen der Funktion.

5. Pub/Sub-Thema erstellen und Abo

Wir müssen der Anwendung ein Pub/Sub-Thema zur Verfügung stellen, an das sie das Ereignis senden kann. Damit Sie die Ereignisse erhalten, muss ein Pub/Sub-Abo eine konfigurierte Optik abonnieren.

Weitere Informationen zum Pub/Sub-Thema finden Sie hier und zum Abo.

Pub/Sub-Thema erstellen

Zum Erstellen eines Pub/Sub-Themas können Sie die gcloud CLI verwenden: (Ersetzen Sie SUBSCRIPTION_ID durch den echten Wert aus der Einrichtung.)

gcloud pubsub topics create TOPIC_ID

Alternativ können Sie die Pub/Sub-UI verwenden.

Pub/Sub-Abo erstellen

Zum Erstellen eines Pub/Sub-Abos können Sie die gcloud CLI verwenden: (Ersetzen Sie SUBSCRIPTION_ID und TOPIC_ID durch den echten Wert aus Ihrer Einrichtung.)

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

Alternativ können Sie die Pub/Sub-UI verwenden.

6. Anwendung erstellen

Der erste Schritt besteht darin, eine App zu erstellen, die Ihre Daten verarbeitet. Stellen Sie sich eine Anwendung als automatisierte Pipeline vor, die Folgendes verbindet:

  • Datenaufnahme: Ein Videofeed wird in einen Stream aufgenommen.
  • Datenanalyse: Ein KI-Modell(Computer Vision) kann nach der Aufnahme hinzugefügt werden.
  • Datenspeicher: Die beiden Versionen des Videofeeds (der Originalstream und der vom KI-Modell verarbeitete Stream) können in einem Media Warehouse gespeichert werden.

In der Google Cloud Console wird eine Anwendung als Grafik dargestellt.

Leere App erstellen

Bevor Sie das App-Diagramm füllen können, müssen Sie zuerst eine leere App erstellen.

Anwendung in der Google Cloud Console erstellen

  1. Rufen Sie die Google Cloud Console auf.
  2. Öffnen Sie den Tab Anwendungen des Vertex AI Vision-Dashboards.

Gehen Sie zum Tab „Anwendungen“.

  1. Klicken Sie auf die Schaltfläche Create (Erstellen).
  2. Geben Sie „traffic-app“ als App-Namen ein und wählen Sie Ihre Region aus.
  3. Klicken Sie auf Erstellen.

Knoten der App-Komponente hinzufügen

Nachdem Sie die leere Anwendung erstellt haben, können Sie die drei Knoten zum Anwendungsdiagramm hinzufügen:

  1. Aufnahmeknoten: Die Streamressource, die Daten aufnimmt.
  2. Verarbeitungsknoten: Das Belegungsanalysemodell, das auf aufgenommene Daten angewendet wird.
  3. Speicherknoten: Das Media Warehouse, in dem verarbeitete Videos gespeichert werden und das als Metadatenspeicher dient. Die Metadatenspeicher enthalten Analyseinformationen über aufgenommene Videodaten und abgeleitete Informationen von den KI-Modellen.

Fügen Sie Ihrer Anwendung in der Console Komponentenknoten hinzu.

  1. Öffnen Sie den Tab Anwendungen des Vertex AI Vision-Dashboards. Gehen Sie zum Tab „Anwendungen“.
  2. Wählen Sie in der Traffic-App-Zeile die Option Grafik ansehen aus. Dadurch gelangen Sie zur Diagrammvisualisierung der Verarbeitungspipeline.

Datenaufnahmeknoten hinzufügen

  1. Um einen Eingabestream-Knoten hinzuzufügen, wählen Sie im Abschnitt Connectors des seitlichen Menüs die Option Streams aus.
  2. Wählen Sie im angezeigten Menü Stream im Abschnitt Quelle die Option Streams hinzufügen aus.
  3. Wählen Sie im Menü Streams hinzufügen die Option Neue Streams registrieren aus und fügen Sie den Streamnamen "Traffic-Stream" hinzu.
  4. Klicken Sie auf Streams hinzufügen, um den Stream zur App-Grafik hinzuzufügen.

Datenverarbeitungsknoten hinzufügen

  1. Wenn Sie den Knoten für das Belegungszahlmodell hinzufügen möchten, wählen Sie im Bereich Spezialisierte Modelle des seitlichen Menüs die Option Belegungsanalyse aus.
  2. Behalten Sie die Standardauswahl Personen und Fahrzeuge bei.
  3. Linien in Linienüberschneidungen hinzufügen. Zeichnen Sie mit dem Tool für Linien mit mehreren Punkten Linien, um aus- oder einfahrende Autos oder Personen zu erkennen.
  4. Zeichne die aktiven Zonen, um Personen/Fahrzeuge in diesem Bereich zu zählen.
  5. Fügen Sie Einstellungen für die Verweildauer hinzu, um Überlastungen zu erkennen, wenn eine aktive Zone gezeichnet wird.
  • Aktuell werden aktive Zonen und Linienkreuzungen nicht gleichzeitig unterstützt. Verwenden Sie jeweils nur eine Funktion.)

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

Datenspeicherknoten hinzufügen

  1. Wählen Sie im Abschnitt Connectors des seitlichen Menüs die Option Media Warehouse von Vertex AI Vision aus, um den Ausgabezielknoten (Speicherknoten) hinzuzufügen.
  2. Klicken Sie im Menü Media Warehouse von Vertex AI Vision auf Warehouse verbinden.
  3. Wählen Sie im Menü Warehouse verbinden die Option Neues Warehouse erstellen aus. Benennen Sie das Warehouse Traffic Warehouse und belassen Sie die TTL-Dauer bei 14 Tagen.
  4. Klicken Sie auf die Schaltfläche Erstellen, um das Warehouse hinzuzufügen.

7. Ereignisverwaltung konfigurieren

Dauer 02:00

Wir verbinden das Modell mit der zuvor erstellten Cloud Functions-Funktion für die Nachbearbeitung, bei der die Cloud Functions-Funktion die Ausgabe des Modells frei verarbeiten und Ereignisse generieren kann, die Ihren Anforderungen entsprechen. Anschließend konfigurieren wir den Ereigniskanal, indem wir das zuvor erstellte Pub/Sub-Thema als Ziel konfigurieren. Du kannst auch ein minimales Intervall festlegen, um zu verhindern, dass dein Veranstaltungskanal innerhalb kurzer Zeit von demselben Ereignis überflutet wird.

Cloud Functions-Funktion für die Nachverarbeitung auswählen

  1. Klicken Sie in Ihrer Anwendungsgrafik auf den Datenverarbeitungsknoten(Belegungsanalyse), um das seitliche Menü zu öffnen.
  2. Wählen Sie im Drop-down-Menü „Nachbearbeitung“ die Cloud Functions-Funktion (identifiziert durch ihren Funktionsnamen) aus.
  3. Die Änderungen werden in der Anwendungsgrafik automatisch gespeichert.

Beispiel für die Konfiguration der Nachverarbeitung konnte nicht geladen werden

Ereigniskanal konfigurieren

  1. Klicken Sie in Ihrer Anwendungsgrafik auf den Datenverarbeitungsknoten(Belegungsanalyse), um das seitliche Menü zu öffnen.
  2. Klicken Sie auf „VERANSTALTUNGSBENACHRICHTIGUNG EINRICHTEN“. im Bereich „Ereignisbenachrichtigung“. Beispiel für eine Ereignisbenachrichtigung konnte nicht geladen werden
  3. Wählen Sie im Drop-down-Menü Ihr Pub/Sub-Thema aus.
  4. Optional: Lege das minimale Intervall bzw. die minimale Häufigkeit für die Veröffentlichung von Ereignissen fest.

Beispiel für das Dialogfeld „Ereignisbenachrichtigung“ konnte nicht geladen werden

8. Anwendung zur Verwendung bereitstellen

Nachdem Sie Ihre End-to-End-Anwendung mit allen erforderlichen Komponenten erstellt haben, besteht der letzte Schritt zur Verwendung der Anwendung darin, sie bereitzustellen.

  1. Öffnen Sie den Tab Anwendungen des Vertex AI Vision-Dashboards. Gehen Sie zum Tab „Anwendungen“.
  2. Wählen Sie neben der Traffic-App in der Liste die Option Grafik anzeigen aus.
  3. Klicken Sie auf der Seite zum Erstellen von Anwendungsgrafiken auf die Schaltfläche Bereitstellen.
  4. Wählen Sie im folgenden Bestätigungsdialogfeld die Option Bereitstellen aus. Der Bereitstellungsvorgang kann einige Minuten dauern. Nach Abschluss der Bereitstellung werden neben den Knoten grüne Häkchen angezeigt. ee78bbf00e5db898.png

9. Ereignisse/Nachrichten im Pub/Sub-Abo prüfen

Nachdem Sie Videodaten in Ihre Verarbeitungs-App aufgenommen haben, sollte die Cloud Functions-Funktion Ereignisse generieren, sobald das Belegungsanalysemodell eine Annotation ausgibt. Dann sollten diese Ereignisse als Nachrichten über Ihr Pub/Sub-Thema die Sie von Ihrem Abo erhalten haben.

Bei den folgenden Schritten wird davon ausgegangen, dass Sie ein Pull-Abo haben.

  1. Öffnen Sie die Pub/Sub-Aboliste in Ihrem Projekt und um das entsprechende Abo zu finden. Zur Seite mit der Pub/Sub-Aboliste
  2. Zu „Nachricht“ wechseln .
  3. Klicken Sie auf „Pull“. Schaltfläche.
  4. Sehen Sie sich Ihre Nachricht in der Tabelle an. Bild der Pub/Sub-Abonachricht konnte nicht geladen werden

Alternativ erfahren Sie, wie Sie Nachrichten ohne UI empfangen können. Zur Aboseite

10. Glückwunsch

Sie haben das Lab abgeschlossen.

Aufräumen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.

Projekt löschen

Einzelne Ressourcen löschen

Ressourcen

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

Feedback

Klicken Sie hier, um Feedback zu geben.

Umfrage

Wie möchten Sie diese Anleitung nutzen?

<ph type="x-smartling-placeholder"></ph> Nur bis zum Ende lesen Lies sie dir durch und absolviere die Übungen

Wie nützlich war dieses Codelab?

<ph type="x-smartling-placeholder"></ph> Sehr nützlich Nützlich