1. Ziele
Übersicht
In diesem Codelab wird eine End-to-End-Anwendung für Vertex AI Vision erstellt, um das Senden von Videos mit Bewegungsfilterung zu demonstrieren. In dieser Anleitung werden die verschiedenen Parameter in der Konfiguration des Bewegungsfilters beschrieben:
- Empfindlichkeit der Bewegungserkennung
- Minimale Ereignisdauer
- Lookback-Window
- Wartezeit
- Zone für die Bewegungserkennung
Lerninhalte
- Videos für das Streaming aufnehmen
- Verschiedene Funktionen des Bewegungsfilters und ihre Verwendung
- Wo kann ich die Statistiken des Bewegungsfilters aufrufen?
- Einstellung basierend auf Ihrem 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 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
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. 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-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.
- 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.
Dienstkontoschlüssel erstellen:
- 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.
† Rolle 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. Durch Anpassen der Bewegungsempfindlichkeit, der Mindestlänge von Ereignissen, des Rückblickszeitraums, der Wartezeit und der Bewegungserkennungszone können Nutzer den Filter an ihre eigenen Bedürfnisse anpassen.
Konfiguration des Bewegungsfilters
Im Bewegungsfilter stehen 5 Konfigurationen zur Anpassung zur Verfügung.
- Bewegungsempfindlichkeit: Wie empfindlich soll die Bewegungserkennung sein?
- Mindestlänge von Ereignissen: Die Mindestlänge, die ein Bewegungserkennungsvorgang haben muss, damit er aufgezeichnet wird.
- Lookback-Window: Wie lange vor dem Erkennen eines Bewegungsereignisses soll die Videoaufzeichnung beginnen?
- Wartezeit: Nachdem ein Bewegungsereignis beendet wurde, beginnt eine Wartezeit mit der angegebenen Dauer. Während der Abkühlphase werden keine Bewegungsereignisse ausgelöst.
- Zone für Bewegungserkennung: Vom Nutzer konfigurierte Zone, in der die Bewegungserkennung ausgeführt werden soll. (Wird im nächsten Abschnitt näher erläutert)
Bewegungsempfindlichkeit
Verwenden Sie das Flag motion_detection_sensitivity im vaictl-Befehl.
String. Standardmedium. Sie können zwischen „Niedrig“, „Mittel“ und „Hoch“ wählen.
Je höher die Empfindlichkeit der Bewegungserkennung ist, desto empfindlicher reagiert sie auf Rauschen und kleinere Bewegungen. Diese Einstellung wird für Umgebungen mit kleineren sich bewegenden Objekten (z. B. Personen aus der Ferne) und stabiler Beleuchtung empfohlen.
Andererseits ist eine niedrige Empfindlichkeit weniger anfällig für Störungen durch die Beleuchtung. Diese Einstellung eignet sich ideal für Umgebungen mit mehr Lichtstörungen, z. B. im Freien, und für eine niedrigere Videoqualität, bei der mehr Rauschen auftreten kann. Da diese Einstellung die aggressivste Filterung von allen ist, werden Bewegungen von kleinen Objekten möglicherweise ignoriert.
Minimale Ereignisdauer
Verwenden Sie das Flag min_event_length_in_seconds im vaictl-Befehl.
Ganzzahl. Standardwert: 10 Sekunden. Der Bereich liegt zwischen 0 Sekunden und 3.600 Sekunden.
Die Mindestdauer von Videos mit Bewegungsereignissen, die analysiert werden, sobald ein Segment mit einem Bewegungsereignis im Frame erkannt wurde.
Lookback-Window
Verwenden Sie das Flag look_back_window_in_seconds im vaictl-Befehl.
Ganzzahl. Standardmäßig 3 Sekunden. Der Bereich liegt zwischen 0 Sekunden und 3.600 Sekunden.
Das Lookback-Fenster ist die Dauer, die im Cache gespeichert wird, bevor ein Bewegungsereignis erkannt wird. Das ist nützlich, wenn Sie sehen möchten, was im Bild einige Sekunden vor dem Erkennen von Bewegungsereignissen passiert.
Wartezeit
Verwenden Sie das Flag cool_down_period_in_seconds im vaictl-Befehl.
Ganzzahl. Standardmäßig 300 Sekunden. Der Bereich liegt zwischen 0 Sekunden und 3.600 Sekunden.
Der Zeitraum für die Inaktivität gibt an, wie lange die Bewegungserkennung pausiert wird, nachdem ein Bewegungsereignis erfasst wurde. Während der Wartezeit werden keine Berechnungen zur Erkennung von Bewegungen ausgeführt.
4. Einfaches Beispiel für einen Bewegungsfilter
Vaictl SDK Manual
Verwenden Sie den folgenden Befehl, um das vaictl-Handbuch für den Eingabestream mit Bewegungsfilter aufzurufen.
vaictl send video-file applying motion-filter -h
Beispielvideo vorbereiten
- Sie können ein Beispielvideo mit dem folgenden gsutil cp-Befehl 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) 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. Wiederholt Dateidaten, 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 sein soll.
- MIN_EVENT_LENGTH: Mindestlänge der Bewegungserkennung.
- LOOK_BACK_WINDOW: Die Dauer, die vor der ersten Bewegung in einem Bewegungsereignis erfasst werden soll.
- COOL_DOWN_PERIOD: Der Zeitraum, in dem die Bewegungserkennung pausiert wird, nachdem ein Bewegungsereignis aufgezeichnet 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 Bewegungserkennung an einen Stream in der Cloud Console zu senden. Die zweite Option besteht darin, die Bewegungserkennung an den lokalen Speicher zu senden.
Ergebnisse 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 im linken Bereich von Vertex AI Vision auf den Tab „Streams“.
- Klicken Sie auf „Registrieren“.
- Geben Sie als Streamname
motion-detection-streamein. - Geben Sie in das Feld „Region“
us-central1ein. - Klicken Sie auf „Registrieren“.
Ergebnisse an Stream senden
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 fortgesetzt wird.
Fügen Sie nohup am Anfang und & am Ende hinzu, um den Vorgang als Hintergrundjob auszuführen.
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, 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.
Ergebnisse an den lokalen Speicher senden
Mit diesem Befehl wird eine Videodatei in einen Stream übertragen.
Fügen Sie nohup am Anfang und & am Ende hinzu, um den Vorgang als Hintergrundjob auszuführen.
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 die Bewegungserkennung
In diesem Abschnitt erfahren Sie, wie Sie die Zone für die Bewegungserkennung verwenden und konfigurieren. Die Zone soll die Bewegungserkennung verbessern, indem Bewegungen aus Bereichen, die Sie nicht interessieren, ausgeblendet werden.
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 die Bewegungserkennung alle Bewegungen im annotierten Bereich ignoriert.
Zonenanmerkung
Verwenden Sie das Flag zone_annotation im vaictl-Befehl, um Koordinaten für Zonenpolygone einzugeben.
String. Standardmäßig leer für Zonenanmerkungen.
Die Zonenanmerkung ist eine vom Nutzer eingegebene Zeichenfolge, die die Zonen im Frame angibt, die der Nutzer ausblenden oder auf die er sich konzentrieren möchte. Um die Zone zu annotieren, muss der Nutzer für jeden Knoten in der Zone die Bildkoordinaten der X- und Y-Achse angeben. Eine Zone muss mindestens drei Knoten haben, um ein Polygon zu bilden. Ein Frame kann mehrere Zonen enthalten. Wenn sich die Zonen überschneiden, wird der Bereich, der von beiden Zonen abgedeckt wird, weiterhin abgedeckt.
Für die Zonenanmerkung muss eine bestimmte Eingabesyntax eingehalten werden.
- Verwenden Sie
:, um einen einzelnen Knoten zu kennzeichnen und die X- und Y-Achse einer Bildkoordinate zu verbinden. Ein Knoten mit dem Namen(0,0)in der oberen linken Ecke wird beispielsweise als0:0bezeichnet. - Verwenden Sie
;, um alle Knoten in einer einzelnen Zone zu kennzeichnen. Für eine Zone mit Knoten vom Typ(0,0),(100,0),(100,100)und(0, 100)wird die Zone beispielsweise als0:0;100:0;100:100;0:100bezeichnet. Geben Sie die Knoten immer als benachbarte Verbindungsknoten ein. Die Reihenfolge kann sowohl im Uhrzeigersinn als auch gegen den Uhrzeigersinn erfolgen.
*Eine quadratische Zone mit vier Knoten.
*Eine dreieckige Zone mit drei Knoten.
- Wenn Sie mehrere Zonen in einem einzelnen Frame angeben möchten, verwenden Sie
-, um verschiedene Zonen zu verbinden. Wenn wir beispielsweise sowohl(0,0),(100,0),(100,100),(0,100)und(120,120)als auch(110,150),(200,160)eingeben möchten, lautet die Anmerkung für die Eingabezone0:0;100:0;100:100;0:100-120:120;110:150;200:160.
*Zwei Zonen in einem Rahmen.
Es gibt einige Online-Tools, mit denen Sie die Koordinaten aus einem Bild abrufen können. Ein Beispiel finden Sie unter Wolfram – Get Coordinates from Image.
Annotierte Zone ausschließen
Verwenden Sie das Flag exclude_annotated_zone im vaictl-Befehl, um die Bewegungserkennung in oder außerhalb eines Bereichs zu konfigurieren.
Boolesch. Standardeinstellung: false.
„Annotated zone“ (Annotierter Bereich) ist eine boolesche Eingabe des Nutzers, die angibt, ob der annotierte Bereich bei der Bewegungserkennung ausgeschlossen werden soll.
- Wenn
truefestgelegt ist, fungiert die annotierte Zone als negative Zone. Bewegungen in den annotierten Zonen werden nicht erkannt.
*Nur Bewegungserkennung außerhalb der Eingabebereiche ausführen.
- Wenn der Wert auf „false“ gesetzt ist, fungiert die Zone als positive Zone, in der die Bewegungserkennung stattfindet.
*Bewegungserkennung nur in den Eingabebereichen ausführen.
6. Beispiel für Bewegungsfilter mit Bewegungserkennungszone
In diesem Beispiel verwenden wir ein Video, in dem sich im Vordergrund ständig ein Baum bewegt. Bei der Einstellung „Regelmäßige Bewegung“ wird im Video nur ein Bewegungsereignis mit der Dauer des Originalvideos erzeugt, da der Bewegungsfilter den sich bewegenden Baum als „ständig in Bewegung während des gesamten Videos“ registriert. Mithilfe der Bewegungserkennungszone können wir jedoch die Bewegung des Baums richtig ausblenden und uns auf die Bewegung von Autos und Fußgängern konzentrieren.
Video wird vorbereitet
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
Variablen für Google Cloud-Projekte.
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 Zone für die Bewegungserkennung
Wählen Sie unten eine Option aus, um verschiedene Anwendungsfälle für die Bewegungserkennungszone zu sehen.
Schließe den Baum von der Bewegungserkennung aus.
export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150" export EXCLUDE_ANNOTATED_ZONE=true
*Bewegungserkennung nur außerhalb der Eingabebereiche ausführen.
Bewegungserkennung auf die Straße konzentrieren
export ZONE_ANNOTATION="0:300;780:300;780:480;0:480" export EXCLUDE_ANNOTATED_ZONE=false
*Bewegungserkennung nur außerhalb der Eingabebereiche ausführen.
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 im linken Bereich von Vertex AI Vision auf den Tab „Streams“.
- Klicken Sie auf „Registrieren“.
- Geben Sie als Streamname
motion-detection-streamein. - Geben Sie in das Feld „Region“
us-central1ein. - Klicken Sie auf „Registrieren“.
Ergebnisse an Stream senden
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 fortgesetzt wird.
Fügen Sie nohup am Anfang und & am Ende hinzu, um den Vorgang als Hintergrundjob auszuführen.
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, nachdem der vaictl-Aufnahmevorgang gestartet wurde.
Nachdem die Streamaufnahme 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.
Ergebnisse an den lokalen Speicher senden
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 fortgesetzt wird.
Fügen Sie nohup am Anfang und & am Ende hinzu, um den Vorgang als Hintergrundjob auszuführen.
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
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