1. Zielsetzungen
Übersicht
In diesem Codelab geht es um das Erstellen einer End-to-End-Anwendung von Vertex AI Vision, um das Senden von Videos mit der Bewegungsfilterfunktion zu demonstrieren. In dieser Anleitung gehen wir die verschiedenen Parameter in der Konfiguration des Bewegungsfilters durch:
- Empfindlichkeit der Bewegungserkennung
- Minimale Ereignisdauer
- Lookback-Window
- Wartezeit
- Zone für Bewegungserkennung
Aufgaben in diesem Lab
- Videos für das Streaming aufnehmen
- Die verschiedenen Funktionen der Bewegungsfilter und ihre Verwendung
- Statistiken des Bewegungsfilters überprüfen
- Einstellung an das Video anpassen
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 in 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 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. Bewegungsfilter
Mit dem Bewegungsfilter werden Bewegungs- und Produktvideosegmente erfasst, die Bewegungsereignisse enthalten. Nutzer können die Filterbasis nach Bedarf konfigurieren, indem sie die Bewegungsempfindlichkeit, die Mindestereignislänge, das Lookback-Window, die Wartezeit und den Bewegungserkennungsbereich anpassen.
Konfiguration des Bewegungsfilters
Für den Bewegungsfilter stehen fünf Konfigurationen zur Anpassung zur Verfügung.
- Bewegungsempfindlichkeit: Hier legen Sie fest, wie empfindlich eine Bewegung ausgelöst werden soll.
- Mindestdauer des Ereignisses: die Mindestdauer, für die ein Bewegungsereignis erfasst wird.
- Lookback-Window: Gibt an, wie lange die Videoaufnahme beginnen soll, bevor ein Bewegungsereignis erkannt wird.
- Wartezeit: Nach einem Bewegungsereignis beginnt eine Wartezeit mit der angegebenen Dauer. Während der Ruhezeit werden keine Bewegungsereignisse ausgelöst.
- Zone für Bewegungserkennung: Vom Nutzer konfigurierte Zone, in der die Bewegungserkennung ausgeführt werden soll. (Wird in einem späteren Abschnitt erläutert)
Bewegungsempfindlichkeit
Verwenden Sie das Flag motion_detection_sensitivity
im vaictl-Befehl.
String. Standardmedium. Sie haben die Wahl zwischen „Niedrig“, „Mittel“ und „Hoch“.
Je höher die Empfindlichkeit der Bewegungserkennung ist, desto empfindlicher ist sie gegenüber Geräuschen und kleineren Bewegungen. Diese Einstellung wird für Umgebungen empfohlen, in denen sich kleinere bewegte Objekte (z. B. Personen in der Ferne) befinden und die Beleuchtung stabil ist.
Eine niedrige Empfindlichkeit ist jedoch weniger anfällig für Lichteinflüsse. Diese Einstellung eignet sich hervorragend für Umgebungen mit stärkeren Lichteinflüssen, z. B. im Freien, und für eine niedrigere Videoqualität, bei der es möglicherweise mehr Geräusche gibt. Da diese Einstellung die aggressivste Filterung ist, werden möglicherweise Bewegungen kleiner Objekte ignoriert.
Mindestdauer des Ereignisses
Verwenden Sie das Flag min_event_length_in_seconds
im Befehl „vaictl“.
Ganzzahl. Standard: 10 Sekunden. Der zulässige Bereich liegt zwischen 0 und 3.600 Sekunden.
Die Mindestdauer von Videos mit Bewegungsereignissen, die geparst werden, sobald ein Bewegungsereignissegment im Frame erkannt wurde.
Lookback-Window
Verwenden Sie das Flag look_back_window_in_seconds
im Befehl „vaictl“.
Ganzzahl. Standardeinstellung: 3 Sekunden. Der zulässige Bereich liegt zwischen 0 und 3.600 Sekunden.
Das Lookback-Window ist die Dauer im Cache, bevor ein Bewegungsereignis erkannt wird. Das ist hilfreich, wenn wir wissen möchten, was einige Sekunden vor der Erkennung von Bewegungsereignissen im Frame passiert.
Wartezeit
Verwenden Sie das Flag cool_down_period_in_seconds
im Befehl „vaictl“.
Ganzzahl. Standardeinstellung: 300 Sekunden. Der zulässige Bereich liegt zwischen 0 und 3.600 Sekunden.
Die Wartezeit gibt an, wie lange die Bewegungserkennung nach einem Bewegungsereignis pausiert wird. Während der Wartezeit werden keine Berechnungen zur Bewegungserkennung ausgeführt.
4. Beispiel für einen einfachen Bewegungsfilter
Vaictl SDK-Handbuch
Verwenden Sie den folgenden Befehl, um die manuelle vaictl
für den Eingabestream mit Bewegungsfilter zu prüfen.
vaictl send video-file applying motion-filter -h
Beispielvideo vorbereiten
- Mit dem folgenden gsutil cp-Befehl können Sie ein Beispielvideo kopieren. Ersetzen Sie die folgende Variable:
- QUELLE: 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 .
Umgebungsvariablen vorbereiten
Legen Sie die folgenden Umgebungsvariablen fest, um die bereitgestellte Befehlsvorlage zu verwenden.
vaictl-Variablen
- 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. Dateidaten werden in einer Schleife wiedergegeben, um Streaming zu simulieren.
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1
Variablen für Bewegungsfilter
- MOTION_SENSITIVITY: Gibt an, wie empfindlich die Bewegungserkennung ist.
- MIN_EVENT_LENGTH: Mindestlänge der Bewegungsereignisse.
- LOOK_BACK_WINDOW: Die Dauer, die vor der ersten Bewegung in einem Bewegungsereignis erfasst werden soll.
- COOL_DOWN_PERIOD: Die Zeitspanne, in der die Bewegungserkennung nach einem Bewegungsereignis pausiert wird.
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
Befehl für Bewegungsfilter vorbereiten
Es gibt zwei Möglichkeiten, den Bewegungsfilter mit dem Eingabestream zu verwenden. Die erste Option besteht darin, die Bewegungsereignisse an einen Stream in der Cloud Console zu senden. Die zweite Option besteht darin, die Bewegungsereignisse an den lokalen Speicher zu senden.
Ergebnisse an die Cloud Console senden
Sie können vaictl verwenden, um die ausgegebenen Videodaten an die Cloud Console zu 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 in den Namen des Streams
motion-detection-stream
ein. - Geben Sie in das Feld „Region“ den Wert
us-central1
ein. - Klicken Sie auf „Registrieren“.
Ergebnisse an Stream senden
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.
INPUT_VIDEO=street_vehicles_people.mp4 vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to streams motion-detection-stream --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.
Ergebnisse an den lokalen Speicher senden
Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt.
Fügen Sie nohup
am Anfang und &
am Ende hinzu, um einen Hintergrundjob zu erstellen.
INPUT_VIDEO=street_vehicles_people.mp4 OUTPUT_PATH=<path_to_store_motion_events_on_local_disk> nohup vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
5. Zone für Bewegungserkennung
In diesem Abschnitt erfahren Sie mehr über die Verwendung und Konfiguration von Bewegungserkennungszonen. Der Bereich dient dazu, die Bewegungserkennung zu verbessern, indem Bewegungen aus Bereichen ausgeblendet werden, die dich nicht interessieren.
Es gibt zwei Arten von Bewegungserkennungszonen: (1) Positive Zonen, in denen die Bewegungserkennung nur im annotierten Bereich ausgeführt wird, und (2) negative Zonen, in denen Bewegungen im annotierten Bereich ignoriert werden.
Zonenhinweis
Verwenden Sie das Flag zone_annotation
im vaictl-Befehl, um Koordinaten für Zonenpolygone einzugeben.
String. Standardeinstellung für Zonenanmerkung leer.
Die Zonenbeschriftung ist ein String, den der Nutzer eingibt, um die Zonen im Frame anzugeben, die er ausblenden oder auf die er den Fokus legen möchte. Um die Zone zu annotieren, muss der Nutzer die Bildkoordinaten der X- und Y-Achse für jeden Knoten in der Zone angeben. Eine Zone muss mindestens drei Knoten haben, um ein Polygon zu bilden. Ein Frame kann mehrere Bereiche umfassen. Wenn sich die Zonen überschneiden, wird der von beiden Zonen abgedeckte Bereich weiterhin abgedeckt.
Die Zonenbeschriftung hat eine bestimmte Eingabesyntax.
- Wenn Sie einen einzelnen Knoten kennzeichnen möchten, verwenden Sie
:
, um die x- und y-Achse einer Bildkoordination zu verbinden. Ein Knoten mit der Bezeichnung(0,0)
in der oberen linken Ecke wird beispielsweise als0:0
dargestellt. - Wenn Sie alle Knoten in einer Zone darstellen möchten, verbinden Sie sie mit
;
. Eine Zone mit den Knoten(0,0)
,(100,0)
,(100,100)
und(0, 100)
wird beispielsweise als0:0;100:0;100:100;0:100
bezeichnet. Geben Sie die Knoten immer als Verbindungsknoten nebeneinander an. Die Reihenfolge kann sowohl im Uhrzeigersinn als auch gegen den Uhrzeigersinn erfolgen.
*Eine quadratische Zone mit vier Knoten.
*Eine Dreieckszone mit drei Knoten.
- Wenn Sie mehrere Zonen in einem einzigen Frame angeben möchten, verbinden Sie verschiedene Zonen mit
-
. Wenn wir beispielsweise sowohl(0,0)
,(100,0)
,(100,100)
,(0,100)
als auch(120,120)
,(110,150)
und(200,160)
eingeben möchten, lautet die Annotation der Eingabezone0:0;100:0;100:100;0:100-120:120;110:150;200:160
.
*Zwei Zonen innerhalb eines Frames.
Es gibt einige Onlinetools, mit denen Sie Koordinaten aus Bildern ermitteln können. Siehe z. B. Wolfram – Koordinaten aus Bildern abrufen.
Annotierte Zone ausschließen
Verwenden Sie das Flag exclude_annotated_zone
im vaictl-Befehl, um die Bewegungserkennung innerhalb oder außerhalb einer Zone zu konfigurieren.
: Boolesch. Standardeinstellung: false.
„Annotierten Bereich ausschließen“ ist eine boolesche Eingabe vom Nutzer, die angibt, ob der Nutzer den mit Anmerkungen versehenen Bereich bei der Bewegungserkennung ausschließen möchte.
- Wenn
true
festgelegt ist, wirkt sich die annotierte Zone als Negativzone aus. Bewegungen in den annotierten Zonen werden nicht erkannt.
*Die Bewegungserkennung wird nur außerhalb der Eingabezonen ausgeführt.
- Wenn dieser Wert auf „false“ festgelegt ist, wird die Zone als positive Zone behandelt, auf die sich die Bewegungserkennung konzentriert.
*Die Bewegungserkennung wird nur in den Eingabezonen ausgeführt.
6. Beispiel für einen Bewegungsfilter mit Bewegungserkennungszone
In diesem Beispiel verwenden wir ein Video, bei dem sich im Vordergrund ständig ein Baum bewegt. Bei der Standardeinstellung des Bewegungsfilters wird im Video nur ein Bewegungsereignis mit der Dauer des Originalvideos generiert, da der Bewegungsfilter den bewegten Baum als „während des gesamten Videos ständig in Bewegung“ registriert. Mithilfe der Bewegungserkennungszone können wir die Bewegungen des Baums jedoch richtig ausblenden und uns auf die Bewegungen von Autos und Fußgängern konzentrieren.
Videovorbereitung
Das Beispielvideo (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) enthält Bäume, Autos und Fußgänger von www.changedetection.net.
Video-Credits: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad und P. Ishwar, changedetection.net: A new change detection benchmark dataset, in Proc. IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012, Providence, RI, 16-21 Jun., 2012
Umgebungsvariablen vorbereiten
Google Cloud-Projektvariablen
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
Grundlegende Konfiguration des Bewegungsfilters.
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
Konfiguration der Zonen für die Bewegungserkennung
Wählen Sie unten eine Option aus, um verschiedene Verwendungsmöglichkeiten für die Zone mit Bewegungserkennung zu sehen.
Schließen Sie den Baum für die Bewegungserkennung aus.
export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150" export EXCLUDE_ANNOTATED_ZONE=true
*Die Bewegungserkennung wird nur außerhalb der Eingabezonen ausgeführt.
Bewegungserkennung auf die Straße ausrichten
export ZONE_ANNOTATION="0:300;780:300;780:480;0:480" export EXCLUDE_ANNOTATED_ZONE=false
*Die Bewegungserkennung wird nur außerhalb der Eingabezonen ausgeführt.
Videostream mit Bewegungsfilter senden
Bewegungsereignisse an die Cloud Console senden
Mit vaictl können Sie die Ausgabevideodaten in die Cloud Console streamen. Aktivieren Sie zuerst die Vision AI API in der Cloud Console.
Neuen Stream registrieren
- Klicken Sie in Vertex AI Vision im linken Bereich auf den Tab „Streams“.
- Klicken Sie auf „Registrieren“.
- Geben Sie in den Namen des Streams
motion-detection-stream
ein. - Geben Sie in das Feld „Region“ den Wert
us-central1
ein. - Klicken Sie auf „Registrieren“.
Ergebnisse an Stream senden
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.
vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to streams motion-detection-stream --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.
Ergebnisse an den lokalen Speicher senden
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.
OUTPUT_PATH=<path_to_store_motion_events> vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=$ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
7. Glückwunsch
Sie haben das Lab erfolgreich abgeschlossen.
Aufräumen
Wenn Sie vermeiden möchten, dass Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden, beenden Sie den vaictl SDK-Vorgang über die Befehlszeile mit ctrl
+ z
.
Ressourcen
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/motion-filtering-model
https://cloud.google.com/vision-ai/docs/create-manage-streams
Feedback
Hier klicken, um Feedback zu geben