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
- 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
- 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łącz interfejsy 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ę. 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.
- 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), 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.
- 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. Plik klucza JSON zostanie pobrany na komputer.
- Kliknij Zamknij.
- 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
- W panelu bocznym Vertex AI Vision kliknij kartę strumieni.
- Kliknij Zarejestruj się.
- W polu Nazwa strumienia wpisz „traffic-stream”.
- W polu Region wpisz „us-central1”.
- Kliknij Rejestracja.
Rejestracja strumienia może potrwać kilka minut.
Przygotowywanie przykładowego filmu
- 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
- 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
- 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.
Wyś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
- 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 odpowiada Twojej aplikacji.
- Dostosuj i zapisz ustawienia reguły.
- Kliknij następny przycisk, aby przejść do sekcji „kod”.
- 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);
}
- 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.
- Otwórz konsolę Google Cloud.
- Na panelu Vertex AI Vision otwórz kartę Aplikacje.
- 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ć te 3 węzły do wykresu aplikacji:
- Węzeł przetwarzania: zasób strumienia, który pozyskuje dane.
- węzeł przetwarzania: model analityczny zajętości, który działa na podstawie przetworzonych danych;
- 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.
- Na panelu Vertex AI Vision otwórz kartę Aplikacje. Otwórz kartę Aplikacje.
- W wierszu aplikacji generującej wizyty kliknij Wyświetl wykres. Przejdziesz do wizualizacji potoku przetwarzania w postaci wykresu.
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 menu Strumień, które się otworzy, wybierz Dodaj strumienie.
- W menu Dodaj strumienie wybierz Zarejestruj nowe strumienie i jako nazwę strumienia wpisz traffic-stream.
- Aby dodać strumień do wykresu aplikacji, kliknij Dodaj strumienie.
Dodawanie węzła przetwarzania danych
- Aby dodać węzeł modelu liczby obłożenia, wybierz opcję Analiza zajętości w sekcji Modele specjalistyczne w menu bocznym.
- Pozostaw domyślne opcje Osoby i Pojazdy.
- 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.
- Narysuj aktywne strefy, aby policzyć osoby/pojazdy w tej strefie.
- 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.)
Dodawanie węzła przechowywania danych
- 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.
- W menu Hurtownia mediów Vertex AI Vision kliknij Połącz hurtownię.
- W menu Połącz hurtownię wybierz Utwórz nową hurtownię. Nazwij magazyn „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ą 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
- Kliknij węzeł przetwarzania danych(analiza zajętości) na wykresie aplikacji, aby otworzyć menu boczne.
- W menu Przetwarzanie wybierz funkcję w Cloud Functions (identyfikowaną na podstawie nazwy funkcji).
- Zmiany zostaną zapisane automatycznie przez wykres aplikacji.
Konfigurowanie kanału zdarzenia
- Kliknij węzeł przetwarzania danych(analiza zajętości) na diagramie aplikacji, aby otworzyć menu boczne.
- Kliknij „SKONFIGURUJ POWIADOMIENIE O WYDARZENIACH” w sekcji Powiadomienia o wydarzeniach.
- Z menu wybierz temat Pub/Sub.
- (Opcjonalnie) ustaw minimalny interwał/częstotliwość publikowania wydarzeń.
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.
- Na panelu Vertex AI Vision otwórz kartę Aplikacje. Otwórz kartę Aplikacje
- Obok aplikacji generującej ruch na liście kliknij Wyświetl wykres.
- Na stronie kreatora wykresów aplikacji kliknij przycisk Wdróż.
- 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.
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.
- Otwórz listę subskrypcji Pub/Sub w projekcie i znajdź odpowiednią subskrypcję. Otwórz stronę listy 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ł 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ę