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

1. Cele

Omówienie

Dzięki temu ćwiczeniu w Codelabs dowiesz się, jak kompleksowo utworzyć aplikację Vertex AI Vision, aby wysyłać zdarzenia za pomocą funkcji zarządzania zdarzeniami. Użyjemy już wytrenowanego specjalistycznego modelu Analiza zajętości wbudowane funkcje generowania zdarzeń na podstawie następujących danych:

  • Zliczanie pojazdów i osób przechodzących przez drogę na określonej linii.
  • Licz liczbę pojazdów/osób w dowolnym stałym odcinku drogi.
  • Wykrywanie korków w dowolnej części drogi.

Czego się nauczysz

  • Jak przetwarzać filmy na potrzeby strumieniowania
  • Jak utworzyć aplikację w Vertex AI Vision
  • Różne funkcje dostępne w Statystykach zajętości i sposoby korzystania z nich
  • 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 Pub/Sub subskrypcji.
  • Jak skonfigurować zarządzanie zdarzeniami, aby wysyłać zdarzenia za pomocą tematu Pub/Sub.

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. Pozyskaj plik wideo na potrzeby przesyłania strumieniowego

Za pomocą vaictl możesz przesyłać strumieniowo dane wideo do aplikacji do analizy zajętości.

Zacznij od aktywowania interfejsu Vision AI API w konsoli Cloud

Rejestrowanie nowej transmisji

  1. Kliknij kartę strumienie w lewym panelu Vertex AI Vision.
  2. Kliknij Zarejestruj.
  3. W nazwie strumienia wpisz „traffic-stream”.
  4. W regionie wpisz „us-central1”
  5. Rejestracja po kliknięciu

Rejestracja w transmisji zajmie kilka minut.

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 .

Pozyskiwanie danych w strumieniu

  1. Aby wysłać ten lokalny plik wideo do strumienia danych wejściowych aplikacji, użyj tego polecenia. Musisz zastąpić te zmienne:
  • 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
export LOCAL_FILE=street_vehicles_people.mp4
  1. 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 słowo „nohup” na początku i „&” na końcu, aby było to zadanie 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 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

Widok transmisji wideo na żywo w interfejsieWidok na żywo przetwarzania filmu w strumieniu w konsoli Google Cloud. Autor filmu: Elizabeth Mavor na kanale Pixabay (dodana pikselizacja).

4. Tworzenie funkcji w Cloud Functions

Potrzebna będzie funkcja w Cloud Functions służąca do pobierania danych modelu może generować zdarzenia, które będą później wysyłane przez ten kanał.

Więcej informacji o funkcji w Cloud Functions znajdziesz tutaj

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

  1. Otwórz stronę tworzenia interfejsu funkcji w 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 przycisk Dalej, aby przejść do „kodu”. 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 „Wdróż”. przycisk wdrażania funkcji.

5. Utwórz temat Pub/Sub & subskrypcja

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

Więcej informacji o temacie Pub/Sub znajdziesz tutaj, a subskrypcję znajdziesz 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 potok łączący:

  • Przetwarzanie danych: kanał wideo jest przetwarzany w strumieniu.
  • Analiza danych: model AI(Computer Vision) można dodać po przetworzeniu danych.
  • 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 wykres aplikacji, musisz utworzyć pustą aplikację.

utworzyć aplikację w konsoli Google Cloud,

  1. Otwórz konsolę Google Cloud.
  2. Otwórz kartę Applications (Aplikacje) w panelu Vertex AI Vision.

Otwórz kartę Aplikacje.

  1. Kliknij przycisk dodawania Utwórz.
  2. Jako nazwę aplikacji wpisz natężenie ruchu i wybierz swój 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 analizy zajętości, który działa na pozyskanych danych.
  3. Węzeł pamięci masowej: hurtownia multimediów, w której przechowywane są przetworzone filmy, która służy jako magazyn metadanych. Magazyny metadanych obejmują informacje analityczne o przetworzonych danych wideo oraz informacje wywnioskowane przez modele AI.

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

  1. Otwórz kartę Applications (Aplikacje) w panelu Vertex AI Vision. Otwórz kartę Aplikacje.
  2. W wierszu z informacjami o natężeniu ruchu w aplikacji kliknij Wyświetl wykres. Wyświetli się wizualizacja wykresu potoku przetwarzania.

Dodawanie węzła pozyskiwania danych

  1. Aby dodać węzeł strumienia wejściowego, wybierz opcję Strumienie w sekcji Oprogramowanie sprzęgające menu bocznego.
  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 dodaj strumień ruchu jako jego nazwę.
  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 przebywania, aby wykrywać zator po narysowaniu aktywnej strefy.
  • (obecnie aktywna strefa i przecięcie linii nie są obsługiwane jednocześnie. korzystać 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 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ę.

7. Skonfiguruj zarządzanie 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ł zdarzenia, ustawiając jako cel utworzony wcześniej temat Pub/Sub. Możesz też ustawić minimalny odstęp czasu, aby uniknąć zapełnienia kanału zdarzeń tym samym zdarzeniem w krótkim czasie.

Wybierz funkcję 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 (określaną na podstawie nazwy funkcji).
  3. Wykres aplikacji automatycznie zapisze zmiany.

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

Konfigurowanie kanału zdarzenia

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

Nie udało się wczytać przykładowego okna powiadomienia o zdarzeniu

8. Wdrażanie aplikacji do użytkowania

Gdy stworzysz kompleksową aplikację ze wszystkimi niezbędnymi komponentami, ostatnim krokiem będzie jej wdrożenie.

  1. Otwórz kartę Applications (Aplikacje) w panelu Vertex AI Vision. Otwórz kartę Aplikacje.
  2. Wybierz Wyświetl wykres obok aplikacji zwiększającej natężenie ruchu na liście.
  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 znaczniki wyboru. ee78bbf00e5db898.png

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

Po pozyskaniu danych wideo do aplikacji do przetwarzania danych funkcja w Cloud Functions powinna generować zdarzenia, gdy model analizy zajętości wygeneruje adnotację. Zdarzenia te powinny zostać opublikowane jako wiadomości w temacie Pub/Sub oraz dostępnych w ramach subskrypcji.

W poniższych krokach przyjęto założenie, że masz subskrypcję pull.

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

Możesz też dowiedzieć się, jak odbierać wiadomości bez interfejsu użytkownika. 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 wykorzystasz ten samouczek?

Tylko do przeczytania Przeczytaj go i wykonaj ćwiczenia

Jak oceniasz przydatność tego ćwiczenia z programowania?

Bardzo przydatne Średnio przydatne