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 werden die verschiedenen Parameter in der Konfiguration des Bewegungsfilters erläutert:
- Empfindlichkeit der Bewegungserkennung
- Minimale Ereignisdauer
- Lookback-Window
- Abkühlzeit
- Bewegungserkennungsbereich
Aufgaben in diesem Lab
- Videos für das Streaming aufnehmen
- Verschiedene Funktionen des Bewegungsfilters und ihre Verwendung
- Statistiken des Bewegungsfilters überprüfen
- So kannst du die Einstellung für dein Video anpassen
2. Vorbereitung
- Wählen Sie in der Google Cloud Console auf der Seite für die 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 damit verknüpften Ressourcen entfernen. Zur Projektauswahl
- Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Hier erfahren Sie, wie Sie prüfen, ob die Abrechnung für ein Projekt aktiviert ist.
- Aktivieren Sie die Compute Engine API und die Vision AI API. APIs aktivieren
Dienstkonto erstellen:
- 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. In der Google Cloud Console wird das Feld Dienstkonto-ID auf Grundlage dieses Namens ausgefüllt. Geben Sie im Feld Beschreibung des Dienstkontos eine Beschreibung ein. Beispiel: Dienstkonto für Kurzanleitung.
- Klicken Sie auf Erstellen und fortfahren.
- Weisen Sie Ihrem Dienstkonto die folgenden Rollen zu, um Zugriff auf Ihr Projekt zu ermöglichen: Vision AI > Vision AI-Bearbeiter, Compute Engine > Compute-Instanzadministrator (Beta), Speicher > Storage Object Viewer † Wählen Sie aus 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 wirkt sich darauf aus, 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 Rollen „Inhaber“, „Bearbeiter“ oder „Betrachter“ nicht zuweisen. Weisen Sie stattdessen eine vordefinierte Rolle oder benutzerdefinierte Rolle zu, 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.
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.
† Rolle nur erforderlich, wenn Sie eine Beispielvideodatei aus einem Cloud Storage-Bucket kopieren.
3. Bewegungsfilter
Mit dem Bewegungsfilter werden Bewegungen und Produktvideosegmente erfasst, die Bewegungsereignisse enthalten. Über die Anpassung der Bewegungsempfindlichkeit, der Mindestereignislänge, des Lookback-Windows, der Wartezeit und des Bewegungserkennungsbereichs können Nutzer die Filterbasis nach Bedarf konfigurieren.
Konfiguration des Bewegungsfilters
Der Bewegungsfilter kann in fünf Konfigurationen angepasst werden.
- Bewegungsempfindlichkeit: Hier legen Sie fest, wie empfindlich eine Bewegung ausgelöst werden soll.
- Minimale Ereignislänge: Die Mindestlänge, die ein Bewegungsereignis erfasst wird.
- Lookback-Window: Gibt an, wie lange die Videoaufzeichnung starten soll, bevor ein Bewegungsereignis erkannt wird.
- Wartezeit: Nach dem Ende eines Bewegungsereignisses findet eine Wartezeit mit der festgelegten Dauer statt. Während der Wartezeit werden keine Bewegungsereignisse ausgelöst.
- Bewegungserkennungsbereich: vom Nutzer konfigurierter Bereich, um festzulegen, wo die Bewegungserkennung ausgeführt werden soll. (wird im späteren Abschnitt ausführlicher 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 reagieren sie auf Geräusche und kleinere Bewegungen. Diese Einstellung wird für Einstellungen empfohlen, in denen sich kleinere bewegliche Objekte (z. B. Personen aus der Ferne) und eine stabile Beleuchtung befinden.
Andererseits ist die niedrige Empfindlichkeit weniger empfindlich auf Lichtstörungen. Diese Einstellung ist ideal, wenn es bei der Beleuchtung zu Störungen kommt, z. B. in einer Umgebung im Freien, und für eine geringere Videoqualität, da hier möglicherweise mehr Geräusche zu hören sind. Da diese Einstellung die aggressivste Filterung ist, könnten Bewegungen von kleinen Objekten ignoriert werden.
Minimale Ereignisdauer
Verwenden Sie das Flag min_event_length_in_seconds
im vaictl-Befehl.
Ganzzahl. Standardeinstellung: 10 Sekunden. Der Wert kann zwischen 0 und 3.600 Sekunden liegen.
Die Mindestdauer von Videos mit Bewegungsereignissen, die geparst werden, nachdem ein Bewegungsereignissegment im Frame erkannt wurde.
Lookback-Window
Verwenden Sie das Flag look_back_window_in_seconds
im vaictl-Befehl.
Ganzzahl. Standardeinstellung: 3 Sekunden. Der Wert kann zwischen 0 und 3.600 Sekunden liegen.
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 dem Erkennen von Bewegungsereignissen im Frame passiert.
Wartezeit
Verwenden Sie das Flag cool_down_period_in_seconds
im vaictl-Befehl.
Ganzzahl. Standardeinstellung: 300 Sekunden. Der Wert kann zwischen 0 und 3.600 Sekunden liegen.
Die Abkühlzeit ist die Dauer, über die die Bewegungserkennung pausiert wird, nachdem ein Bewegungsereignis erfasst wurde. Während der Wartezeit werden keine Berechnungen zur Bewegungserkennung durchgeführt.
4. Beispiel für einfachen Bewegungsfilter
Vaictl SDK-Handbuch
Mit dem folgenden Befehl können Sie die vaictl
-manuelle Eingabe für einen Eingabestream mit Bewegungsfilter 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:
- SOURCE: 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 Cloud-Standorte.
- LOCAL_FILE: Der Dateiname einer lokalen Videodatei. Beispiel: street_vehicles_people.mp4.
- –loop-Flag: 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
Variablen für Bewegungsfilter
- MOTION_SENSITIVITY: Wie empfindlich die Bewegungserkennung ist.
- MIN_EVENT_LENGTH: Mindestlänge der Bewegungsereignisse.
- LOOK_BACK_WINDOW: Die Dauer, die vor der ersten Bewegung bei einem Bewegungsereignis erfasst werden soll.
- COOL_DOWN_PERIOD: Der Zeitraum, in dem die Bewegungserkennung pausiert wird, nachdem ein Bewegungsereignis erfasst wurde.
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 Möglichkeit 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 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 der Region "
us-central1
" ein. - Auf „Registrieren“ klicken
Ergebnisse werden an Stream gesendet
Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt. Mit dem Flag „-loop“ wird das Video so lange in den Stream aufgenommen, 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 den Job als 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
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.
Ergebnisse an lokalen Speicher senden
Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt.
Fügen Sie nohup
am Anfang und &
am Ende hinzu, um den Job als 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. Bewegungserkennungsbereich
In diesem Abschnitt erfahren Sie mehr über die Verwendung und Konfiguration des Bereichs für die Bewegungserkennung. Der Bereich dient dazu, die Bewegungserkennung zu verbessern, indem Bewegungen aus Bereichen ausgeblendet werden, die dich nicht interessieren.
Es gibt zwei Arten von Bewegungserkennungsbereichen: (1) positive Bereiche, in denen die Bewegungserkennung nur in dem entsprechenden Bereich ausgeführt wird: (2) Negativbereiche, in denen die Bewegungserkennung Bewegungen im angegebenen Bereich ignoriert.
Zonenanmerkung
Verwenden Sie das Flag zone_annotation
im vaictl-Befehl, um Koordinaten für Zonenpolygone einzugeben.String
. Standardeinstellung für Zonenanmerkung leer.
Die Zonenanmerkung ist eine vom Nutzer eingegebene Zeichenfolge, die die Zonen im Frame angibt, die der Nutzer aus- oder einblenden möchte. Um die Zone zu annotieren, muss der Benutzer die Bildkoordinaten der x- und der 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 dennoch abgedeckt.
Für Zonenanmerkungen gilt eine bestimmte Eingabesyntax.
- Wenn Sie einen einzelnen Knoten kennzeichnen möchten, verwenden Sie
:
, um die x- und y-Achse einer Bildkoordination zu verbinden. Beispielsweise wird der Knoten(0,0)
in der oberen linken Ecke als0:0
bezeichnet. - Verwenden Sie
;
, um die Knoten zu verbinden, um alle Knoten in einer einzelnen Zone zu kennzeichnen. Für eine Zone mit den Knoten(0,0)
,(100,0)
,(100,100)
und(0, 100)
wird die Zone beispielsweise als0:0;100:0;100:100;0:100
angegeben. 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.
- Verwende
-
, um mehrere Zonen in einem einzelnen Frame zu kennzeichnen. Wenn wir beispielsweise sowohl(0,0)
,(100,0)
,(100,100)
,(0,100)
als auch(120,120)
,(110,150)
,(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.
Zum Ermitteln von Koordinaten aus Bildern sind einige Online-Tools verfügbar, mit denen Sie die Koordinaten ermitteln können. Ein Beispiel finden Sie unter Wolfram – Koordinaten aus Bild 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.
: Boolescher Wert. 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 der Wert auf
true
gesetzt ist, fungiert die mit Anmerkungen versehene Zone als negative Zone. Bewegungen in den mit Anmerkungen versehenen Bereichen werden nicht erkannt.
*Die Bewegungserkennung darf nur außerhalb der Eingabebereiche ausgeführt werden.
- Wird die Richtlinie auf „false“ gesetzt, fungiert der Bereich als positiver Bereich, in dem die Bewegungserkennung den Schwerpunkt legt.
*Bewegungserkennung nur in den Eingabebereichen ausführen.
6. Beispiel für einen Bewegungsfilter mit Bewegungserkennungsbereich
In diesem Beispiel verwenden wir ein Video, bei dem sich im Vordergrund ständig ein Baum bewegt. Bei der regulären Bewegungsfiltereinstellung erzeugt das Video nur ein Bewegungsereignis mit der Dauer des Originalvideos, da der Bewegungsfilter den sich bewegenden Baum als "sich ständig im Video bewegen" erfasst. Mithilfe des Bewegungserkennungsbereichs können wir jedoch die Bewegung des Baumes ordnungsgemäß verbergen und die Bewegungen von Autos und Fußgängern im Blick behalten.
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.
Videonachweis: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad und P. Ishwar, changedetection.net: A new change detect benchmark dataset in der Proc. IEEE Workshop on Change Detection (CDW-2012), CVPR-2012, Providence, Rhode, 16.–21. Juni, 2012
Vorbereitung von Umgebungsvariablen
Variablen des Google Cloud-Projekts.
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 Bewegungserkennungszone.
Wählen Sie eine der folgenden Optionen aus, um mehr über die verschiedenen Nutzungsarten des Bewegungserkennungsbereichs zu erfahren.
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 darf nur außerhalb der Eingabebereiche ausgeführt werden.
Die Bewegungserkennung auf die Straße fokussieren.
export ZONE_ANNOTATION="0:300;780:300;780:480;0:480" export EXCLUDE_ANNOTATED_ZONE=false
*Die Bewegungserkennung darf nur außerhalb der Eingabebereiche ausgeführt werden.
Videostream mit Bewegungsfilter senden
Bewegungsereignisse 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 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 der Region "
us-central1
" ein. - Auf „Registrieren“ klicken
Ergebnisse werden an Stream gesendet
Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt. Mit dem Flag „-loop“ wird das Video so lange in den Stream aufgenommen, 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 den Job als 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
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.
Ergebnisse an lokalen Speicher senden
Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt. Mit dem Flag „-loop“ wird das Video so lange in den Stream aufgenommen, 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 den Job als 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 abgeschlossen.
Aufräumen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, beenden Sie den Vorgang des vaictl SDK ü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
Klicken Sie hier, um Feedback zu geben.