Aplikacja Vertex AI Vision Analytics do analizy zajętości ze zdarzeniami

1. Cele

Omówienie

W tym laboratorium programistycznym zajmiemy się kompleksowym tworzeniem aplikacji Vertex AI Vision do wysyłania zdarzeń za pomocą funkcji zarządzania zdarzeniami. Do generowania zdarzeń na podstawie zarejestrowanych informacji:

  • 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 przetwarzać filmy na potrzeby strumieniowania
  • 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 utworzyć funkcję w Cloud Functions, która będzie przetwarzać dane z modelu analizy zajętości.
  • Jak utworzyć temat i subskrypcję Pub/Sub.
  • Jak skonfigurować zarządzanie zdarzeniami, aby wysyłać zdarzenia przez temat Pub/Sub

2. Zanim zaczniesz

  1. W konsoli Google Cloud na stronie selektora projektu 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łącz interfejsy 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ę. 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 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ć kolejne role, kliknij Dodaj kolejną rolę i dodaj każdą z nich. 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. Przetwarzanie pliku wideo na potrzeby strumieniowego przesyłania

Za pomocą vaictl możesz przesyłać strumieniowo dane z filmu 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 strumienia może potrwać kilka minut.

Przygotowywanie przykładowego filmu

  1. Przykładowy film możesz skopiować za pomocą 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 .

Przesyłanie danych do strumienia

  1. Aby wysłać ten lokalny plik wideo do strumienia wejściowego 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.
  • –flaga pętli: 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
export LOCAL_FILE=street_vehicles_people.mp4
  1. 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 nadal przesyłać strumieniowo dane.
  • ( dodaj na początku słowo „nohup” i „&” na końcu, aby zrobić to w tle)
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 transmisji wideo na żywo w interfejsieWyświetlanie w konsoli Google Cloud podglądu na żywo wideo przetwarzanego na potrzeby strumienia. Źródło filmu: Elizabeth Mavor na Pixabay (dodano piksele).

4. Tworzenie funkcji w Cloud Functions

Będziemy potrzebować funkcji w Cloud Functions, aby podsumować dane modelu i wygenerować zdarzenia, które będą później wysyłane przez kanał zdarzeń.

Więcej informacji o Cloud Functions znajdziesz tutaj.

Tworzenie funkcji w Cloud Functions, która nasłuchuje Twojego modelu

  1. Otwórz stronę tworzenia interfejsu Cloud Functions.
  2. Ustaw nazwę funkcji, która będzie później używana do odwoływania się do tej funkcji w Cloud Functions w ustawieniach zarządzania zdarzeniami.
  3. Sprawdź, czy region odpowiada Twojej aplikacji.
  4. Dostosuj i zapisz ustawienia reguły.
  5. Kliknij następny przycisk, aby przejść do sekcji „kod”. Nie udało się wczytać przykładu tworzenia funkcji w Cloud Functions
  6. Edytuj funkcję w Cloud Functions. Oto przykład środowiska wykonawczego Node.js.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
 // Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
 // For more about logging, please see https://cloud.google.com/functions/docs/monitoring

 // The processor output will be stored in req.body.
 const messageString = constructMessage(req.body);

 // Send your message to operator output with res HTTP response context.
 res.status(200).send(messageString);
};

function constructMessage(data) {
 /**
  * Typically, your processor output should contains appPlatformMetadata & it's designed output.
  * For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
  * to construct the return annotation as such. 
  */

 // access appPlatformMetat.
 const appPlatformMetadata = data.appPlatformMetadata;

 // access annotations.
 const annotations = data.annotations.map(annotation => {
  // This is a mock OccupancyCountingPredictionResult annotation.
  return {"annotation" : {"track_info": {"track_id": "12345"}}};
 });

 const events = [];
 for(const annotation of annotations) {
   events.push({
       "event_message": "Detection event",
       "payload" : {
         "description" : "object detected"
       },
       "event_id" : "track_id_12345"
     });
 }

  /**
   * Typically, your cloud function should return a string represent a JSON which has two fields:
   * "annotations" must follow the specification of the target model.
   * "events" should be of type "AppPlatformEventBody".
   */
 const messageJson = {
   "annotations": annotations,
   "events": events,
 };
 return JSON.stringify(messageJson);
}
  1. Kliknij przycisk „Wdróż”, aby wdrożyć funkcję.

5. Utwórz temat i subskrypcję Pub/Sub

Musimy podać aplikacji temat Pub/Sub, do którego może wysłać zdarzenie. Aby otrzymywać zdarzenia, subskrypcja Pub/Sub musi subskrybować skonfigurowany moduł optyczny.

Więcej informacji o temacie Pub/Sub znajdziesz tutaj, a o subskrypcji tutaj.

Tworzenie tematu Pub/Sub

Aby utworzyć temat Pub/Sub, możesz użyć gcloud CLI: (zastąp SUBSCRIPTION_ID rzeczywistą wartością z konfiguracji)

gcloud pubsub topics create TOPIC_ID

Możesz też użyć interfejsu Pub/Sub.

Tworzenie subskrypcji Pub/Sub

Aby utworzyć subskrypcję Pub/Sub, możesz użyć gcloud CLI: (zastąp wartości SUBSCRIPTION_ID i TOPIC_ID rzeczywistą wartością z konfiguracji)

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

Możesz też użyć interfejsu Pub/Sub.

6. 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).
  • Przechowywanie danych: 2 wersje kanału wideo (pierwotny i strumień przetwarzany przez model AI) mogą być przechowywane w hurtowni multimediów.

W konsoli Google Cloud aplikacja ma postać wykresu.

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ć te 3 węzły do wykresu aplikacji:

  1. Węzeł przetwarzania: zasób strumienia, który pozyskuje dane.
  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 pozyskiwania 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 w 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 liczby obłożenia, wybierz opcję Analiza zajętości w sekcji Modele specjalistyczne w menu bocznym.
  2. Pozostaw domyślne opcje Osoby i Pojazdy.
  3. Dodaj linie w Przecinaniu linii. Za pomocą narzędzia Linia wielopunktowa narysuj linie, w których mają być wykrywane samochody oraz osoby wjeżdżające do środka lub wjeżdżające do środka.
  4. Narysuj aktywne strefy, aby policzyć osoby/pojazdy w tej strefie.
  5. Dodaj ustawienia czasu kontaktu, aby wykrywać natężenie ruchu, jeśli zostanie narysowana aktywna strefa.
  • (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ł miejsca docelowego danych wyjściowych (pamięć masowa), wybierz opcję Vertex AI Vision's Media Warehouse (Galeria multimediów Vertex AI Vision) w sekcji Connectors (Łączniki) w bocznym menu.
  2. W menu Hurtownia mediów Vertex AI Vision kliknij Połącz hurtownię.
  3. W menu Połącz hurtownię wybierz Utwórz nową hurtownię. Nazwij magazyn „traffic-warehouse” i pozostaw czas TTL ustawiony na 14 dni.
  4. Kliknij przycisk Utwórz, aby dodać hurtownię.

7. Konfigurowanie zarządzania zdarzeniami

Czas trwania: 02:00

Połączymy model z wcześniej utworzoną funkcją w Cloud Functions na potrzeby późniejszego przetwarzania, dzięki czemu funkcja w Cloud Functions może dowolnie pobierać dane wyjściowe modelu i generować zdarzenia odpowiadające Twoim potrzebom. Następnie skonfigurujemy kanał zdarzeń, ustawiając jako cel utworzony wcześniej temat Pub/Sub. Możesz też ustawić minimalny interwał, który pomoże uniknąć zasypywania kanału zdarzeń tym samym zdarzeniem w krótkim czasie.

Wybieranie funkcji w Cloud Functions do przetwarzania końcowego

  1. Kliknij węzeł przetwarzania danych(analiza zajętości) na wykresie aplikacji, aby otworzyć menu boczne.
  2. W menu Przetwarzanie wybierz funkcję w Cloud Functions (identyfikowaną na podstawie nazwy funkcji).
  3. Zmiany zostaną zapisane automatycznie przez wykres aplikacji.

Nie udało się wczytać przykładu konfiguracji przetwarzania końcowego

Konfigurowanie kanału zdarzenia

  1. Kliknij węzeł przetwarzania danych(analiza zajętości) na diagramie aplikacji, aby otworzyć menu boczne.
  2. Kliknij „SKONFIGURUJ POWIADOMIENIE O WYDARZENIACH” w sekcji Powiadomienia o wydarzeniach. Nie udało się wczytać przykładu powiadomienia o wydarzeniu
  3. Z menu wybierz temat Pub/Sub.
  4. (Opcjonalnie) ustaw minimalny interwał/częstotliwość publikowania wydarzeń.

Nie udało się wczytać przykładu okna powiadomienia o wydarzeniu

8. 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. Na panelu Vertex AI Vision otwórz kartę Aplikacje. 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óż. Wdrażanie może potrwać kilka minut. Po zakończeniu wdrażania obok węzłów pojawią się zielone ikony potwierdzenia. ee78bbf00e5db898.png

9. Weryfikowanie zdarzeń/wiadomości w subskrypcji Pub/Sub

Po przetworzeniu danych wideo w aplikacji do przetwarzania funkcja Cloud Functions powinna generować zdarzenia, gdy model analityczny dotyczącej zajętości generuje adnotacje. Następnie te zdarzenia powinny być publikowane jako wiadomości w temacie Pub/Sub i odbierane przez Twoją subskrypcję.

Poniższe czynności są oparte na założeniu, że masz subskrypcję typu pull.

  1. Otwórz listę subskrypcji Pub/Sub w projekcie i znajdź odpowiednią subskrypcję. Otwórz stronę listy subskrypcji Pub/Sub
  2. Otwórz kartę „Wiadomość”.
  3. Kliknij przycisk „Pobierz”.
  4. Wyświetl wiadomość w tabeli. obraz komunikatu dotyczącego subskrypcji Pub/Sub

Możesz też dowiedzieć się, jak odbierać wiadomości bez interfejsu. Otwórz stronę subskrypcji

10. Gratulacje

Gratulacje! Moduł ukończony.

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