1. Cele
Omówienie
W tym samouczku skupimy się na kompleksowym tworzeniu aplikacji Vertex AI Vision, która będzie wysyłać zdarzenia za pomocą funkcji zarządzania zdarzeniami. Do generowania zdarzeń na podstawie rejestrowania tych elementów będziemy używać wbudowanych funkcji wytrenowanego modelu specjalistycznego Analiza zajętości:
- Zliczanie pojazdów i osób przechodzących przez drogę w określonym miejscu.
- Zliczanie liczby pojazdów lub osób w dowolnym stałym regionie drogi.
- wykrywanie korków w dowolnej części drogi;
Czego się nauczysz
- Jak przesyłać filmy do transmisji strumieniowej
- Tworzenie aplikacji w Vertex AI Vision
- Różne funkcje dostępne w Occupancy Analytics 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 przetwarza dane modelu analizy obłożenia.
- Jak utworzyć temat i subskrypcję Pub/Sub.
- Jak skonfigurować zarządzanie zdarzeniami, aby wysyłać zdarzenia za pomocą tematu Pub/Sub.
2. Zanim zaczniesz
- W konsoli Google Cloud na stronie selektora projektów wybierz lub utwórz projekt w chmurze 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 jej zakończeniu możesz usunąć projekt wraz ze wszystkimi zasobami, które są z nim powiązane. 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łącz interfejsy Compute Engine 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ę Utwórz konto usługi
- Wybierz projekt.
- W polu Nazwa konta usługi wpisz nazwę. Konsola Google Cloud wypełni pole Identyfikator konta usługi na podstawie tej nazwy. W polu Opis konta usługi wpisz opis. Na przykład Konto usługi na potrzeby 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), Storage > Wyświetlający obiekty 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 w projekcie konto usługi może mieć dostęp. Możesz później cofnąć te role lub przyznać dodatkowe. W środowiskach produkcyjnych nie przyznawaj ról Właściciel, Edytujący ani Wyświetlający. Zamiast tego przyznaj gotową rolę lub rolę niestandardową, która spełnia Twoje potrzeby.
- Kliknij Dalej.
- Aby zakończyć tworzenie konta usługi, kliknij Gotowe. Nie zamykaj okna przeglądarki. Będzie Ci potrzebna 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 Dodaj klucz, a potem Utwórz nowy klucz.
- Kliknij Utwórz. Plik klucza JSON zostanie pobrany na komputer.
- Kliknij Zamknij.
- Zainstaluj i zainicjuj interfejs wiersza poleceń Google Cloud.
† Rola jest potrzebna tylko wtedy, gdy kopiujesz przykładowy film z zasobnika Cloud Storage.
3. Wprowadzanie pliku wideo do strumieniowania
Za pomocą narzędzia vaictl możesz przesyłać strumieniowo dane wideo do aplikacji do analizy obłożenia.
Zacznij od aktywowania interfejsu Vision AI API w konsoli Cloud.
Rejestrowanie nowego strumienia
- W panelu po lewej stronie Vertex AI Vision kliknij kartę strumieni kliknięć.
- Kliknij Zarejestruj się
- W polu Nazwa strumienia wpisz „traffic-stream”.
- W polu region wpisz „us-central1”.
- Kliknij Zarejestruj.
Rejestracja transmisji zajmie kilka minut.
Przygotuj przykładowy film
- Przykładowy film możesz skopiować za pomocą tego polecenia gsutil cp. Zastąp tę zmienną:
- ŹRÓDŁO: lokalizacja pliku wideo do użycia. Możesz użyć własnego 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 ludźmi i pojazdami, źródło).
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 gsutil cp $SOURCE .
Pozyskiwanie danych do strumienia
- Aby wysłać ten lokalny plik wideo do strumienia wejściowego aplikacji, użyj tego polecenia. Musisz zastąpić te zmienne:
- PROJECT_ID: identyfikator Twojego projektu Google Cloud.
- LOCATION_ID: identyfikator lokalizacji. Na przykład us-central1. Więcej informacji znajdziesz w artykule Lokalizacje Google Cloud.
- LOCAL_FILE: nazwa lokalnego pliku wideo. Na przykład street_vehicles_people.mp4.
- –loop: opcjonalna flaga. Powtarza dane pliku, 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
- To polecenie przesyła strumieniowo 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 strumieniowanie było ciągłe.
- ( dodaj „nohup” na początku i „&” na końcu, aby przekształcić go w 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 operacji vaictl ingest do pojawienia się filmu na panelu może minąć około 100 sekund.
Gdy przesyłanie strumieniowe będzie dostępne, możesz wyświetlić strumień wideo na karcie Strumienie w panelu Vertex AI Vision, wybierając strumień ruchu.
Podgląd na żywo wideo przesyłanego do strumienia w konsoli Google Cloud. Film: Elizabeth Mavor w serwisie Pixabay (dodano pikselizację).
4. Tworzenie funkcji w Cloud Functions
Potrzebujemy funkcji w Cloud Functions, która będzie przetwarzać dane modelu i generować zdarzenia, które później będą wysyłane przez kanał zdarzeń.
Więcej informacji o funkcji w Cloud Functions znajdziesz tutaj.
Utwórz funkcję w Cloud Functions, która nasłuchuje Twój model
- Otwórz stronę tworzenia interfejsu Cloud Functions.
- 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.
- Sprawdź, czy region jest zgodny z Twoim wnioskiem.
- Dostosuj, a następnie zapisz ustawienia aktywatora.
- Kliknij przycisk Dalej, aby przejść do części „kod”.

- Edytuj funkcję w Cloud Functions. Oto przykład ze środowiskiem wykonawczym 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);
}
- Aby wdrożyć funkcję, kliknij przycisk „Wdróż”.
5. Tworzenie tematu i subskrypcji Pub/Sub
Musimy podać aplikacji temat Pub/Sub, do którego może ona wysyłać zdarzenie. Aby otrzymywać zdarzenia, subskrypcja Pub/Sub musi subskrybować skonfigurowaną optykę.
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ć interfejsu wiersza poleceń gcloud: (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 SUBSCRIPTION_ID i TOPIC_ID rzeczywistymi wartościami 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 zautomatyzowany potok, który łączy:
- Pozyskiwanie danych: kanał wideo jest pozyskiwany do strumienia.
- Analiza danych: po przesłaniu danych można dodać model AI(Computer Vision).
- Przechowywanie danych: 2 wersje strumienia wideo (oryginalny strumień i strumień przetworzony przez model AI) mogą być przechowywane w hurtowni danych multimedialnych.
W konsoli Google Cloud aplikacja jest przedstawiana w postaci wykresu.
Tworzenie pustej aplikacji
Zanim wypełnisz wykres aplikacji, musisz najpierw utworzyć pustą aplikację.
Utwórz aplikację w konsoli Google Cloud.
- Otwórz konsolę Google Cloud.
- Otwórz kartę Aplikacje w panelu Vertex AI Vision.
- Kliknij przycisk Utwórz.
- Wpisz traffic-app jako nazwę aplikacji i wybierz region.
- Kliknij Utwórz.
Dodawanie węzłów komponentów aplikacji
Po utworzeniu pustej aplikacji możesz dodać do wykresu aplikacji 3 węzły:
- Węzeł pozyskiwania: zasób strumienia, który pozyskuje dane.
- Węzeł przetwarzania: model analityki zajętości, który przetwarza dane.
- Węzeł pamięci: hurtownia danych multimedialnych, w której przechowywane są przetworzone filmy i metadane. Bazy danych metadanych zawierają informacje analityczne o przetworzonych danych wideo oraz informacje wywnioskowane przez modele AI.
Dodaj węzły komponentów do aplikacji w konsoli.
- Otwórz kartę Aplikacje w panelu Vertex AI Vision. Otwórz kartę Aplikacje
- W wierszu dotyczącym aplikacji do nawigacji wybierz Wyświetl wykres. Spowoduje to przejście do wizualizacji graficznej potoku przetwarzania.
Dodawanie węzła pozyskiwania danych
- Aby dodać węzeł strumienia wejściowego, w sekcji Oprogramowanie sprzęgające w menu bocznym wybierz opcję Strumienie.
- W sekcji Źródło w wyświetlonym menu Strumień kliknij Dodaj strumienie.
- W menu Dodaj strumienie wybierz Zarejestruj nowe strumienie i dodaj strumień ruchu jako nazwę strumienia.
- Aby dodać strumień do wykresu aplikacji, kliknij Dodaj strumienie.
Dodawanie węzła przetwarzania danych
- Aby dodać węzeł modelu zliczania osób, w sekcji Modele specjalistyczne w menu bocznym wybierz opcję analiza liczby osób.
- Pozostaw domyślne ustawienia Osoby i Pojazdy.
- Dodaj linie w sekcji Przekroczenie linii. Użyj narzędzia linia wielopunktowa, aby narysować linie w miejscach, w których chcesz wykrywać samochody lub osoby wjeżdżające i wyjeżdżające.
- Narysuj aktywne strefy, aby zliczać osoby lub pojazdy w danej strefie.
- Dodaj ustawienia czasu przebywania, aby wykrywać zatory, jeśli narysowana jest aktywna strefa.
- (obecnie nie można jednocześnie korzystać z aktywnej strefy i przekraczania linii. Używaj tylko jednej funkcji naraz).


Dodawanie węzła pamięci danych
- 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.
- W menu Hurtownia danych multimedialnych Vertex AI Vision kliknij Połącz hurtownię.
- W menu Połącz hurtownię wybierz Utwórz nową hurtownię. Nadaj hurtowni nazwę traffic-warehouse i pozostaw czas TTL ustawiony na 14 dni.
- Kliknij przycisk Utwórz, aby dodać hurtownię.
7. Konfigurowanie zarządzania zdarzeniami
Czas trwania: 02:00
Połączymy model z wcześniej utworzoną funkcją Cloud Functions do przetwarzania końcowego. Funkcja ta może swobodnie przetwarzać dane wyjściowe modelu i generować zdarzenia dostosowane do Twoich potrzeb. Następnie skonfigurujemy kanał zdarzeń, ustawiając utworzony wcześniej temat Pub/Sub jako miejsce docelowe. Możesz też ustawić minimalny interwał, który pomoże uniknąć zalewu kanału wydarzeń tym samym wydarzeniem w krótkim czasie.
Wybieranie funkcji w Cloud Functions do przetwarzania końcowego
- W grafie aplikacji kliknij węzeł przetwarzania danych(analiza obłożenia), aby otworzyć menu boczne.
- W menu Post-processing (Przetwarzanie końcowe) wybierz funkcję w Cloud Functions (zidentyfikowaną według nazwy).
- Wykres aplikacji automatycznie zapisze zmiany.

Konfigurowanie kanału zdarzeń
- W grafie aplikacji kliknij węzeł przetwarzania danych(analiza obłożenia), aby otworzyć menu boczne.
- W sekcji Powiadomienie o zdarzeniu kliknij „SKONFIGURUJ POWIADOMIENIE O ZDARZENIU”.

- W menu wybierz temat Pub/Sub.
- (opcjonalnie) ustaw minimalny odstęp czasu lub częstotliwość publikowania zdarzeń.

8. Wdrażanie aplikacji do użytkowania
Po utworzeniu aplikacji kompleksowej ze wszystkimi niezbędnymi komponentami ostatnim krokiem jest jej wdrożenie.
- Otwórz kartę Aplikacje w panelu Vertex AI Vision. Otwórz kartę Aplikacje
- Na liście obok aplikacji do nawigacji wybierz Wyświetl wykres.
- Na stronie narzędzia do tworzenia wykresów aplikacji kliknij przycisk Wdróż.
- W wyświetlonym oknie potwierdzenia kliknij Wdróż. Wdrożenie może potrwać kilka minut. Po zakończeniu wdrażania obok węzłów pojawią się zielone ikony potwierdzenia.

9. Sprawdzanie zdarzeń/wiadomości w subskrypcji Pub/Sub
Po przesłaniu danych wideo do aplikacji przetwarzającej funkcja Cloud Function powinna generować zdarzenia, gdy model analityczny dotyczący zajętości wygeneruje adnotację. Następnie te zdarzenia powinny być publikowane jako wiadomości w temacie Pub/Sub i odbierane przez subskrypcję.
Poniższe instrukcje zakładają, że masz subskrypcję typu pull.
- Otwórz listę subskrypcji Pub/Sub w projekcie i znajdź odpowiednią subskrypcję. Otwórz stronę z listą subskrypcji Pub/Sub
- Otwórz kartę „Wiadomość”.
- Kliknij przycisk „Pobierz”.
- Wyświetl wiadomość w tabeli.

Możesz też dowiedzieć się, jak odbierać wiadomości bez interfejsu. Otwórz stronę subskrypcji
10. Gratulacje
Gratulacje! Moduł został 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ę