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
- 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
- Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
- włączyć interfejsy Compute Engine API i Vision AI API; Włączanie interfejsów API
Utwórz konto usługi:
- W konsoli Google Cloud otwórz stronę Utwórz konto usługi. Otwórz stronę tworzenia konta usługi.
- Wybierz projekt.
- 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.
- Kliknij Utwórz i kontynuuj.
- 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.
- Kliknij Dalej.
- 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:
- W konsoli Google Cloud kliknij adres e-mail utworzonego konta usługi.
- Kliknij Klucze.
- Kliknij kolejno Dodaj klucz i Utwórz nowy klucz.
- Kliknij Utwórz. Na komputer zostanie pobrany plik klucza JSON.
- Kliknij Zamknij.
- 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ć.
- Czułość wykrywania ruchu: jak czułość ma być wyzwalany ruch.
- Minimalna długość zdarzenia: minimalna długość rejestrowanego zdarzenia ruchu.
- Okres ważności: po jakim czasie powinno rozpocząć nagrywanie filmu, zanim zostanie wykryte zdarzenie ruchu.
- 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.
- 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
- 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ń
- W lewym panelu Vertex AI Vision kliknij kartę Strumienie.
- Kliknij Zarejestruj.
- W nazwie strumienia wpisz
motion-detection-stream
. - W regionie wpisz:
us-central1
- 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.
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 jako0: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 jako0: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 kwadratowa z 4 węzłami.
*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ędzie0:0;100:0;100:100;0:100-120:120;110:150;200:160
.
*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.
*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.
*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
*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
*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ń
- W lewym panelu Vertex AI Vision kliknij kartę Strumienie.
- Kliknij Zarejestruj.
- W nazwie strumienia wpisz
motion-detection-stream
. - W regionie wpisz:
us-central1
- 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.
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ę