Filtr Vertex AI Vision Motion

1. Cele

Omówienie

W tym module skupimy się na tworzeniu kompleksowej aplikacji Vertex AI Vision, aby zademonstrować wysyłanie filmów z funkcją filtrowania ruchu. W tym samouczku omówimy różne parametry konfiguracji filtra ruchu:

  • Czułość wykrywania ruchu
  • Minimalny czas trwania zdarzenia
  • Okres ważności
  • Czas na wyciszenie
  • Strefa wykrywania ruchu

Czego się nauczysz

  • Jak przesyłać filmy do transmisji strumieniowej
  • Różne funkcje dostępne w filtrze ruchu i sposób ich używania
  • Gdzie sprawdzić statystyki filtra ruchu
  • Jak dostosować ustawienia do filmu

2. Zanim zaczniesz

  1. W konsoli Google Cloud na stronie selektora projektów wybierz lub utwórz projekt w chmurze Google Cloud. Uwaga: jeśli zasoby utworzone podczas wykonywania tej procedury nie będą Ci później potrzebne, nie wybieraj istniejącego projektu, tylko utwórz nowy. Po jej zakończeniu możesz usunąć projekt wraz ze wszystkimi zasobami, które są z nim powiązane. Otwórz selektor projektów
  2. Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
  3. Włącz interfejsy Compute Engine i Vision AI API. Włączanie interfejsów API

Utwórz konto usługi:

  1. W konsoli Google Cloud otwórz stronę Utwórz konto usługi. Otwórz stronę Utwórz konto usługi
  2. Wybierz projekt.
  3. W polu Nazwa konta usługi wpisz nazwę. Konsola Google Cloud wypełni pole Identyfikator konta usługi na podstawie tej nazwy. W polu Opis konta usługi wpisz opis. Na przykład Konto usługi na potrzeby krótkiego wprowadzenia.
  4. Kliknij Utwórz i kontynuuj.
  5. Aby zapewnić dostęp do projektu, przypisz do konta usługi te role: Vision AI > Edytujący Vision AI, Compute Engine > Administrator instancji Compute (beta), Storage > Wyświetlający obiekty Storage † . Na liście Wybierz rolę wybierz rolę. Aby dodać kolejne role, kliknij Dodaj kolejną rolę i dodaj każdą z nich. Uwaga: pole Rola określa, do których zasobów w projekcie konto usługi może mieć dostęp. Możesz później cofnąć te role lub przyznać dodatkowe. W środowiskach produkcyjnych nie przyznawaj ról Właściciel, Edytujący ani Wyświetlający. Zamiast tego przyznaj gotową rolę lub rolę niestandardową, która spełnia Twoje potrzeby.
  6. Kliknij Dalej.
  7. Aby zakończyć tworzenie konta usługi, kliknij Gotowe. Nie zamykaj okna przeglądarki. Będzie Ci potrzebna w następnym kroku.

Utwórz klucz konta usługi:

  1. W konsoli Google Cloud kliknij adres e-mail utworzonego konta usługi.
  2. Kliknij Klucze.
  3. Kliknij Dodaj klucz, a potem Utwórz nowy klucz.
  4. Kliknij Utwórz. Plik klucza JSON zostanie pobrany na komputer.
  5. Kliknij Zamknij.
  6. Zainstalujzainicjuj interfejs wiersza poleceń Google Cloud.

† Rola jest potrzebna tylko wtedy, gdy kopiujesz przykładowy film z zasobnika Cloud Storage.

3. Filtr ruchu

Filtr ruchu przechwytuje segmenty wideo przedstawiające ruch i produkty, które zawierają zdarzenia związane z ruchem. Dostosowując czułość na ruch, minimalną długość zdarzenia, okres wsteczny, okres oczekiwania i strefę wykrywania ruchu, użytkownik może skonfigurować filtr zgodnie z własnymi potrzebami.

Konfiguracja filtra ruchu

W filtrze ruchu dostępnych jest 5 konfiguracji, które można dostosować.

  1. Czułość wykrywania ruchu: jak czułe powinno być wykrywanie ruchu.
  2. Minimalna długość zdarzenia: minimalna długość zdarzenia ruchu, które zostanie zarejestrowane.
  3. Okres podglądu: jak długo przed wykryciem zdarzenia ruchu ma się rozpocząć nagrywanie filmu.
  4. Okres oczekiwania: po zakończeniu zdarzenia ruchu nastąpi okres oczekiwania o określonym czasie trwania. W okresie oczekiwania zdarzenia ruchu nie będą wywoływane.
  5. Strefa wykrywania ruchu: strefa skonfigurowana przez użytkownika, w której ma działać wykrywanie ruchu. (Szczegółowe informacje znajdziesz w dalszej części)

Czułość wykrywania ruchu

Użyj flagi motion_detection_sensitivity w poleceniu vaictl.
Ciąg znaków. Domyślne medium. Możesz wybrać niski, średni lub wysoki.

Im wyższa czułość wykrywania ruchu, tym większa wrażliwość na szumy i mniejsze ruchy. To ustawienie jest zalecane w przypadku scen, w których występują mniejsze poruszające się obiekty (np. ludzie z daleka) i stabilne oświetlenie.

Z drugiej strony niska czułość jest mniej podatna na zakłócenia oświetlenia. To ustawienie jest idealne, gdy występuje więcej zakłóceń oświetlenia, np. na zewnątrz, oraz w przypadku niższej jakości filmu, w którym może być więcej szumów. To ustawienie jest najbardziej agresywnym filtrowaniem, dlatego może ignorować ruchy małych obiektów.

Minimalny czas trwania zdarzenia

Użyj flagi min_event_length_in_seconds w poleceniu vaictl.
Liczba całkowita. Wartość domyślna to 10 sekund. Zakres od 0 sekund do 3600 sekund.

Minimalny czas trwania filmów ze zdarzeniami ruchu, które będą analizowane po wykryciu w klatce segmentu zdarzenia ruchu.

Okres ważności

Użyj flagi look_back_window_in_seconds w poleceniu vaictl.
Liczba całkowita. Wartość domyślna to 3 sekundy. Zakres od 0 sekund do 3600 sekund.

Okres ważności to czas, przez jaki dane są przechowywane w pamięci podręcznej przed wykryciem zdarzenia ruchu. Jest to przydatne, gdy chcesz zobaczyć, co dzieje się w kadrze kilka sekund przed wykryciem zdarzeń związanych z ruchem.

Okres oczekiwania

Użyj flagi cool_down_period_in_seconds w poleceniu vaictl.
Liczba całkowita. Domyślnie 300 sekund. Zakres od 0 sekund do 3600 sekund.

Okres oczekiwania to czas, przez który wykrywanie ruchu będzie wstrzymane po zarejestrowaniu zdarzenia ruchu. W okresie oczekiwania nie będą przeprowadzane żadne obliczenia w celu wykrycia ruchu.

4. Przykład podstawowego filtra ruchu

Instrukcja pakietu SDK Vaictl

Aby sprawdzić vaictl instrukcję obsługi strumienia wejściowego z filtrem ruchu, użyj tego polecenia.

vaictl send video-file applying motion-filter -h

Przygotuj przykładowy film

  1. Przykładowy film możesz skopiować za pomocą tego polecenia gsutil cp. Zastąp tę zmienną:
  • ŹRÓDŁO: lokalizacja pliku wideo do użycia. Możesz użyć własnego pliku wideo (np. gs://BUCKET_NAME/FILENAME.mp4) lub przykładowego filmu (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(film z ludźmi i pojazdami, źródło).
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Przygotuj zmienne środowiskowe

Aby użyć podanego szablonu polecenia, ustaw poniższe zmienne środowiskowe.

zmienne vaictl

  • PROJECT_ID: identyfikator Twojego projektu Google Cloud.
  • LOCATION_ID: identyfikator lokalizacji. Na przykład us-central1. Więcej informacji znajdziesz w artykule Lokalizacje Google Cloud.
  • LOCAL_FILE: nazwa lokalnego pliku wideo. Na przykład street_vehicles_people.mp4.
  • –loop: opcjonalna flaga. Powtarza dane pliku, aby symulować przesyłanie strumieniowe.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1

Zmienne filtra ruchu

  • MOTION_SENSITIVITY: czułość wykrywania ruchu.
  • MIN_EVENT_LENGTH: minimalna długość zdarzeń związanych z ruchem.
  • LOOK_BACK_WINDOW: czas trwania, który należy zarejestrować przed pierwszym ruchem w zdarzeniu ruchu.
  • COOL_DOWN_PERIOD: okres, w którym wykrywanie ruchu zostanie wstrzymane po zarejestrowaniu zdarzenia ruchu.
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>

Przygotowywanie polecenia filtra ruchu

Filtr ruchu można stosować do strumienia wejściowego na 2 sposoby. Pierwsza opcja to wysyłanie zdarzeń związanych z ruchem do strumienia w konsoli w chmurze. Drugą opcją jest wysyłanie zdarzeń ruchu do pamięci lokalnej.

Wysyłanie wyników do konsoli Cloud

Za pomocą narzędzia vaictl możesz przesyłać strumieniowo dane wyjściowe wideo do konsoli Cloud. Zacznij od aktywowania interfejsu Vision AI API w konsoli Cloud.

Rejestrowanie nowego strumienia

  1. W panelu po lewej stronie Vertex AI Vision kliknij kartę strumieni.
  2. Kliknij Zarejestruj się
  3. W polu Nazwa strumienia wpisz motion-detection-stream.
  4. W polu regionu wpisz us-central1.
  5. Kliknij Zarejestruj.

Wysyłanie wyników do strumienia

To polecenie przesyła strumieniowo plik wideo do strumienia. Jeśli użyjesz flagi –loop, film będzie odtwarzany w pętli w strumieniu, dopóki nie zatrzymasz polecenia. Uruchomimy to polecenie jako zadanie w tle, aby strumieniowanie było ciągłe.

Dodaj znak nohup na początku i & na końcu, aby przekształcić go w zadanie w tle.

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

Od rozpoczęcia operacji vaictl ingest do pojawienia się filmu na panelu może minąć około 100 sekund.

Gdy przesyłanie strumieniowe będzie dostępne, możesz wyświetlić strumień wideo na karcie Strumienie w panelu Vertex AI Vision, wybierając strumień ruchu.

Otwórz kartę Strumienie

Wysyłanie wyników do pamięci lokalnej

To polecenie przesyła strumieniowo plik wideo do strumienia.

Dodaj znak nohup na początku i & na końcu, aby przekształcić go w zadanie w tle.

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. Strefa wykrywania ruchu

W tej sekcji omówimy, jak korzystać ze strefy wykrywania ruchu i jak ją skonfigurować. Strefa ma na celu poprawę wykrywania ruchu poprzez maskowanie ruchu pochodzącego z obszarów, które Cię nie interesują.

Strefa wykrywania ruchu może być dwojakiego rodzaju: (1) strefa pozytywna, w której wykrywanie ruchu działa tylko w oznaczonym obszarze; (2) strefa negatywna, w której wykrywanie ruchu ignoruje wszelkie ruchy w oznaczonym obszarze.

Adnotacja strefy

Użyj flagi zone_annotation w poleceniu vaictl, aby wprowadzić współrzędne wielokątów stref.
Ciąg znaków. Domyślnie puste w przypadku adnotacji dotyczących strefy.

Adnotacja strefy będzie ciągiem znaków wprowadzonym przez użytkownika, oznaczającym strefy w klatce, które użytkownik chce ukryć lub na których chce się skupić. Aby dodać adnotację do strefy, użytkownik musi podać współrzędne obrazu osi X i Y dla każdego węzła w strefie. Aby utworzyć wielokąt, strefa musi mieć co najmniej 3 węzły. W ramce może być wiele stref. Jeśli strefy się pokrywają, obszar objęty obiema strefami nadal będzie objęty ochroną.

Adnotacja strefy ma określoną składnię, której należy przestrzegać.

  • Aby oznaczyć pojedynczy węzeł, użyj znaku :, aby połączyć oś X i oś Y współrzędnych obrazu. Na przykład węzeł (0,0) w lewym górnym rogu będzie oznaczony jako 0:0.
  • Aby oznaczyć wszystkie węzły w jednej strefie, połącz je za pomocą symbolu ;. Na przykład w przypadku strefy z węzłami (0,0), (100,0), (100,100)(0, 100) strefa będzie oznaczona jako 0:0;100:0;100:100;0:100. Zawsze wpisuj węzły jako węzły łączące obok siebie. Kolejność może być zgodna z ruchem wskazówek zegara lub w lewo.

Strefa wykrywania ruchu – kwadrat*Kwadratowa strefa z 4 węzłami.

Strefa wykrywania ruchu – trójkąt*Strefa trójkątna z 3 węzłami.

  • Aby oznaczyć wiele stref w jednej ramce, połącz je za pomocą znaku -. Jeśli na przykład chcemy wprowadzić znaki (0,0), (100,0), (100,100), (0,100)(120,120), (110,150), (200,160), adnotacja strefy wprowadzania będzie wyglądać tak: 0:0;100:0;100:100;0:100-120:120;110:150;200:160.

Strefa wykrywania ruchu – ramka z 2 strefami*Dwie strefy w ramce.

Aby uzyskać współrzędne z obrazu, możesz skorzystać z dostępnych online narzędzi. Na przykład zobacz Wolfram - Get Coordinates from Image (Wolfram – pobieranie współrzędnych z obrazu).

Wykluczanie obszaru z adnotacjami

Użyj flagi exclude_annotated_zone w poleceniu vaictl, aby skonfigurować wykrywanie ruchu w strefie lub poza nią.
Wartość logiczna. Domyślna wartość to fałsz.

Wykluczanie zaznaczonego obszaru to dane wejściowe w postaci wartości logicznej, które użytkownik podaje, aby określić, czy zaznaczony obszar ma być wykluczony z wykrywania ruchu.

  • Jeśli ma wartość true, oznaczona strefa będzie działać jako strefa negatywna. Ruch w adnotowanych strefach nie będzie wykrywany.

Strefa wykrywania ruchu – opcja wykluczania *Wykrywanie ruchu powinno być włączone tylko poza strefami wejściowymi.

  • Jeśli wartość jest ustawiona na false, strefa będzie działać jako strefa dodatnia, w której wykrywanie ruchu będzie się koncentrować.

Strefa wykrywania ruchu – opcja uwzględniania *Wykrywanie ruchu jest włączone tylko w strefach wejściowych.

6. Przykład filtra ruchu ze strefą wykrywania ruchu

W tym przykładzie użyjemy filmu, na którym na pierwszym planie widać ciągle poruszające się drzewo. W przypadku ustawienia filtra zwykłego ruchu film wygeneruje tylko jedno zdarzenie ruchu o czasie trwania oryginalnego filmu, ponieważ filtr ruchu zarejestruje poruszające się drzewo jako „stale poruszające się w całym filmie”. Dzięki strefie wykrywania ruchu możemy jednak odpowiednio zamaskować ruch drzewa i skupić się na ruchu samochodów i pieszych.

Przygotowanie filmu

Przykładowy film (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) zawiera drzewa, samochody i pieszych z www.changedetection.net.

Autor filmu: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad i P. Ishwar, changedetection.net: A new change detection benchmark dataset, w Proc. IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012, Providence, RI, 16-21 Jun., 2012

Przygotowanie zmiennych środowiskowych

Zmienne projektu Google Cloud.

export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4

Podstawowa konfiguracja filtra ruchu.

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>

Konfiguracja strefy wykrywania ruchu.

Wybierz jedną z opcji poniżej, aby zobaczyć różne sposoby wykorzystania strefy wykrywania ruchu.

Wyklucz drzewo z wykrywania ruchu.

export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150"
export EXCLUDE_ANNOTATED_ZONE=true

Strefa wykrywania ruchu – wyklucz wykrywanie ruchu z oznaczonej strefy w przykładzie filmu *Wykrywanie ruchu powinno być włączone tylko poza strefami wejściowymi.

Skup wykrywanie ruchu na ulicy.

export ZONE_ANNOTATION="0:300;780:300;780:480;0:480"
export EXCLUDE_ANNOTATED_ZONE=false

Strefa wykrywania ruchu – uruchom wykrywanie ruchu w oznaczonej strefie w przykładowym filmie. *Wykrywanie ruchu powinno być włączone tylko poza strefami wejściowymi.

Wysyłanie strumienia wideo z filtrem ruchu

Wysyłanie zdarzeń związanych z ruchem do konsoli w chmurze

Za pomocą narzędzia vaictl możesz przesyłać strumieniowo dane wyjściowe wideo do konsoli Cloud. Zacznij od aktywowania interfejsu Vision AI API w konsoli Cloud.

Rejestrowanie nowego strumienia

  1. W panelu po lewej stronie Vertex AI Vision kliknij kartę strumieni.
  2. Kliknij Zarejestruj się
  3. W polu Nazwa strumienia wpisz motion-detection-stream.
  4. W polu regionu wpisz us-central1.
  5. Kliknij Zarejestruj.

Wysyłanie wyników do strumienia

To polecenie przesyła strumieniowo plik wideo do strumienia. Jeśli użyjesz flagi –loop, film będzie odtwarzany w pętli w strumieniu, dopóki nie zatrzymasz polecenia. Uruchomimy to polecenie jako zadanie w tle, aby strumieniowanie było ciągłe.

Dodaj znak nohup na początku i & na końcu, aby przekształcić go w zadanie w tle.

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

Od rozpoczęcia operacji vaictl ingest do pojawienia się filmu na panelu może minąć około 100 sekund.

Gdy przesyłanie strumieniowe będzie dostępne, możesz wyświetlić strumień wideo na karcie Strumienie w panelu Vertex AI Vision, wybierając strumień ruchu.

Otwórz kartę Strumienie

Wysyłanie wyników do pamięci lokalnej

To polecenie przesyła strumieniowo plik wideo do strumienia. Jeśli użyjesz flagi –loop, film będzie odtwarzany w pętli w strumieniu, dopóki nie zatrzymasz polecenia. Uruchomimy to polecenie jako zadanie w tle, aby strumieniowanie było ciągłe.

Dodaj znak nohup na początku i & na końcu, aby przekształcić go w zadanie w tle.

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. Gratulacje

Gratulacje! Moduł został ukończony.

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, zakończ działanie pakietu SDK vaictl za pomocą wiersza poleceń, naciskając ctrl + z.

Materiały

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

Prześlij opinię

Kliknij tutaj, aby przesłać opinię

Ankieta

Jak zamierzasz wykorzystać ten samouczek?

Tylko przeczytaj Przeczytaj i wykonaj ćwiczenia

Na ile przydatne były te warsztaty?

Bardzo przydatne Umiarkowanie przydatne