Filtr Vertex AI Vision Motion

1. Cele

Omówienie

Ten warsztat koncentruje się na tworzeniu kompleksowej aplikacji Vertex AI Vision, aby zademonstrować wysyłanie filmów z funkcja filtra 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 wyciszenia
  • Strefa wykrywania ruchu

Czego się nauczysz

  • Jak przetwarzać filmy na potrzeby strumieniowego przesyłania danych
  • Różne funkcje dostępne w filtrze ruchu i sposób korzystania z nich
  • Gdzie sprawdzić statystyki filtra ruchu
  • Jak dostosować ustawienia na podstawie filmu

2. Zanim zaczniesz

  1. W konsoli Google Cloud na stronie selektora projektów wybierz lub utwórz projekt Google Cloud. Uwaga: jeśli nie planujesz zachować zasobów utworzonych w ramach tej procedury, zamiast wybierać istniejący projekt, utwórz projekt. Po wykonaniu tych czynności możesz usunąć projekt wraz ze wszystkimi powiązanymi z nim zasobami. 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

Tworzenie konta 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ę. Na podstawie tej nazwy konsola Google Cloud wypełni pole Identyfikator konta usługi. W polu Opis konta usługi wpisz opis. Przykład: Konto usługi do krótkiego wprowadzenia.
  4. Kliknij Utwórz i kontynuuj.
  5. Aby przyznać dostęp do projektu, przypisz do konta usługi te role: Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (beta), Storage > Storage Object Viewer† . Na liście Wybierz rolę wybierz rolę. Aby dodać dodatkowe role, kliknij Dodaj kolejną rolę i dodaj każdą dodatkową rolę. Uwaga: pole Rola określa, do jakich zasobów w Twoim projekcie ma dostęp Twoje konto usługi. Możesz cofnąć te role lub przyznać dodatkowe role w późniejszym czasie. W środowiskach produkcyjnych nie przyznawaj ról Właściciel, Edytujący ani Wyświetlający. Zamiast tego przypisz wstępnie zdefiniowaną rolę lub rolę niestandardową, która odpowiada Twoim potrzebom.
  6. Kliknij Dalej.
  7. Aby zakończyć tworzenie konta usługi, kliknij Gotowe. Nie zamykaj okna przeglądarki. Użyjesz go 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 kolejno Dodaj klucz i Utwórz nowy klucz.
  4. Kliknij Utwórz. Plik klucza JSON zostanie pobrany na komputer.
  5. Kliknij Zamknij.
  6. Zainstaluj i inicjuj interfejs wiersza poleceń Google Cloud.

† Ta rola jest potrzebna tylko wtedy, gdy kopiujesz przykładowy plik wideo z zasobnika Cloud Storage.

3. Filtr ruchu

Filtr ruchu rejestruje ruch i sekwencje filmów z produktami, które zawierają zdarzenia ruchu. Dostosowując czułość na ruch, minimalną długość zdarzenia, okno wsteczne, okres odpoczynku i strefę wykrywania ruchu, użytkownik może skonfigurować podstawę filtra zgodnie ze swoimi potrzebami.

Konfiguracja filtra ruchu

Filtr ruchu ma 5 konfiguracji, które można dostosować.

  1. Czułość wykrywania ruchu: określa, jak czuły ma być ruch, aby wywołać działanie.
  2. Minimalna długość zdarzenia: minimalna długość rejestrowanego zdarzenia związanego z ruchu.
  3. Okres ważności: czas, przez jaki ma trwać nagrywanie filmu przed wykryciem zdarzenia związanego z ruchu.
  4. Okres oczekiwania: po zakończeniu zdarzenia ruchu nastąpi okres oczekiwania o określonym czasie trwania. W okresie chłodzenia nie będą wywoływane zdarzenia związane z ruchu.
  5. Strefa wykrywania ruchu: strefa skonfigurowana przez użytkownika, która określa, gdzie ma działać wykrywanie ruchu. (szczegóły w następnej sekcji)

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

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

Z drugiej strony, niska czułość jest mniej wrażliwa na zakłócenia oświetlenia. To ustawienie znakomicie sprawdza się w przypadku większych zakłóceń oświetlenia, np. na zewnątrz, oraz w sytuacjach, gdy obraz ma niższą jakość, tam gdzie może być więcej hałasów. To ustawienie jest najbardziej agresywnym filtrem, dlatego może ignorować ruchy małych obiektów.

Minimalna długość zdarzenia

Użyj flagi min_event_length_in_seconds w komendach vaictl.
liczba całkowita. Domyślnie 10 sekund. Zakres: od 0 do 3600 sekund.

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

Okres ważności

Użyj flagi look_back_window_in_seconds w komendach vaictl.
Liczba całkowita. Domyślnie 3 sekundy. Zakres: od 0 do 3600 sekund.

Okres ważności to czas przechowywania w pamięci podręcznej przed wykryciem zdarzenia związanego z ruchu. Jest to przydatne, gdy chcemy zobaczyć, co dzieje się w kadrze kilka sekund przed wykryciem zdarzeń związanych z ruchu.

Okres oczekiwania

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

Okres oczekiwania to czas, przez który wykrywanie ruchu jest wstrzymane po zarejestrowaniu zdarzenia związanego z ruchu. W tym czasie nie będą wykonywane żadne obliczenia służące do wykrywania ruchu.

4. Przykład filtra ruchu podstawowego

Instrukcja obsługi Vaictl SDK

Aby sprawdzić vaictl ręcznie w przypadku strumienia wejściowego z filtrem ruchu, użyj tego polecenia.

vaictl send video-file applying motion-filter -h

Przygotowanie przykładowego filmu

  1. Przykładowy film możesz skopiować za pomocą tego polecenia gsutil cp. Zastąp tę zmienną:
  • SOURCE (Źródło): lokalizacja pliku wideo do użycia. Możesz użyć własnego źródła pliku wideo (np. gs://BUCKET_NAME/FILENAME.mp4) lub skorzystać z 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 .

Przygotowanie zmiennych środowiskowych

Aby użyć podanego szablonu polecenia, ustaw podane niżej zmienne środowiskowe.

zmienne vaictl,

  • PROJECT_ID: identyfikator Twojego projektu Google Cloud.
  • LOCATION_ID: identyfikator Twojej lokalizacji. Na przykład us-central1. Więcej informacji znajdziesz w artykule Lokalizacja Google Cloud.
  • LOCAL_FILE: nazwa lokalnego pliku wideo. Na przykład street_vehicles_people.mp4.
  • – loop flag: opcjonalna. Wykonuje pętlę danych pliku w celu symulowania przesyłania strumieniowego.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1

Zmienne filtra ruchu

  • MOTION_SENSITIVITY: jaka jest czułość wykrywania ruchu.
  • MIN_EVENT_LENGTH: minimalna długość zdarzeń ruchu.
  • LOOK_BACK_WINDOW: czas rejestrowania danych 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>

Przygotuj polecenie filtra ruchu

Filtr ruchu można stosować z strumieniem wejściowym na 2 sposoby. Pierwszą opcją jest wysłanie zdarzeń ruchu do strumienia w konsoli Cloud. Druga opcja to wysyłanie zdarzeń ruchu do pamięci lokalnej.

Wysyłanie wyników do konsoli Cloud

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

Zarejestruj nowy strumień

  1. W panelu po lewej stronie w Vertex AI Vision kliknij kartę strumieni.
  2. Kliknij Zarejestruj się.
  3. W nazwie strumienia wpisz motion-detection-stream.
  4. W regionie wpisz us-central1
  5. Rejestracja po kliknięciu

Wysyłanie wyników do strumienia

To polecenie przesyła plik wideo do strumienia. Jeśli używasz flagi –loop, odtwarzanie filmu w pętli będzie odbywało się w pętli do momentu zatrzymania polecenia. Uruchomimy to polecenie jako zadanie w tle, aby strumieniowanie było kontynuowane.

Aby utworzyć zadanie wykonywane w tle, dodaj nohup na początku i & na końcu.

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 momentu rozpoczęcia operacji przetwarzania danych przez vaictl do momentu wyświetlenia filmu na panelu może minąć około 100 sekund.

Gdy przetworzenie strumienia jest dostępne, możesz wyświetlić dane wideo na karcie Strumienie w panelu Vertex AI Vision, wybierając strumień danych o nazwie traffic-stream.

Otwórz kartę Strumienie

Wysyłanie wyników do pamięci lokalnej

To polecenie przesyła plik wideo do strumienia.

Aby utworzyć zadanie wykonywane w tle, dodaj nohup na początku i & na końcu.

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 korzystanie ze strefy wykrywania ruchu i sposób jej konfiguracji. Strefa ma na celu poprawienie wykrywania ruchu przez maskowanie ruchu z obszarów, które Cię nie interesują.

Strefa wykrywania ruchu ma 2 typy: (1) strefy pozytywne, w których wykrywanie ruchu działa tylko w obszarze z tytułem; (2) strefy negatywne, w których wykrywanie ruchu ignoruje każdy ruch w obszarze z tytułem.

Adnotacja o strefie

Użyj flagi zone_annotation w komendzie vaictl, aby podać współrzędne wielokątów stref.
Ciąg znaków. Domyślnie puste dla adnotacji strefy.

Adnotacja strefy będzie ciągiem znaków wprowadzonym przez użytkownika, oznaczającym strefy w kadrze, 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 strefa mogła tworzyć wielokąt, musi mieć co najmniej 3 węzły. W ramce może być wiele stref. Jeśli strefy nakładają się na siebie, obszar objęty obiema strefami nadal będzie objęty.

Adnotacja strefy musi być zgodna z określoną składnią.

  • Aby wskazać 1 węzeł, użyj właściwości : do połączenia osi x i y koordynacji 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ą elementu ;. 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. Węzły zawsze należy wpisywać jako węzły łączące obok siebie. Kolejność może być zgodna z kierunkiem ruchu wskazówek zegara lub przeciwnie do niego.

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

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

  • Aby wskazać kilka stref w jednej ramce, użyj funkcji - do połączenia różnych stref. Jeśli na przykład chcemy podać (0,0), (100,0), (100,100), (0,100), (120,120), (110,150)(200,160), adnotacja strefy wprowadzania danych będzie brzmiała 0:0;100:0;100:100;0:100-120:120;110:150;200:160.

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

W celu uzyskania współrzędnych na podstawie obrazu możesz znaleźć online narzędzia, które pomagają w ustaleniu współrzędnych. Zobacz na przykład Wolfram – uzyskiwanie współrzędnych z obrazu.

Wyklucz strefę z adnotacjami

Aby skonfigurować wykrywanie ruchu w strefie lub poza nią, użyj flagi exclude_annotated_zone w komendach vaictl.
Wartość logiczna. Wartość domyślna to fałsz.

Wykluczanie strefy z adnotacją to wartość logiczna wprowadzona przez użytkownika, która określa, czy użytkownik chce wykluczyć strefę z adnotacją z wykrywania ruchu.

  • Jeśli ustawisz wartość true, strefa z adnotacjami będzie działać jako strefa ujemna. Ruchy w strefach z adnotacjami nie będą wykrywane.

Strefa wykrywania ruchu – opcja wykluczenia *Wykrywanie ruchu działa tylko poza strefami wejściowymi.

  • Jeśli zasada ma wartość Fałsz, strefa będzie działać jako strefa dodatnia, na której będzie skupiać się wykrywanie ruchu.

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

6. Przykład filtra ruchu z obszarem wykrywania ruchu

W tym przykładzie użyjemy filmu, w którym na pierwszym planie stale porusza się drzewo. W przypadku ustawienia filtra ruchu regularnego film wygeneruje tylko jedno zdarzenie ruchu o czasie trwania równym długości oryginalnego filmu, ponieważ filtr ruchu zarejestruje poruszające się drzewo jako „ciągle poruszające się przez cały film”. Jednak dzięki strefie wykrywania ruchu możemy 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, in 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.

Kliknij poniżej, aby zobaczyć różne rodzaje użycia 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 oznaczonego obszaru w przykładowym filmie *Wykrywanie ruchu działa tylko poza strefami wejściowymi.

Skoncentruj 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 strefie z komentarzem w przykładowym filmie *Wykrywanie ruchu włączaj tylko poza strefami, w których znajdują się dane wejściowe.

Wysyłanie strumienia wideo z filtrem ruchu

Wysyłanie zdarzeń związanych z ruchu do konsoli Cloud

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

Rejestrowanie nowego strumienia

  1. W panelu po lewej stronie w Vertex AI Vision kliknij kartę strumieni.
  2. Kliknij Zarejestruj.
  3. W nazwie strumienia wpisz motion-detection-stream.
  4. W regionie wpisz us-central1
  5. Rejestracja po kliknięciu

Wysyłanie wyników do strumienia

To polecenie przesyła plik wideo do strumienia. Jeśli używasz flagi –loop, odtwarzanie filmu w pętli będzie odbywało się w pętli do momentu zatrzymania polecenia. Uruchomimy to polecenie jako zadanie w tle, aby strumieniowanie było kontynuowane.

Aby utworzyć zadanie wykonywane w tle, dodaj nohup na początku i & na końcu.

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 momentu rozpoczęcia operacji przetwarzania danych przez vaictl do momentu wyświetlenia filmu na panelu może minąć około 100 sekund.

Gdy przetworzenie strumienia jest dostępne, możesz wyświetlić dane wideo na karcie Strumienie w panelu Vertex AI Vision, wybierając strumień danych o nazwie traffic-stream.

Otwórz kartę Strumienie

Wysyłanie wyników do pamięci lokalnej

To polecenie przesyła 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 nadal przesyłać strumieniowo dane.

Aby utworzyć zadanie wykonywane w tle, dodaj nohup na początku i & na końcu.

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! Masz ukończony ten moduł.

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, zakończ operację pakietu SDK vaictl w wierszu poleceń za pomocą polecenia 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 wykorzystasz ten samouczek?

Tylko przeczytać Przeczytać i wykonać ćwiczenia

Jak przydatne było to Codelab?

Bardzo przydatne Umiarkowanie przydatne