Vertex AI Vision Occupancy Analytics App mit Ereignisverwaltung

1. Ziele

Übersicht

In diesem Codelab geht es darum, eine Vertex AI Vision-Anwendung von Anfang bis Ende zu erstellen, um Ereignisse mit der Ereignisverwaltungsfunktion zu senden. Wir verwenden die integrierten Funktionen des vortrainierten spezialisierten Modells Occupancy analytics, um Ereignisse basierend auf der Erfassung der folgenden Elemente zu generieren:

  • Zählen Sie die Anzahl der Fahrzeuge und Personen, die eine Straße an einer bestimmten Linie überqueren.
  • Zählen Sie die Anzahl der Fahrzeuge/Personen in einem beliebigen festen Bereich der Straße.
  • Stau auf einem beliebigen Teil der Straße erkennen.

Lerninhalte

  • Videos für das Streaming aufnehmen
  • Anwendung in Vertex AI Vision erstellen
  • Verschiedene Funktionen in Occupancy Analytics und ihre Verwendung
  • App bereitstellen
  • So suchen Sie nach Videos in Ihrem Media Warehouse von Vertex AI Vision.
  • So erstellen Sie eine Cloud-Funktion, die die Daten des Occupancy Analytics-Modells verarbeitet.
  • So erstellen Sie ein Pub/Sub-Thema und ein Abo.
  • So richten Sie die Ereignisverwaltung ein, um Ereignisse über ein Pub/Sub-Thema zu senden.

2. Vorbereitung

  1. Wählen Sie in der Google Cloud Console auf der Seite der 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 mit dem Projekt verknüpften Ressourcen entfernen. Zur Projektauswahl
  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, 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. Die Google Cloud Console füllt das Feld Dienstkonto-ID anhand dieses Namens aus. Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein. Beispiel: „Dienstkonto für die Kurzanleitung“.
  4. Klicken Sie auf Erstellen und fortfahren.
  5. Um Zugriff auf Ihr Projekt zu gewähren, weisen Sie Ihrem Dienstkonto die folgenden Rollen zu: Vision AI > Vision AI-Bearbeiter, Compute Engine > Compute-Instanzadministrator (Beta), Storage > Storage-Objekt-Betrachter† . Wählen Sie in der Liste Rolle auswählen eine Rolle aus. Klicken Sie auf Weitere Rolle hinzufügen, um weitere Rollen hinzuzufügen. Hinweis: Das Feld Rolle hat Einfluss darauf, 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 Inhaber-, Bearbeiter- und Betrachterrolle nicht zuweisen. Gewähren Sie stattdessen eine vordefinierte Rolle oder eine benutzerdefinierte Rolle, 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.

Dienstkontoschlüssel erstellen:

  1. Klicken Sie in der Google Cloud Console auf die E-Mail-Adresse des von Ihnen erstellten Dienstkontos.
  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

Mit vaictl können Sie die Videodaten an Ihre App zur Analyse der Belegung 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 als Streamname „traffic-stream“ ein.
  4. Geben Sie als Region „us-central1“ ein.
  5. Klicken Sie auf „Registrieren“.

Es dauert einige Minuten, bis der Stream registriert ist.

Beispielvideo vorbereiten

  1. Sie können ein Beispielvideo mit dem folgenden gsutil cp-Befehl kopieren. Ersetzen Sie die folgende Variable:
  • SOURCE: Der Speicherort einer zu verwendenden Videodatei. Sie können Ihre eigene Videodateiquelle verwenden (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 Ihren Stream aufnehmen

  1. Verwenden Sie den folgenden Befehl, um diese lokale Videodatei an den Eingabestream der App 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. Wiederholt Dateidaten, um 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 übertragen. Wenn Sie das Flag „–loop“ verwenden, wird das Video im Stream wiederholt, bis Sie den Befehl beenden. 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 Befehl als Hintergrundjob auszuführen.)
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 &

Es kann etwa 100 Sekunden dauern, bis das Video im Dashboard angezeigt wird, nachdem der vaictl-Aufnahmevorgang gestartet wurde.

Nachdem die Streamaufnahme verfügbar ist, können Sie den Videofeed auf dem Tab Streams des Vertex AI Vision-Dashboards sehen, indem Sie den Traffic-Stream auswählen.

Zum Tab „Streams“

Live-Videostream in der BenutzeroberflächeLive-Ansicht des Videos, das in der Google Cloud Console in den Stream aufgenommen wird. Videoquelle: Elizabeth Mavor auf Pixabay (zusätzliche Pixelierung).

4. Cloud Functions-Funktion erstellen

Wir benötigen eine Cloud-Funktion, um die Daten des Modells zu verarbeiten und Ereignisse zu generieren, die später über den Ereigniskanal gesendet werden.

Weitere Informationen zu Cloud Functions

Cloud Functions-Funktion erstellen, die auf Ihr Modell wartet

  1. Rufen Sie die Seite zum Erstellen der Cloud-Funktion auf.
  2. Legen Sie den Funktionsnamen fest, der später in den Einstellungen für die Ereignisverwaltung verwendet wird, um auf diese Cloud Functions-Funktion zu verweisen.
  3. Die Region muss mit Ihrer Anwendung übereinstimmen.
  4. Passen Sie die Trigger-Einstellungen an und speichern Sie sie.
  5. Klicken Sie auf die Schaltfläche „Weiter“, um zum Abschnitt „Code“ zu gelangen. Fehler beim Laden des Beispiels zum Erstellen von Cloud Functions
  6. Cloud-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 die Schaltfläche „Bereitstellen“, um die Funktion bereitzustellen.

5. Pub/Sub-Thema und -Abo erstellen

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

Weitere Informationen zu Pub/Sub-Themen und Pub/Sub-Abos

Pub/Sub-Thema erstellen

Sie können ein Pub/Sub-Thema mit der gcloud CLI erstellen. Ersetzen Sie SUBSCRIPTION_ID durch den tatsächlichen Wert aus Ihrer Einrichtung:

gcloud pubsub topics create TOPIC_ID

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

Pub/Sub-Abo erstellen

Sie können ein Pub/Sub-Abo mit der gcloud CLI erstellen. Ersetzen Sie SUBSCRIPTION_ID und TOPIC_ID durch die tatsächlichen Werte aus Ihrer Einrichtung:

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

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

6. Anwendung erstellen

Als Erstes müssen Sie eine App erstellen, die Ihre Daten verarbeitet. Eine App kann als automatisierte Pipeline betrachtet werden, die Folgendes verbindet:

  • Datenaufnahme: Ein Videofeed wird in einen Stream aufgenommen.
  • Datenanalyse: Nach der Aufnahme kann ein KI-Modell(Computer Vision) 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 App als Diagramm dargestellt.

Leere App erstellen

Bevor Sie den App-Graphen mit Daten füllen können, müssen Sie zuerst eine leere App erstellen.

Erstellen Sie eine App in der Google Cloud Console.

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

Zum Tab „Anwendungen“

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

Knoten für Anwendungskomponenten hinzufügen

Nachdem Sie die leere Anwendung erstellt haben, können Sie dem App-Graphen die drei Knoten hinzufügen:

  1. Aufnahmeknoten: Die Stream-Ressource, über die Daten aufgenommen werden.
  2. Verarbeitungsknoten: Das Modell für die Analyse der Belegung, das auf die aufgenommenen Daten angewendet wird.
  3. Speicherknoten: Das Media Warehouse, in dem verarbeitete Videos gespeichert werden und das als Metadatenspeicher dient. Die Metadatenspeicher enthalten Analysedaten zu aufgenommenen Videodaten und von den KI-Modellen abgeleitete Informationen.

Fügen Sie Ihrer App in der Konsole Knoten für Komponenten hinzu.

  1. Öffnen Sie den Tab Anwendungen des Vertex AI Vision-Dashboards. Zum Tab „Anwendungen“
  2. Wählen Sie in der Zeile für die Traffic-App die Option Diagramm ansehen aus. Sie gelangen dann zur grafischen Darstellung der Verarbeitungspipeline.

Knoten für die Datenaufnahme hinzufügen

  1. Wenn Sie einen Knoten für den Eingabestream hinzufügen möchten, wählen Sie im seitlichen Menü im Abschnitt Connectors die Option Streams aus.
  2. Wählen Sie im Abschnitt Quelle des sich öffnenden Menüs Stream 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 „traffic-stream“ als Streamname hinzu.
  4. Klicken Sie auf Streams hinzufügen, um den Stream dem App-Diagramm hinzuzufügen.

Knoten zur Datenverarbeitung hinzufügen

  1. Wenn Sie den Knoten für das Modell zur Berechnung der Belegung hinzufügen möchten, wählen Sie im seitlichen Menü im Abschnitt Spezialisierte Modelle die Option Belegungsanalyse aus.
  2. Lassen Sie die Standardauswahl Personen und Fahrzeuge aktiviert.
  3. Fügen Sie Linien in „Linienkreuzung“ hinzu. Verwenden Sie das Tool „Linie mit mehreren Punkten“, um die Linien zu zeichnen, an denen Sie erkennen möchten, ob Autos oder Personen den Bereich verlassen oder betreten.
  4. Zeichnen Sie die aktiven Zonen, um Personen/Fahrzeuge in dieser Zone zu zählen.
  5. Es wurden Einstellungen für die Verweilzeit hinzugefügt, um Staus zu erkennen, wenn ein Alarmbereich gezeichnet wird.
  • Derzeit werden die aktive Zone und das Überschreiten von Linien nicht gleichzeitig unterstützt. Verwenden Sie jeweils nur eine Funktion.)

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

Datenspeicherknoten hinzufügen

  1. Wenn Sie den Knoten für den Ausgabespeicherort (Speicher) hinzufügen möchten, wählen Sie im Abschnitt Connectors des Seitenmenüs die Option Media Warehouse von Vertex AI Vision aus.
  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. Geben Sie dem Lager den Namen „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-Funktion für die Nachbearbeitung. Die Cloud-Funktion kann die Ausgabe des Modells frei verarbeiten und Ereignisse generieren, die Ihren Anforderungen entsprechen. Anschließend konfigurieren wir den Ereigniskanal, indem wir das zuvor erstellte Pub/Sub-Thema als Ziel festlegen. Sie können auch ein Mindestintervall festlegen, um zu verhindern, dass Ihr Ereignis-Channel innerhalb kurzer Zeit mit demselben Ereignis überflutet wird.

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

  1. Klicken Sie im Anwendungsdiagramm auf den Datenverarbeitungsknoten(Belegungsanalyse), um das Seitenmenü zu öffnen.
  2. Wählen Sie Ihre Cloud Functions-Funktion (anhand des Funktionsnamens) im Drop-down-Menü „Nachbearbeitung“ aus.
  3. Ihre Änderungen werden automatisch im Anwendungsdiagramm gespeichert.

Fehler beim Laden des Beispiels für die Konfiguration der Nachbearbeitung

Ereignis-Channel konfigurieren

  1. Klicken Sie im Anwendungsdiagramm auf den Datenverarbeitungsknoten(Belegungsanalyse), um das Seitenmenü zu öffnen.
  2. Klicken Sie im Bereich „Terminbenachrichtigung“ auf „TERMINBENACHRICHTIGUNG EINRICHTEN“. Beispiel für Ereignisbenachrichtigung konnte nicht geladen werden
  3. Wählen Sie Ihr Pub/Sub-Thema im Drop-down-Menü aus.
  4. Optional: Legen Sie das Mindestintervall bzw. die Mindesthä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-App mit allen erforderlichen Komponenten erstellt haben, müssen Sie sie als letzten Schritt bereitstellen, um sie verwenden zu können.

  1. Öffnen Sie den Tab Anwendungen des Vertex AI Vision-Dashboards. Zum Tab „Anwendungen“
  2. Wählen Sie in der Liste neben der Verkehrs-App Grafik ansehen aus.
  3. Klicken Sie auf der Seite „Application Graph Builder“ auf die Schaltfläche Deploy (Bereitstellen).
  4. Wählen Sie im folgenden Bestätigungsdialogfeld Bereitstellen aus. Die Bereitstellung kann mehrere Minuten dauern. Nach Abschluss des Deployments 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-Funktion Ereignisse generieren, sobald das Modell für die Analyse der Belegung eine Anmerkung ausgibt. Diese Ereignisse sollten dann als Nachrichten über Ihr Pub/Sub-Thema veröffentlicht und von Ihrem Abo empfangen werden.

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

  1. Öffnen Sie die Pub/Sub-Aboliste in Ihrem Projekt und suchen Sie nach dem entsprechenden Abo. Zur Seite „Pub/Sub-Abo-Liste“
  2. Rufen Sie den Tab „Nachricht“ auf.
  3. Klicken Sie auf die Schaltfläche „Pull“.
  4. Sehen Sie sich Ihre Nachricht in der Tabelle an. Fehler beim Laden des Bildes für die Pub/Sub-Abonachricht

Alternativ können Sie auch erfahren, wie Sie Nachrichten ohne Benutzeroberfläche empfangen. 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

Hier klicken, um Feedback zu geben

Umfrage

Wie werden Sie diese Anleitung verwenden?

Nur lesen Lesen und Übungen durchführen

Wie nützlich war dieses Codelab?

Sehr nützlich Einigermaßen nützlich