1. Zielsetzungen
Übersicht
In diesem Codelab geht es darum, eine Vertex AI Vision-Anwendung zu erstellen, mit der Ereignisse mit der Ereignisverwaltungsfunktion gesendet werden. Wir verwenden die integrierten Funktionen des vortrainierten spezialisierten Modells Belegungsanalyse, um Ereignisse basierend auf den folgenden Daten zu generieren:
- 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
- Ü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
- App 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 und -Abo erstellen
- Hier erfahren Sie, wie Sie die Ereignisverwaltung einrichten, um Ereignisse über ein Pub/Sub-Thema zu senden.
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 in diesem Verfahren erstellten Ressourcen 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 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 aus 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 für das Dienstkonto, das Sie erstellt haben.
- 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. Videodatei für das Streaming aufnehmen
Mit vaictl können Sie die Videodaten in Ihre App für die Belegung analysieren.
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.
- Klicken Sie auf „Registrieren“.
Es dauert einige Minuten, bis der Stream registriert ist.
Beispielvideo vorbereiten
- 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 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 .
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: street_vehicles_people.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 fortgesetzt wird.
- ( Fügen Sie „nohup“ am Anfang und „&“ am Ende hinzu, um einen Hintergrundjob 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.
Liveansicht 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-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 Ihr Modell überwacht
- Rufen Sie die Erstellungsseite der Cloud Functions-Benutzeroberfläche auf.
- Legen Sie den Funktionsnamen fest, der später in den Einstellungen für die Ereignisverwaltung auf diese Cloud-Funktion verweist.
- Achten Sie darauf, dass die Region mit Ihrer Anwendung übereinstimmt.
- Passen Sie die Trigger-Einstellungen an und speichern Sie sie.
- Klicken Sie auf die Schaltfläche „Weiter“, um zum Codeteil zu gelangen.
- Bearbeiten Sie die Cloud-Funktion. 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);
}
- 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 angeben, 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 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-Benutzeroberfläche 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
Im ersten Schritt erstellen Sie eine App, 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 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 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 „Hinzufügen“ Erstellen.
- Geben Sie „traffic-app“ als App-Namen ein und wählen Sie Ihre Region aus.
- Klicken Sie auf Erstellen.
Knoten für Anwendungskomponenten hinzufügen
Nachdem Sie die leere Anwendung erstellt haben, können Sie die drei Knoten zum Anwendungsdiagramm hinzufügen:
- Aufnahmeknoten: Die Streamressource, die Daten aufnimmt.
- Verarbeitungsknoten: Das Modell für die Belegungsanalyse, 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 App in der Konsole Komponentenknoten hinzu.
- Öffnen Sie den Tab Anwendungen des Vertex AI Vision-Dashboards. Gehen Sie zum Tab „Anwendungen“.
- Wählen Sie in der Traffic-App-Zeile die Option Grafik ansehen aus. Daraufhin wird die Grafikvisualisierung der Verarbeitungspipeline angezeigt.
Datenaufnahmeknoten hinzufügen
- Um einen Eingabestream-Knoten hinzuzufügen, wählen Sie im Abschnitt Connectors des seitlichen Menüs die Option Streams aus.
- Wählen Sie im angezeigten Menü Stream im Abschnitt Quelle die Option Streams hinzufügen aus.
- Wählen Sie im Menü Streams hinzufügen die Option Neue Streams registrieren aus und fügen Sie den Streamnamen "Traffic-Stream" hinzu.
- Klicken Sie auf Streams hinzufügen, um den Stream der 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 für Linien mit mehreren Punkten Linien, um aus- oder einfahrende Autos oder Personen zu erkennen.
- Zeichne die aktiven Zonen, um Personen/Fahrzeuge in diesem Bereich zu zählen.
- Fügen Sie Einstellungen für die Verweildauer hinzu, um Staus zu erkennen, wenn eine aktive Zone gezogen 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 in „traffic-warehouse“ und belassen Sie die TTL-Dauer bei 14 Tagen.
- Klicken Sie auf die Schaltfläche Erstellen, um das Warehouse hinzuzufügen.
7. Ereignisverwaltung konfigurieren
Dauer: 02:00
Wir verbinden das Modell für die Nachbearbeitung mit der zuvor erstellten Cloud-Funktion. Die Cloud-Funktion kann die Ausgabe des Modells frei verarbeiten und Ereignisse generieren, die Ihren Anforderungen entsprechen. Als Nächstes konfigurieren wir den Ereigniskanal, indem wir das zuvor erstellte Pub/Sub-Thema als Ziel festlegen. Sie können auch ein Mindestintervall festlegen, damit Ihr Ereigniskanal nicht in kurzer Zeit von demselben Ereignis überflutet wird.
Cloud Functions-Funktion für die Nachverarbeitung auswählen
- Klicken Sie in der Anwendungsgrafik auf den Datenverarbeitungsknoten(Belegungsanalyse), um das seitliche Menü zu öffnen.
- Wählen Sie im Drop-down-Menü „Nachbearbeitung“ Ihre Cloud Functions-Funktion aus, die am Funktionsnamen erkennbar ist.
- Die Änderungen werden in der Anwendungsgrafik automatisch gespeichert.
Ereigniskanal konfigurieren
- Klicken Sie in der Anwendungsgrafik auf den Datenverarbeitungsknoten(Belegungsanalyse), um das seitliche Menü zu öffnen.
- Klicken Sie im Bereich „Terminbenachrichtigungen“ auf „TERMINBENUTZUNG EINSTELLEN“.
- Wählen Sie im Drop-down-Menü Ihr Pub/Sub-Thema aus.
- Optional: Lege das minimale Intervall bzw. die minimale Häufigkeit für die Ereignisveröffentlichung fest.
8. 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 mit Zugriffen die Option Grafik anzeigen 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. Die Bereitstellung kann einige Minuten dauern. Wenn die Bereitstellung abgeschlossen ist, werden neben den Knoten grüne Häkchen angezeigt.
9. Ereignisse/Nachrichten in 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 Belegungseanalyse Anmerkungen ausgibt. Dann sollten diese Ereignisse 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.
- Öffnen Sie in Ihrem Projekt die Liste mit Pub/Sub-Abos und suchen Sie das entsprechende Abo. Zur Seite mit der Liste der Pub/Sub-Abos
- Gehen Sie zum Tab „Nachricht“.
- Klicken Sie auf die Schaltfläche zum Ziehen.
- Rufen Sie die Nachricht in der Tabelle auf.
Alternativ erfahren Sie, wie Sie Nachrichten ohne UI empfangen können. Zur Aboseite
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
Hier klicken, um Feedback zu geben