Vertex AI Vision Traffic Monitoring-Anwendung

1. Ziele

Übersicht

In diesem Codelab geht es darum, eine End-to-End-Anwendung für Vertex AI Vision zu erstellen, um Verkehrsvideoaufnahmen in Echtzeit zu überwachen. Wir verwenden die integrierten Funktionen des vortrainierten Specialized-Modells Occupancy analytics (Belegungsanalyse), um Folgendes zu erfassen:

  • 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

  • VM für die Aufnahme von Videos für das Streaming einrichten
  • 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.
  • Wie Sie die Ausgabe mit BigQuery verbinden, eine SQL-Abfrage schreiben, um Erkenntnisse aus der JSON-Ausgabe des Modells zu extrahieren, und das Ergebnis in Echtzeit in Looker Studio visualisieren.

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. VM für das Streamen von Videos einrichten

Bevor Sie eine App in Occupancy Analytics erstellen, müssen Sie einen Stream registrieren, der später von der App verwendet werden kann.

In diesem Tutorial erstellen Sie eine Compute Engine-VM-Instanz, auf der ein Video gehostet wird, und senden die Streaming-Videodaten von der VM.

Linux-VM erstellen

Der erste Schritt beim Senden von Videos von einer Compute Engine-VM-Instanz ist das Erstellen der VM-Instanz.

  1. Rufen Sie in der Console die Seite VM-Instanzen auf. Zu Seite „VM-Instanzen“
  2. Wählen Sie Ihr Projekt aus und klicken Sie auf Weiter.
  3. Klicken Sie auf Instanz erstellen.
  4. Geben Sie einen Namen für Ihre VM an. Weitere Informationen finden Sie unter Namenskonvention für Ressourcen.
  5. Ändern Sie optional die Zone für diese VM. In Compute Engine wird die Liste der Zonen in jeder Region zufällig angeordnet, um die Verwendung in mehreren Zonen zu fördern.
  6. Übernehmen Sie die verbleibenden Standardoptionen. Weitere Informationen zu diesen Optionen finden Sie unter VM erstellen und starten.
  7. Klicken Sie zum Erstellen und Starten der VM auf Erstellen.

VM-Umgebung einrichten

Nachdem die VM gestartet wurde, können Sie über die Console eine SSH-Verbindung zur VM über Ihren Browser herstellen. Anschließend können Sie das vaictl-Befehlszeilentool herunterladen, um Videos in Ihren Stream aufzunehmen.

SSH-Verbindung zur VM herstellen

  1. Rufen Sie in der Console die Seite VM-Instanzen auf. Zu Seite „VM-Instanzen“
  2. Klicken Sie in der Instanzzeile, die Sie erstellt haben, im Bereich Verbinden auf SSH. Dadurch wird in einem neuen Browserfenster eine SSH-Verbindung geöffnet. Die SSH-Option in der Benutzeroberfläche

vaictl-Befehlszeilentool herunterladen

  1. Laden Sie im Fenster SSH-in-Browser das Befehlszeilentool für Vertex AI Vision (vaictl) mit dem folgenden Befehl herunter:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
  1. Installieren Sie das Befehlszeilentool mit dem folgenden Befehl:
sudo apt install ./visionai_0.0-4_amd64.deb
  1. Sie können die Installation mit dem folgenden Befehl testen:
vaictl --help

4. Videodatei für Streaming aufnehmen

Nachdem Sie Ihre VM-Umgebung eingerichtet haben, können Sie eine Beispielvideodatei kopieren und dann mit vaictl 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 auf Ihre VM kopieren

  1. Kopieren Sie im Fenster SSH im Browser für Ihre VM ein Beispielvideo mit dem folgenden gsutil cp-Befehl. 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 .

Video von VM streamen und 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 auch nach dem Trennen der VM 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 der Stream-Import 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).

5. 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, die Daten aufnimmt, die von einer von Ihnen erstellten Compute Engine-VM-Instanz gesendet 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.

6. Ausgabe mit BigQuery-Tabelle verbinden

Wenn Sie Ihrer Vertex AI Vision-App einen BigQuery-Connector hinzufügen, werden alle verbundenen App-Modellausgaben in die Zieltabelle aufgenommen.

Sie können entweder eine eigene BigQuery-Tabelle erstellen und diese Tabelle angeben, wenn Sie der App einen BigQuery-Connector hinzufügen, oder die Tabelle automatisch von der Vertex AI Vision-App-Plattform erstellen lassen.

Automatische Tabellenerstellung

Wenn Sie die Tabelle automatisch von der Vertex AI Vision-App-Plattform erstellen lassen, können Sie diese Option beim Hinzufügen des BigQuery-Connector-Knotens angeben.

Die folgenden Dataset- und Tabellenbedingungen gelten, wenn Sie die automatische Tabellenerstellung verwenden möchten:

  • Dataset: Der automatisch erstellte Dataset-Name ist visionai_dataset.
  • Tabelle: Der automatisch erstellte Tabellenname lautet visionai_dataset.APPLICATION_ID.
  • Fehlerbehandlung:
  • Wenn die Tabelle mit demselben Namen im selben Dataset vorhanden ist, wird sie nicht automatisch erstellt.
  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 App ansehen aus.
  3. Wählen Sie auf der Seite des Anwendungs-Builders im Bereich Connectors die Option BigQuery aus.
  4. Lassen Sie das Feld BigQuery-Pfad leer. ee0b67d4ab2263d.png
  5. Wählen Sie unter Metadaten speichern aus: nur „Belegungsanalyse“ aus und deaktivieren Sie Streams.

Das endgültige App-Diagramm sollte so aussehen:

1787242465fd6da7.png

7. 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

8. Videocontent im Speicher-Warehouse suchen

Nachdem Sie Videodaten in Ihre Verarbeitungs-App aufgenommen haben, können Sie analysierte Videodaten ansehen und die Daten anhand von Informationen zur Belegungsanalyse durchsuchen.

  1. Öffnen Sie den Tab Warehouses (Speicherorte) des Vertex AI Vision-Dashboards. Zum Tab „Warehouses“ (Lager)
  2. Suchen Sie in der Liste nach dem Warehouse „traffic-warehouse“ und klicken Sie auf Assets ansehen.
  3. Legen Sie im Abschnitt Personenzahl oder Fahrzeuganzahl den Wert Min. auf 1 und den Wert Max. auf 5 fest.
  4. Wenn Sie verarbeitete Videodaten filtern möchten, die im Media Warehouse von Vertex AI Vision gespeichert sind, klicken Sie auf Suchen.

e636361b19738c8d.png

Eine Ansicht der gespeicherten Videodaten, die den Suchkriterien in der Google Cloud Console entsprechen. Videoquelle: Elizabeth Mavor auf Pixabay (angewendete Suchkriterien).

9. Ausgabe in BigQuery-Tabelle analysieren

Zu BigQuery

Wählen Sie das Dataset „visionai_dataset“ aus.

Wählen Sie die Tabelle aus: APPLICATION_ID (in diesem Fall „traffic-app“).

Klicken Sie rechts neben dem Tabellennamen auf das Dreipunkt-Menü und dann auf „Abfrage“.

Schreiben Sie die folgende Abfrage:

Query1: Abfrage zum Prüfen der Anzahl der Fahrzeuge, die jede Linie pro Minute überqueren

abc.sql

- Get list of active marked lines for each timeframe
WITH line_array AS (
  SELECT
  t.ingestion_time AS ingestion_time,
  JSON_QUERY_ARRAY(t.annotation.stats["crossingLineCounts"]) AS lines
  FROM
  `PROJ_ID.visionai_dataset.APP_ID` AS t
),
- Flatten active lines to get individual entities details
flattened AS (
  SELECT
  line_array.ingestion_time,
  JSON_VALUE(line.annotation.id) as line_id,
  JSON_QUERY_ARRAY(line["positiveDirectionCounts"]) AS entities
  FROM line_array, unnest(line_array.lines) as line
 )
- Generate aggregate vehicle count per zone w.r.t time 
SELECT
  STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, line_id,
  SUM(INT64(entity["count"])) as vehicle_count
FROM
  flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, line_id

Abfrage 2: Abfrage zur Überprüfung der Anzahl der Fahrzeuge pro Minute in jeder Zone

- Get list of active zones for each timeframe
WITH zone_array AS (
     SELECT
     t.ingestion_time AS ingestion_time,
     JSON_QUERY_ARRAY(t.annotation.stats["activeZoneCounts"]) AS zones
     FROM
     `PROJ_ID.visionai_dataset.APP_ID` AS t
),
- Flatten active zones to get individual entities details
flattened AS (
   SELECT zone_array.ingestion_time, JSON_VALUE(zone.annotation.id) as zone_id,
         JSON_QUERY_ARRAY(zone["counts"]) AS entities
   FROM zone_array, unnest(zone_array.zones) as zone
 )
- Generate aggregate vehicle count per zone w.r.t time 
SELECT 
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, 
zone_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, zone_id

In den obigen Abfragen können Sie „Vehicle“ durch „Person“ ersetzen, um Personen zu zählen.

In diesem Codelab werden nur die Beispieldaten und die Visualisierung für Query1 gezeigt. Für Query2 können Sie ein ähnliches Verfahren anwenden.

e6fd891f3a46246.png

Klicken Sie im Menü auf der rechten Seite auf „Daten auswerten“ und wählen Sie „Mit Looker Studio auswerten“ aus.

9e737ddb4d0d25b6.png

Fügen Sie im Bereich „Dimension“ die Zeit hinzu und ändern Sie die Zeitkonfiguration in „Datum/Uhrzeit“. Fügen Sie in „Aufschlüsselungsdimension“ „line_id“ hinzu. b5da9704ccd8db.png

Das Diagramm oben zeigt die Anzahl der Fahrzeuge/Personen, die jede Linie pro Minute überqueren.

Die dunkelblauen und hellblauen Balken stehen für die beiden verschiedenen Zeilen-IDs.

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