1. Zielsetzungen
Übersicht
In diesem Codelab geht es darum, eine End-to-End-Vertex AI Vision-Anwendung zu erstellen, mit der Videoaufnahmen von Verkehrswegen in Echtzeit überwacht werden können. Wir verwenden die integrierten Funktionen des vortrainierten spezialisierten Modells Belegungsanalyse, um Folgendes zu erfassen:
- Zählen Sie die Anzahl der Fahrzeuge und Personen, die eine Straße an einer bestimmten Linie überqueren.
- Anzahl der Fahrzeuge/Personen in einem bestimmten Bereich der Straße zählen
- Staus an beliebigen Stellen auf der Straße erkennen
Aufgaben in diesem Lab
- VM einrichten, um Videos für das Streaming aufzunehmen
- Anwendung in Vertex AI Vision erstellen
- Verfügbare Funktionen in der Belegungsanalyse und ihre Verwendung
- App bereitstellen
- So suchst du in deinem Vertex AI Vision-Media Warehouse nach Videos.
- Hier erfahren Sie, wie Sie die Ausgabe mit BigQuery verbinden, eine SQL-Abfrage schreiben, um Statistiken aus der JSON-Ausgabe des Modells zu extrahieren, und das Ergebnis in Looker Studio in Echtzeit visualisieren.
2. Vorbereitung
- 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
- Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
- Aktivieren Sie die Compute Engine API und die Vision AI API. APIs aktivieren
So erstellen Sie ein Dienstkonto:
- Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen. Zur Seite „Dienstkonto erstellen“
- Wählen Sie Ihr Projekt aus.
- 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
- Klicken Sie auf Erstellen und fortfahren.
- Um Zugriff auf Ihr Projekt zu gewähren, weisen Sie Ihrem Dienstkonto die folgenden Rollen zu: Vision AI > Vision AI-Bearbeiter, Compute Engine > Compute Instance Admin (Beta), Storage > Storage Object Viewer † . 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.
- Klicken Sie auf Weiter.
- 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.
So erstellen Sie einen Dienstkontoschlüssel:
- Klicken Sie in der Google Cloud Console auf die E-Mail-Adresse des von Ihnen erstellten Dienstkontos.
- Klicken Sie auf Schlüssel.
- Klicken Sie auf Schlüssel hinzufügen und dann auf Neuen Schlüssel erstellen.
- Klicken Sie auf Erstellen. Daraufhin wird eine JSON-Schlüsseldatei auf Ihren Computer heruntergeladen.
- Klicken Sie auf Schließen.
- Installieren und initialisieren Sie die Google Cloud CLI.
† Diese Rolle ist 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 dieser Anleitung erstellen Sie eine Compute Engine-VM-Instanz, die ein Video hostet. Anschließend senden Sie die gestreamten Videodaten von der VM.
Linux-VM erstellen
Der erste Schritt zum Senden von Video von einer Compute Engine-VM-Instanz besteht darin, die VM-Instanz zu erstellen.
- Rufen Sie in der Console die Seite VM-Instanzen auf. Zu Seite „VM-Instanzen“
- Wählen Sie Ihr Projekt aus und klicken Sie auf Weiter.
- Klicken Sie auf Instanz erstellen.
- Geben Sie einen Namen für Ihre VM an. Weitere Informationen finden Sie unter Namenskonvention für Ressourcen.
- Ä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.
- Akzeptieren Sie die restlichen Standardoptionen. Weitere Informationen zu diesen Optionen finden Sie unter VM erstellen und starten.
- 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 von Ihrem Browser zur VM herstellen. Anschließend können Sie das vaictl-Befehlszeilentool herunterladen, um Videos in Ihren Stream aufzunehmen.
SSH-Verbindung zur VM herstellen
- Rufen Sie in der Console die Seite VM-Instanzen auf. Zu Seite „VM-Instanzen“
- Klicken Sie im Bereich Verbinden der von Ihnen erstellten Instanzzeile auf SSH. Dadurch wird eine SSH-Verbindung in einem neuen Browserfenster geöffnet.
Befehlszeilentool „vaictl“ herunterladen
- Laden Sie im Fenster SSH-in-Browser das Befehlszeilentool 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
- Installieren Sie das Befehlszeilentool mit dem folgenden Befehl:
sudo apt install ./visionai_0.0-4_amd64.deb
- Sie können die Installation mit dem folgenden Befehl testen:
vaictl --help
4. Videodatei für das Streaming aufnehmen
Nachdem Sie Ihre VM-Umgebung eingerichtet haben, können Sie eine Beispielvideodatei kopieren und dann mit vaictl die Videodaten an Ihre App für die Belegung analysieren streamen.
Aktivieren Sie zuerst die Vision AI API in der Cloud Console
Neuen Stream registrieren
- Klicken Sie im linken Bereich von Vertex AI Vision auf den Tab „Streams“.
- Klicken Sie auf „Registrieren“.
- Geben Sie als Streamnamen „traffic-stream“ ein.
- Geben Sie unter „Region“ „us-central1“ ein.
- Auf „Registrieren“ klicken
Es dauert einige Minuten, bis der Stream registriert ist.
Beispielvideo auf die VM kopieren
- Kopieren Sie im Fenster SSH-in-Browser für Ihre VM ein Beispielvideo mit dem folgenden Befehl gsutil cp. 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).
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 gsutil cp $SOURCE .
Videos von einer VM streamen und Daten in den Stream aufnehmen
- 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 Cloudstandorte.
- LOCAL_FILE: Der Dateiname einer lokalen Videodatei. Beispiel: straße_fahrzeuge_menschen.mp4.
- Flag „–loop“: 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
- Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt. Wenn du das Flag „–loop“ verwendest, wird das Video im Stream in einer Schleife abgespielt, bis du den Befehl beendest. Wir führen diesen Befehl als Hintergrundjob aus, damit das Streaming auch nach der Trennung der VM 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 &
Es kann etwa 100 Sekunden dauern, bis das Video im Dashboard angezeigt wird.
Sobald die Datenaufnahme des Streams verfügbar ist, können Sie den Videofeed im Vertex AI Vision-Dashboard auf dem Tab Streams aufrufen, indem Sie den Traffic-Stream auswählen.
Liveansicht des Videos, das in der Google Cloud Console in den Stream aufgenommen wird. Videoquelle: Elizabeth Mavor auf Pixabay (Pixelierung hinzugefügt).
5. 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: Nach der Datenaufnahme kann ein KI-Modell(Computer Vision) hinzugefügt werden.
- Datenspeicher: Die beiden Versionen des Videofeeds (der ursprüngliche Stream und der vom KI-Modell verarbeitete Stream) können in einem Media Warehouse gespeichert werden.
In der Google Cloud Console wird eine App als Grafik dargestellt.
Leere App erstellen
Bevor Sie den App-Graphen befüllen können, müssen Sie zuerst eine leere App erstellen.
Erstellen Sie eine App in der Google Cloud Console.
- Rufen Sie die Google Cloud Console auf.
- Öffnen Sie den Tab Anwendungen des Vertex AI Vision-Dashboards.
Gehen Sie zum Tab „Anwendungen“.
- Klicken Sie auf die Schaltfläche Create (Erstellen).
- Geben Sie „traffic-app“ als App-Namen ein und wählen Sie Ihre Region aus.
- 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:
- Aufnahmeknoten: Die Streamressource, in die Daten aufgenommen werden, die von einer von Ihnen erstellten Compute Engine-VM-Instanz gesendet werden.
- Verarbeitungsknoten: Das Belegungsanalysemodell, das auf aufgenommene Daten angewendet wird.
- Speicherknoten: Das Media Warehouse, in dem verarbeitete Videos gespeichert werden und das als Metadatenspeicher dient. Die Metadatenspeicher enthalten Analyseinformationen zu aufgenommenen Videodaten und von den KI-Modellen abgeleitete Informationen.
Fügen Sie Ihrer Anwendung in der Console Komponentenknoten hinzu.
- Öffnen Sie den Tab Anwendungen des Vertex AI Vision-Dashboards. Gehen Sie zum Tab „Anwendungen“.
- Wählen Sie in der Zeile „Traffic-App“ die Option Diagramm ansehen aus. Dadurch gelangen Sie zur Diagrammvisualisierung der Verarbeitungspipeline.
Datenaufnahmeknoten hinzufügen
- Wenn Sie einen Eingabestreamknoten hinzufügen möchten, wählen Sie im seitlichen Menü im Abschnitt Connectors die Option Streams aus.
- Wählen Sie im Menü Stream im Bereich Quelle die Option Streams hinzufügen aus.
- Wählen Sie im Menü Streams hinzufügen die Option Neue Streams registrieren aus und geben Sie „traffic-stream“ als Streamnamen ein.
- Klicken Sie auf Streams hinzufügen, um den Stream zur App-Grafik hinzuzufügen.
Datenverarbeitungsknoten hinzufügen
- Wenn Sie den Knoten für das Belegungszählermodell hinzufügen möchten, wählen Sie im seitlichen Menü im Abschnitt Spezielle Modelle die Option Belegungsanalyse aus.
- Behalten Sie die Standardauswahl Personen und Fahrzeuge bei.
- Linien in Linienüberschneidungen hinzufügen. Zeichnen Sie mit dem Tool „Mehrpunktlinie“ die Linien, an denen Autos oder Personen ein- oder ausfahren sollen.
- Zeichnen Sie die aktiven Zonen, um Personen/Fahrzeuge in dieser Zone zu zählen.
- Fügen Sie Einstellungen für die Verweildauer hinzu, um Überlastungen zu erkennen, wenn eine aktive Zone gezeichnet wird.
- Aktivzonen und Linienüberquerungen werden derzeit nicht gleichzeitig unterstützt. Verwenden Sie jeweils nur eine Funktion.)
Datenspeicherknoten hinzufügen
- Wählen Sie im Abschnitt Connectors des seitlichen Menüs die Option Media Warehouse von Vertex AI Vision aus, um den Knoten für den Ausgabespeicherort (Speicher) hinzuzufügen.
- Klicken Sie im Menü Media Warehouse von Vertex AI Vision auf Warehouse verbinden.
- 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.
- 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 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 Name des Datasets lautet „visionai_dataset“.
- Tabelle: Der Name der automatisch erstellten Tabelle lautet visionai_dataset.APPLICATION_ID.
- Fehlerbehandlung:
- Wenn die Tabelle mit demselben Namen im selben Dataset bereits vorhanden ist, wird sie nicht automatisch erstellt.
- Öffnen Sie im Vertex AI Vision-Dashboard den Tab Anwendungen. Gehen Sie zum Tab „Anwendungen“.
- Wählen Sie in der Liste neben dem Namen Ihrer Anwendung die Option App ansehen aus.
- Wählen Sie auf der Seite „Application Builder“ im Bereich Connectors die Option BigQuery aus.
- Lassen Sie das Feld BigQuery-Pfad leer.
- Wählen Sie unter Metadaten aus nur „Belegungsanalyse“ aus und entfernen Sie das Häkchen bei „Streams“.
Der endgültige App-Graph sollte so aussehen:
7. Anwendung zur Verwendung bereitstellen
Nachdem Sie Ihre End-to-End-App mit allen erforderlichen Komponenten erstellt haben, ist der letzte Schritt zur Verwendung der App die Bereitstellung.
- Öffnen Sie den Tab Anwendungen des Vertex AI Vision-Dashboards. Gehen Sie zum Tab „Anwendungen“.
- Wählen Sie in der Liste neben der App für die Besucherstatistik Grafik ansehen aus.
- Klicken Sie auf der Seite „Application Graph Builder“ (Anwendungsgraph-Builder) auf die Schaltfläche Bereitstellen.
- Wählen Sie im folgenden Bestätigungsdialogfeld Bereitstellen aus. Der Bereitstellungsvorgang kann einige Minuten dauern. Wenn die Bereitstellung abgeschlossen ist, werden neben den Knoten grüne Häkchen angezeigt.
8. Nach Videoinhalten im Speicher-Warehouse suchen
Nachdem Sie Videodaten in Ihre Verarbeitungs-App aufgenommen haben, können Sie analysierte Videodaten aufrufen und anhand von Informationen zur Belegung nach Daten suchen.
- Öffnen Sie im Vertex AI Vision Dashboard den Tab Warehouses. Rufe den Tab „Lagerhäuser“ auf.
- Suchen Sie in der Liste nach dem Warehouse „traffic-warehouse“ und klicken Sie auf Assets ansehen.
- Legen Sie im Abschnitt Personenanzahl oder Fahrzeuganzahl den Wert Min. auf 1 und den Wert Max. auf 5 fest.
- Klicken Sie auf Suchen, um verarbeitete Videodaten zu filtern, die im Media Warehouse von Vertex AI Vision gespeichert sind.
Eine Ansicht der gespeicherten Videodaten, die den Suchkriterien in der Google Cloud Console entsprechen. Videoquelle: Elizabeth Mavor auf Pixabay (angewandte Suchkriterien).
9. Ausgabe in BigQuery-Tabelle analysieren
Zu BigQuery
Dataset auswählen: visionai_dataset
Wählen Sie die Tabelle mit Ihrer APPLICATION_ID aus (in diesem Fall „traffic-app“).
Klicken Sie auf das Dreipunkt-Menü rechts neben dem Tabellennamen und dann auf „Abfrage“.
Geben Sie die folgende Abfrage ein:
Abfrage 1: 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: Anzahl der Fahrzeuge pro Minute in den einzelnen Zonen prüfen
—- 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 „Fahrzeug“ in „Person“ ändern, um Personen zu zählen.
In diesem Codelab werden nur die Beispieldaten und die Visualisierung für Abfrage 1 verwendet. Für Query2 können Sie ein ähnliches Verfahren anwenden.
Klicken Sie im Menü rechts auf „Daten auswerten“ und wählen Sie „Mit Looker Studio auswerten“ aus.
Fügen Sie im Bereich „Dimension“ die Zeit hinzu und ändern Sie die Zeitkonfiguration in „Datum und Uhrzeit“. Fügen Sie unter „Aufschlüsselungsdimension“ die Zeile „line_id“ hinzu.
Die obige Grafik zeigt die Anzahl der Fahrzeuge/Personen, die jede Linie pro Minute überqueren.
Der tiefblaue und der hellblaue Balken stehen für die beiden verschiedenen Linien-IDs.
10. Glückwunsch
Sie haben das Lab erfolgreich 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.