Aplikacja do monitorowania ruchu Vertex AI Vision

1. Cele

Omówienie

W tym laboratorium programistycznym zajmiemy się tworzeniem kompleksowej aplikacji Vertex AI Vision do monitorowania w czasie rzeczywistym nagrań wideo z ulicy. Użyjemy wbudowanych funkcji wytrenowanego modelu specjalistycznego Analizy zajętości, aby uwzględnić te elementy:

  • Zlicza liczbę pojazdów i osób przekraczających drogę w określonym miejscu.
  • Zlicza liczbę pojazdów/osób w dowolnym stałym obszarze drogi.
  • wykrywanie korków na dowolnym odcinku drogi;

Czego się nauczysz

  • Jak skonfigurować maszynę wirtualną do przetwarzania filmów na potrzeby strumieniowego przesyłania danych
  • Jak utworzyć aplikację w Vertex AI Vision
  • Różne funkcje dostępne w narzędziu Okupanci i sposób ich używania
  • Jak wdrożyć aplikację
  • Jak wyszukiwać filmy w hurtowni multimediów Vertex AI Vision.
  • Jak połączyć dane wyjściowe z BigQuery, napisać zapytanie SQL, aby wyodrębnić statystyki z danych wyjściowych w formacie JSON modelu, i wizualizować wynik w Looker Studio w czasie rzeczywistym.

2. Zanim zaczniesz

  1. W konsoli Google Cloud na stronie selektora projektu wybierz lub utwórz projekt 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 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łącz interfejsy 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ę. Konsola Google Cloud wypełnia pole Identyfikator konta usługi na podstawie tej nazwy. W polu Opis konta usługi wpisz opis. Na przykład konto usługi do szybkiego uruchomienia.
  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), Pamięć > Wyświetlający obiekty Cloud Storage† . 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 których zasobów konto usługi ma dostęp w projekcie. 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.

Tworzenie klucza 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 zainicjuj Google Cloud CLI.

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

3. Konfigurowanie maszyny wirtualnej do strumieniowego przesyłania filmów

Zanim utworzysz aplikację w Analytics Otwarcia, musisz zarejestrować strumień, którego aplikacja będzie później używać.

W tym samouczku utworzysz instancję maszyny wirtualnej Compute Engine, która będzie hostować film, i wyślesz dane strumieniowego wideo z tej maszyny.

Tworzenie maszyny wirtualnej z systemem Linux

Pierwszym krokiem w wysyłaniu wideo z maszyny wirtualnej Compute Engine jest utworzenie instancji maszyny wirtualnej.

  1. W konsoli otwórz stronę Instancje maszyn wirtualnych. Otwórz stronę Instancje maszyn wirtualnych
  2. Wybierz projekt i kliknij Dalej.
  3. Kliknij Utwórz instancję.
  4. Podaj nazwę maszyny wirtualnej. Więcej informacji znajdziesz w artykule Konwencja nazewnictwa zasobów.
  5. Opcjonalnie: zmień strefę dla tej maszyny wirtualnej. Compute Engine losowo wybiera strefy w każdym regionie, aby zachęcić do korzystania z wielu stref.
  6. Zaakceptuj pozostałe opcje domyślne. Więcej informacji o tych opcjach znajdziesz w artykule na temat tworzenia i uruchamiania maszyny wirtualnej.
  7. Aby utworzyć i uruchomić maszynę wirtualną, kliknij Utwórz.

Konfigurowanie środowiska maszyny wirtualnej

Po uruchomieniu maszyny wirtualnej możesz połączyć się z nią przez SSH z przeglądarki. Następnie możesz pobrać narzędzie wiersza poleceń vaictl, aby przetworzyć wideo do strumienia.

Nawiązywanie połączenia SSH z maszyną wirtualną

  1. W konsoli otwórz stronę Instancje maszyn wirtualnych. Otwórz stronę Instancje maszyn wirtualnych
  2. W sekcji Połącz na wierszu utworzonej instancji kliknij SSH. Spowoduje to otwarcie połączenia SSH w nowym oknie przeglądarki. Opcja SSH w interfejsie

Pobieranie narzędzia wiersza poleceń vaictl

  1. W oknie SSH w przeglądarce pobierz narzędzie wiersza poleceń Vertex AI Vision (vaictl) za pomocą tego polecenia:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
  1. Zainstaluj narzędzie wiersza poleceń, wykonując to polecenie:
sudo apt install ./visionai_0.0-4_amd64.deb
  1. Aby przetestować instalację, uruchom to polecenie:
vaictl --help

4. Pozyskaj plik wideo na potrzeby przesyłania strumieniowego

Po skonfigurowaniu środowiska maszyny wirtualnej możesz skopiować przykładowy plik wideo, a następnie za pomocą vaictl przesłać dane wideo do aplikacji do analizy zajętości.

Zacznij od aktywacji interfejsu Vision AI API w Cloud Console

Rejestrowanie nowego strumienia

  1. W panelu bocznym Vertex AI Vision kliknij kartę strumieni.
  2. Kliknij Zarejestruj się.
  3. W polu Nazwa strumienia wpisz „traffic-stream”.
  4. W polu Region wpisz „us-central1”.
  5. Kliknij Rejestracja.

Rejestracja transmisji potrwa kilka minut.

Kopiowanie przykładowego filmu na maszynę wirtualną

  1. W oknie SSH-in-browser (SSH-in-browser) swojej maszyny wirtualnej skopiuj przykładowy film z tym poleceniem 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 .

Przesyłanie strumieni wideo z VM i przetwarzanie danych na potrzeby strumienia

  1. Aby wysłać ten lokalny plik wideo do strumienia danych wejściowych aplikacji, użyj tego polecenia. Musisz wprowadzić te zamiany zmiennych:
  • 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. Powtarza dane plików, aby symulować przesyłanie strumieniowe.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4
  1. 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 nawet po odłączeniu maszyny wirtualnej.
  • ( add nohup at the beginning and ‘&' at the end to make it background job)
nohup vaictl -p $PROJECT_ID \
    -l $LOCATION_ID \
    -c application-cluster-0 \
    --service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --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 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

Widok obrazu z transmisji na żywo w interfejsieWyświetlanie w konsoli Google Cloud podglądu na żywo wideo przetwarzanego na potrzeby strumienia. Autor filmu: Elizabeth Mavor na kanale Pixabay (dodana pikselizacja).

5. Tworzenie aplikacji

Pierwszym krokiem jest utworzenie aplikacji, która będzie przetwarzać Twoje dane. Aplikację można traktować jako automatyczny kanał, który łączy:

  • Pozyskiwanie danych: kanał wideo jest przetwarzany w strumieniu.
  • Analiza danych: po przetworzeniu danych można dodać model AI(Computer Vision).
  • Pamięć danych: dwie wersje strumienia wideo (oryginalny strumień i strumień przetworzony przez model AI) można przechowywać w hurtowni multimediów.

W konsoli Google Cloud aplikacja jest reprezentowana jako wykres.

Tworzenie pustej aplikacji

Zanim wypełnisz graf aplikacji, musisz najpierw utworzyć pustą aplikację.

Utwórz aplikację w konsoli Google Cloud.

  1. Otwórz konsolę Google Cloud.
  2. Na panelu Vertex AI Vision otwórz kartę Aplikacje.

Otwórz kartę Aplikacje.

  1. Kliknij przycisk Utwórz.
  2. Wpisz „traffic-app” jako nazwę aplikacji i wybierz region.
  3. Kliknij Utwórz.

Dodawanie węzłów komponentów aplikacji

Po utworzeniu pustej aplikacji możesz dodać do grafu aplikacji te 3 węzły:

  1. Węzeł przetwarzania: zasób strumienia, który przetwarza dane wysyłane z utworzonej przez Ciebie instancji maszyny wirtualnej Compute Engine.
  2. węzeł przetwarzania: model analityczny zajętości, który działa na podstawie przetworzonych danych;
  3. węzeł pamięci: hurtownia multimediów, która przechowuje przetworzone filmy i służy jako magazyn metadanych. Magazyny metadanych zawierają informacje analityczne o przetworzonych danych wideo oraz informacje wywnioskowane przez modele AI.

Dodaj do aplikacji w konsoli węzły komponentów.

  1. Na panelu Vertex AI Vision otwórz kartę Aplikacje. Otwórz kartę Aplikacje
  2. W wierszu aplikacji generującej wizyty kliknij Wyświetl wykres. Przejdziesz do wizualizacji potoku przetwarzania w postaci wykresu.

Dodawanie węzła przetwarzania danych

  1. Aby dodać węzeł strumienia wejściowego, w sekcji Oprogramowanie sprzęgające w menu bocznym wybierz opcję Strumienie.
  2. W sekcji Źródło menu Strumień, które się otworzy, wybierz Dodaj strumienie.
  3. W menu Dodaj strumienie wybierz Zarejestruj nowe strumienie i jako nazwę strumienia wpisz traffic-stream.
  4. Aby dodać strumień do wykresu aplikacji, kliknij Dodaj strumienie.

Dodawanie węzła przetwarzania danych

  1. Aby dodać węzeł modelu zliczania zajętości, w sekcji Modele specjalistyczne w menu bocznym wybierz opcję Analiza zajętości.
  2. Pozostaw domyślne opcje Osoby i Pojazdy.
  3. Dodaj linie w sekcji Przejście przez linię. Użyj narzędzia Linia wielopunktowa, aby narysować linie, na których chcesz wykrywać wjeżdżające lub wyjeżdżające samochody lub osoby.
  4. Rysuj aktywne strefy, aby zliczać osoby lub pojazdy w danej strefie.
  5. Dodaj ustawienia czasu przebywania, aby wykrywać zator po narysowaniu aktywnej strefy.
  • (obecnie nie można jednocześnie stosować aktywnych stref i linii). Korzystaj tylko z jednej funkcji naraz.)

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

Dodawanie węzła przechowywania danych

  1. Aby dodać węzeł docelowy (lokalizację w pamięci masowej) dla danych wyjściowych, w sekcji Oprogramowanie sprzęgające w menu bocznym wybierz opcję Hurtownia multimediów Vertex AI Vision.
  2. W menu Galeria multimediów Vertex AI Vision kliknij Połącz hurtownię.
  3. W menu Połącz hurtownię wybierz Utwórz nową hurtownię. Nazwij magazyn ruchu w hurtowni i pozostaw wartość TTL na 14 dni.
  4. Kliknij przycisk Utwórz, aby dodać hurtownię.

6. Łączenie wyjścia z tabelą BigQuery

Gdy dodasz do aplikacji Vertex AI Vision łącznik BigQuery, wszystkie dane wyjściowe połączonego modelu aplikacji zostaną przetworzone w tabeli docelowej.

Możesz utworzyć własną tabelę BigQuery i wskazać ją podczas dodawania do aplikacji łącznika BigQuery lub pozwolić platformie aplikacji Vertex AI Vision na automatyczne utworzenie tabeli.

Automatyczne tworzenie tabel

Jeśli chcesz, aby platforma aplikacji Vertex AI Vision automatycznie utworzyła tabelę, możesz określić tę opcję podczas dodawania węzła łącznika BigQuery.

Jeśli chcesz korzystać z automatycznego tworzenia tabel, obowiązują te warunki dotyczące zbiorów danych i tabel:

  • Zbiór danych: nazwa automatycznie utworzonego zbioru danych to visionai_dataset.
  • Tabela: nazwa automatycznie tworzonej tabeli to visionai_dataset.APPLICATION_ID.
  • Obsługa błędów:
  • Jeśli w ramach tego samego zbioru danych istnieje już tabela o tej samej nazwie, nie nastąpi jej automatyczne utworzenie.
  1. Na panelu Vertex AI Vision otwórz kartę Aplikacje. Otwórz kartę Aplikacje
  2. Obok nazwy aplikacji na liście kliknij Wyświetl aplikację.
  3. Na stronie kreatora aplikacji w sekcji Oprogramowanie sprzęgające kliknij BigQuery.
  4. Pole Ścieżka BigQuery pozostaw puste. ee0b67d4ab2263d.png
  5. W sekcji Metadane sklepu pochodzące z: wybierz tylko „Statystyki dotyczące zajętości” i odznacz strumień.

Ostateczny wykres aplikacji powinien wyglądać tak:

1787242465fd6da7.png

7. Wdrażanie aplikacji do użytkowania

Po utworzeniu kompleksowej aplikacji ze wszystkimi niezbędnymi komponentami ostatnim krokiem do jej użycia jest wdrożenie.

  1. Otwórz kartę Applications (Aplikacje) w panelu Vertex AI Vision. Otwórz kartę Aplikacje
  2. Obok aplikacji generującej ruch na liście kliknij Wyświetl wykres.
  3. Na stronie kreatora wykresów aplikacji kliknij przycisk Wdróż.
  4. W oknie potwierdzenia kliknij Wdróż. Operacja wdrożenia może potrwać kilka minut. Po zakończeniu wdrażania obok węzłów pojawią się zielone ikony potwierdzenia. ee78bbf00e5db898.png

8. Wyszukaj treści wideo w hurtowni miejsca na dane

Po przetworzeniu danych wideo w aplikacji do przetwarzania możesz wyświetlić przetworzone dane wideo i wyszukiwać je na podstawie informacji z analizy zajętości.

  1. Na panelu Vertex AI Vision otwórz kartę Magazyny. Otwórz kartę Magazyny
  2. Na liście odszukaj magazyn „traffic-warehouse” i kliknij Wyświetl zasoby.
  3. W sekcji Liczba osób lub Liczba pojazdów ustaw wartość Min na 1, a Max na 5.
  4. Aby filtrować przetworzone dane wideo przechowywane w hurtowni multimediów Vertex AI Vision, kliknij Szukaj.

e636361b19738c8d.png

Wyświetlanie w konsoli Google Cloud danych wideo zgodnych z kryteriami wyszukiwania. Źródło filmu: Elizabeth Mavor na Pixabay (zastosowano kryteria wyszukiwania).

9. Analizowanie danych wyjściowych w tabeli BigQuery

Otwórz BigQuery

Wybierz zbiór danych: visionai_dataset.

Wybierz tabelę: APPLICATION_ID (w tym przypadku traffic-app).

Kliknij 3 kropki obok nazwy tabeli i wybierz Zapytanie.

Wpisz następujące zapytanie

Zapytanie 1: Zapytanie, które pozwala sprawdzić liczbę pojazdów przekraczającą każdy wiersz na minutę

abc.sql

—- Get list of active marked lines for each timeframe
WITH line_array AS (
  SELECT
  t.ingestion_time AS ingestion_time,
  JSON_QUERY_ARRAY(t.annotation.stats["crossingLineCounts"]) AS lines
  FROM
  `PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active lines to get individual entities details
flattened AS (
  SELECT
  line_array.ingestion_time,
  JSON_VALUE(line.annotation.id) as line_id,
  JSON_QUERY_ARRAY(line["positiveDirectionCounts"]) AS entities
  FROM line_array, unnest(line_array.lines) as line
 )
—- Generate aggregate vehicle count per zone w.r.t time 
SELECT
  STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, line_id,
  SUM(INT64(entity["count"])) as vehicle_count
FROM
  flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, line_id

Zapytanie2: zapytanie służące do sprawdzania liczby pojazdów na minutę w poszczególnych strefach

—- Get list of active zones for each timeframe
WITH zone_array AS (
     SELECT
     t.ingestion_time AS ingestion_time,
     JSON_QUERY_ARRAY(t.annotation.stats["activeZoneCounts"]) AS zones
     FROM
     `PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active zones to get individual entities details
flattened AS (
   SELECT zone_array.ingestion_time, JSON_VALUE(zone.annotation.id) as zone_id,
         JSON_QUERY_ARRAY(zone["counts"]) AS entities
   FROM zone_array, unnest(zone_array.zones) as zone
 )
—- Generate aggregate vehicle count per zone w.r.t time 
SELECT 
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, 
zone_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, zone_id

Aby zliczać osoby, w wymienionych wyżej zapytaniach możesz zmienić „Pojazd” na „Osoba”.

To ćwiczenie w Codelabs pokazuje przykładowe dane i wizualizację tylko dla Query1. W przypadku zapytania 2 możesz postępować podobnie.

e6fd891f3a46246.png

W menu po prawej stronie kliknij Przeglądaj dane i wybierz Przeglądaj w narzędziu Looker Studio.

9e737ddb4d0d25b6.png

W panelu „Wymiar” dodaj czas i zmień konfigurację godziny na datę i godzinę. W sekcji „Wymiar podziału” dodaj wymiar line_id. b5da9704ccd8db.png

Powyższy wykres pokazuje liczbę pojazdów/osób przejeżdżających przez każdą linię na minutę.

Ciemnoniebieskie i jasnoniebieskie słupki wskazują 2 różne identyfikatory linii.

10. 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, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.

Usuwanie projektu

Usuwanie poszczególnych zasobów

Materiały

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

Prześlij opinię

Kliknij tutaj, aby przesłać opinię

Ankieta

Jak będziesz korzystać z tego samouczka?

Przeczytaj go tylko Przeczytaj go i wykonaj ćwiczenia

Jak oceniasz przydatność tego ćwiczenia z programowania?

Bardzo przydatne Umiarkowanie przydatne