Filtr Vertex AI Vision Motion

1. Cele

Omówienie

Skupia się on na tworzeniu kompleksowej aplikacji Vertex AI Vision na przykład o wysyłaniu filmów z funkcją filtrowania ruchu. W tym samouczku omówimy różne parametry w konfiguracji filtra ruchu:

  • Czułość wykrywania ruchu
  • Minimalna długość zdarzenia
  • Okres ważności
  • Czas wyciszenia
  • Strefa wykrywania ruchu

Czego się nauczysz

  • Jak przetwarzać filmy na potrzeby strumieniowania
  • Różne funkcje dostępne w filtrze ruchu i sposób korzystania z nich
  • Gdzie można sprawdzić statystyki filtra ruchu
  • Jak dostosować ustawienie w zależności od 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łączyć interfejsy Compute Engine API 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ę tworzenia konta usługi.
  2. Wybierz projekt.
  3. W polu Nazwa konta usługi wpisz nazwę. Konsola Google Cloud wypełnia pole Identyfikator konta usługi na podstawie tej nazwy. 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 zapewnić dostęp do projektu, przypisz do konta usługi te role: Vision AI > Edytujący Vision AI, Compute Engine > Administrator instancji Compute (beta), Miejsce na dane > Wyświetlający obiekty Cloud 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 konto usługi ma dostęp w projekcie. Później możesz je anulować lub przypisać dodatkowe role. W środowiskach produkcyjnych nie przyznawaj ról właściciela, edytującego ani wyświetlającego. 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. Na komputer zostanie pobrany plik klucza JSON.
  5. Kliknij Zamknij.
  6. Zainstaluj i zainicjuj Google Cloud CLI.

† Rola jest potrzebna tylko w przypadku kopiowania przykładowego pliku wideo z zasobnika Cloud Storage.

3. Filtr ruchu

Filtr ruchu rejestruje ruch i segmenty wideo produktu, które zawierają zdarzenia ruchu. Dostosowując czułość ruchu, minimalną długość zdarzenia, okres ważności, okres oczekiwania i strefę wykrywania ruchu, użytkownik może dostosować filtr do swoich potrzeb.

Konfiguracja filtra ruchu

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

  1. Czułość wykrywania ruchu: jak czułość ma być wyzwalany ruch.
  2. Minimalna długość zdarzenia: minimalna długość rejestrowanego zdarzenia ruchu.
  3. Okres ważności: po jakim czasie powinno rozpocząć nagrywanie filmu, zanim zostanie wykryte zdarzenie ruchu.
  4. Okres oczekiwania: po zakończeniu zdarzenia ruchu nastąpi okres oczekiwania o określonym czasie trwania. W tym czasie zdarzenia ruchu nie będą wywoływane.
  5. Strefa wykrywania ruchu: użytkownik skonfigurowana w strefie, w której ma działać wykrywanie ruchu. (szczegółowo omówimy to w dalszej sekcji).

Czułość wykrywania ruchu

Użyj flagi motion_detection_sensitivity w poleceniu vaictl.Ciąg tekstowy
. Domyślne medium. Do wyboru masz niski, średni lub wysoki poziom.

Im wyższa czułość wykrywania ruchu, tym większa czułość 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.

Niska czułość jest natomiast mniej czuła 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 agresywne ze wszystkich filtrów, więc może ignorować ruchy małych obiektów.

Minimalna długość zdarzenia

Użyj flagi min_event_length_in_seconds w poleceniu 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 poleceniu vaictl.
liczba całkowita. Domyślnie 3 sekundy. Zakres od 0 do 3600 sekund.

Okres ważności to okres przechowywania w pamięci podręcznej przed wykryciem zdarzenia ruchu. Ta funkcja jest przydatna, gdy chcemy sprawdzić, co dzieje się w kadrze kilka sekund przed wykryciem zdarzenia ruchu.

Okres oczekiwania

Użyj flagi cool_down_period_in_seconds w poleceniu vaictl.
liczba całkowita. Domyślna wartość to 300 sekund. Zakres od 0 do 3600 sekund.

Okres oczekiwania to czas, na jaki wykrywanie ruchu jest wstrzymywane po zarejestrowaniu zdarzenia ruchu. W okresie oczekiwania nie są wykonywane żadne obliczenia wykrywające ruch.

4. Przykład podstawowego filtra ruchu

Instrukcja obsługi Vaictl SDK

Aby sprawdzić ręczne działanie funkcji vaictl pod kątem strumienia wejściowego z filtrem ruchu, użyj poniższego polecenia.

vaictl send video-file applying motion-filter -h

Przygotowywanie przykładowego filmu

  1. Przykładowy film możesz skopiować za pomocą tego polecenia gsutil cp. Zastąp tę zmienną:
  • SOURCE: lokalizacja pliku wideo, którego chcesz użyć. Możesz użyć własnego źródła 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 osobami i pojazdami, źródło)
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Przygotowywanie zmiennych środowiskowych

Ustaw poniżej zmienne środowiskowe, aby użyć dostarczonego szablonu polecenia.

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 Lokalizacje Cloud.
  • LOCAL_FILE: nazwa lokalnego pliku wideo. Na przykład: pojazdy_ulice.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: jak czułe jest wykrywanie ruchu.
  • MIN_EVENT_LENGTH: minimalna długość zdarzeń ruchu.
  • LOOK_BACK_WINDOW: czas, przez jaki ma być rejestrowany ruch przed pierwszym ruchem w zdarzeniu ruchu.
  • COOL_DOWN_PERIOD: okres, po którym wykrywanie ruchu jest wstrzymywane 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

Filtra ruchu ze strumieniem wejściowym można używać 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 konsoli Cloud.

Zarejestruj nowy strumień

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

Wysyłam wyniki do strumienia

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

Dodaj nohup na początku i & na końcu, aby zrobić to 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 procesu przetwarzania vaictl do wyświetlenia filmu w panelu może upłynąć około 100 sekund.

Gdy przetwarzanie strumienia będzie dostępne, zobaczysz go na karcie Strumienie w panelu Vertex AI Vision, wybierając strumień strumienia ruchu.

Otwórz kartę Strumienie

Wysyłanie wyników do pamięci lokalnej

To polecenie przesyła strumieniowo plik wideo do strumienia.

Dodaj nohup na początku i & na końcu, aby zrobić to 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 korzystanie ze strefy wykrywania ruchu i jej konfigurację. Strefa ma poprawić wykrywanie ruchu przez maskowanie ruchu pochodzącego z obszarów, które Cię nie interesują.

Istnieją 2 rodzaje stref wykrywania ruchu: (1) strefy pozytywne, w których wykrywanie ruchu działa tylko w obszarze z adnotacjami. (2) strefy negatywne, w których wykrywanie ruchu ignoruje dowolny ruch w obszarze z adnotacjami.

Adnotacja o strefie

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

Adnotacja strefy to ciąg tekstowy wprowadzony przez użytkownika oznaczający strefy w ramce, na których użytkownik chce się ukryć lub zaznaczyć. 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. Strefa musi mieć co najmniej 3 węzły, aby można było utworzyć wielokąt. Ramka może zawierać wiele stref. Jeśli strefy nakładają się na siebie, obszar objęty obiema strefami nadal będzie chroniony.

Adnotacja strefy ma określoną składnię wejściową.

  • 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 zostanie oznaczony jako 0:0.
  • Aby wskazać wszystkie węzły w jednej strefie, połącz je za pomocą elementu ;. Na przykład strefa z węzłami (0,0), (100,0), (100,100) i (0, 100) będzie oznaczona jako 0:0;100:0;100:100;0:100. Zawsze umieszczaj węzły obok siebie jako węzły łączące. Mogą one występować zarówno w kierunku ruchu wskazówek zegara, jak i przeciwnie do ruchu wskazówek zegara.

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

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

  • Aby wskazać kilka stref w jednej ramce, użyj metody - do połączenia różnych stref. Jeśli na przykład chcesz podać zarówno (0,0), (100,0), (100,100), (0,100), jak i (120,120), (110,150) i (200,160), adnotacją strefy wejściowej będzie 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.

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

Wyklucz strefę z adnotacjami

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

Wykluczenie strefy z adnotacjami to wartość logiczna wprowadzona przez użytkownika określająca, czy użytkownik chce wykluczyć strefę z adnotacją w ramach 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 włączaj tylko poza strefami wprowadzania danych.

  • 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 dołączenia *Wykrywanie ruchu tylko w strefach wejściowych.

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

W tym przykładzie użyjemy filmu, w którym na pierwszym planie ciągle jest drzewo. Przy normalnym ustawieniu filtra ruchu w filmie pojawi się tylko jedno zdarzenie ruchu o długości początkowej, ponieważ filtr ruchu rejestruje ruchome drzewo jako „ciągle poruszające się przez cały film”. Jednak dzięki strefie wykrywania ruchu możemy prawidłowo zamaskować ruch drzewny i skupić się na ruchu samochodów i pieszych.

Przygotowywanie filmów

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

Autor filmu: N. Goyette, P.M. Jodoin, F. Porikli, J. Konrad, P. Ishwar, changedetection.net: nowy zbiór danych porównawczych wykrywania zmian, Proc. IEEE Workshop on Change Detection (CDW-2012) z CVPR-2012, Providence, RI, 16–21 czerwca, 2012

Przygotowanie zmiennej środowiskowej

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

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

Strefa wykrywania ruchu – wyklucza wykrywanie ruchu ze strefy z adnotacjami w przykładowym filmie *Wykrywanie ruchu włączaj tylko poza strefami wprowadzania danych.

Ustaw fokus wykrywania 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 oznaczonej adnotacjami w przykładowym filmie *Wykrywanie ruchu włączaj tylko poza strefami wprowadzania danych.

Wyślij strumień wideo z filtrem ruchu

Wysyłanie zdarzeń 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 konsoli Cloud.

Zarejestruj nowy strumień

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

Wysyłam wyniki do strumienia

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

Dodaj nohup na początku i & na końcu, aby zrobić to 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 procesu przetwarzania vaictl do wyświetlenia filmu w panelu może upłynąć około 100 sekund.

Gdy przetwarzanie strumienia będzie dostępne, zobaczysz go na karcie Strumienie w panelu Vertex AI Vision, wybierając strumień strumienia 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ż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 nadal przesyłać strumieniowo dane.

Dodaj nohup na początku i & na końcu, aby zrobić to 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ł ukończony.

Czyszczenie danych

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

Tylko do przeczytania Przeczytaj go i wykonaj ćwiczenia

Jak oceniasz przydatność tego ćwiczenia z programowania?

Bardzo przydatne Średnio przydatne
.