App di monitoraggio del traffico Vertex AI Vision

1. Obiettivi

Panoramica

Questo codelab si concentrerà sulla creazione di un'applicazione Vertex AI Vision end-to-end per monitorare i filmati video del traffico in tempo reale. Utilizzeremo le funzionalità integrate del modello specializzato preaddestrato Analisi dell'occupazione per acquisire le seguenti informazioni:

  • Conta il numero di veicoli e persone che attraversano una strada in un determinato punto.
  • Conta il numero di veicoli/persone in qualsiasi area fissa della strada.
  • Rilevamento di ingorghi in qualsiasi parte della strada.

Cosa imparerai a fare

  • Come configurare una VM per importare video per lo streaming
  • Come creare un'applicazione in Vertex AI Vision
  • Diverse funzionalità disponibili in Dati sull'occupazione e come utilizzarle
  • Come eseguire il deployment dell'app
  • Come cercare video nello spazio di archiviazione Media Warehouse di Vertex AI Vision.
  • Come collegare l'output a BigQuery, scrivere una query SQL per estrarre informazioni dall'output JSON del modello e visualizzare il risultato in tempo reale in Looker Studio.

2. Prima di iniziare

  1. Nella pagina del selettore dei progetti della console Google Cloud, seleziona o crea un progetto Google Cloud. Nota: se non prevedi di conservare le risorse che crei in questa procedura, crea un progetto invece di selezionarne uno esistente. Una volta completata questa procedura, puoi eliminare il progetto e tutte le relative risorse. Vai al selettore progetti
  2. Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come controllare se la fatturazione è abilitata per un progetto.
  3. Abilita le API Compute Engine e Vision AI. Abilita le API

Crea un account di servizio:

  1. Nella console Google Cloud, vai alla pagina Crea account di servizio. Vai a Crea account di servizio
  2. Seleziona il progetto.
  3. Inserisci un nome nel campo Nome account di servizio. La console Google Cloud compila il campo ID account di servizio in base a questo nome. Nel campo Descrizione account di servizio, inserisci una descrizione. ad esempio Account di servizio per la guida rapida.
  4. Fai clic su Crea e continua.
  5. Per fornire l'accesso al progetto, concedi i seguenti ruoli al tuo account di servizio: Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (beta), Storage > Storage Object Viewer † . Nell'elenco Seleziona un ruolo, seleziona un ruolo. Per altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo. Nota: il campo Ruolo influisce sulle risorse a cui il tuo account di servizio può accedere nel progetto. Puoi revocare questi ruoli o concederne altri in un secondo momento. Negli ambienti di produzione, non concedere i ruoli Proprietario, Editor o Visualizzatore. Concedi invece un ruolo predefinito o un ruolo personalizzato che soddisfi le tue esigenze.
  6. Fai clic su Continua.
  7. Fai clic su Fine per completare la creazione dell'account di servizio. Non chiudere la finestra del browser. Lo utilizzerai nel passaggio successivo.

Crea una chiave dell'account di servizio:

  1. Nella console Google Cloud, fai clic sull'indirizzo email dell'account di servizio che hai creato.
  2. Fai clic su Chiavi.
  3. Fai clic su Aggiungi chiave e poi su Crea nuova chiave.
  4. Fai clic su Crea. Un file della chiave JSON viene scaricato sul computer.
  5. Fai clic su Chiudi.
  6. Installa e inizializza Google Cloud CLI.

† Ruolo necessario solo se copi un file video di esempio da un bucket Cloud Storage.

3. Configurare una VM per lo streaming di video

Prima di creare un'app in Dati sull'occupazione, devi registrare uno stream che potrà essere utilizzato in un secondo momento dall'app.

In questo tutorial crei un'istanza VM Compute Engine che ospita un video e invii i dati video in streaming dalla VM.

Crea una VM Linux

Il primo passaggio per l'invio di video da un'istanza VM di Compute Engine è la creazione dell'istanza VM.

  1. Nella console, vai alla pagina Istanze VM. Vai a Istanze VM
  2. Seleziona il progetto e fai clic su Continua.
  3. Fai clic su Crea istanza.
  4. Specifica un nome per la VM. Per ulteriori informazioni, consulta la convenzione di denominazione delle risorse.
  5. (Facoltativo) Modifica la Zona per questa VM. Compute Engine genera in modo casuale l'elenco delle zone all'interno di ogni regione per incoraggiarne l'utilizzo in più zone.
  6. Accetta le altre opzioni predefinite. Per ulteriori informazioni su queste opzioni, vedi Creare e avviare una VM.
  7. Per creare e avviare la VM, fai clic su Crea.

Configurare l'ambiente VM

Dopo l'avvio della VM, puoi utilizzare la console per accedere tramite SSH alla VM dal browser. Dopodiché, puoi scaricare lo strumento a riga di comando vaictl per importare i video nel tuo stream.

Stabilisci una connessione SSH alla VM

  1. Nella console, vai alla pagina Istanze VM. Vai a Istanze VM
  2. Nella sezione Connetti della riga dell'istanza che hai creato, fai clic su SSH. Viene aperta una connessione SSH in una nuova finestra del browser. L'opzione SSH nell'interfaccia utente

Scarica lo strumento a riga di comando vaictl

  1. Nella finestra SSH nel browser, scarica lo strumento a riga di comando Vertex AI Vision (vaictl) utilizzando il seguente comando:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
  1. Installa lo strumento a riga di comando eseguendo il seguente comando:
sudo apt install ./visionai_0.0-4_amd64.deb
  1. Puoi testare l'installazione eseguendo questo comando:
vaictl --help

4. Importare un file video per lo streaming

Dopo aver configurato l'ambiente VM, puoi copiare un file video di esempio e utilizzare vaictl per inviare i dati video in streaming all'app di analisi delle presenze.

Per iniziare, attiva l'API Vision AI nella console Cloud

Registrare un nuovo stream

  1. Fai clic sulla scheda Stream nel riquadro sinistro di Vertex AI Vision.
  2. Fai clic su Registrati
  3. Nel nome dello stream, inserisci "traffic-stream".
  4. Nella regione, inserisci "us-central1"
  5. Fai clic su Registrati

La registrazione dello stream richiederà un paio di minuti.

Copiare un video di esempio nella VM

  1. Nella finestra SSH-in-browser della VM, copia un video di esempio con il seguente comando gsutil cp. Sostituisci la seguente variabile:
  • ORIGINE: la posizione di un file video da utilizzare. Puoi utilizzare la tua sorgente file video (ad esempio gs://BUCKET_NAME/FILENAME.mp4) o il video di esempio (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(video con persone e veicoli, source)
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Trasmetti in streaming i video da una VM e importa i dati nel tuo stream

  1. Per inviare questo file video locale allo stream di input dell'app, utilizza il comando seguente. Devi apportare le seguenti sostituzioni delle variabili:
  • PROJECT_ID: l'ID del tuo progetto Google Cloud.
  • LOCATION_ID: il tuo ID posizione. Ad esempio, us-central1. Per ulteriori informazioni, consulta Località cloud.
  • LOCAL_FILE: il nome di un file video locale. Ad esempio, street_vehicles_people.mp4.
  • –loop flag: facoltativo. Esegue il looping dei dati del file per simulare lo streaming.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4
  1. Questo comando trasmette in streaming un file video a uno stream. Se utilizzi il flag -loop, il video viene ripetuto nello stream finché non interrompi il comando. Eseguiremo questo comando come job in background, in modo che mantenga il flusso di dati anche dopo la disconnessione della VM.
  • ( aggiungi nohup all'inizio e "&" alla fine per renderlo un job in background)
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 &

Potrebbero trascorrere circa 100 secondi tra l'avvio dell'operazione di importazione vaictl e la visualizzazione del video nella dashboard.

Una volta che l'importazione dello stream è disponibile, puoi visualizzare il feed video nella scheda Stream della dashboard di Vertex AI Vision selezionando lo stream traffic-stream.

Vai alla scheda Stream

Visualizzazione del video in diretta in streaming nell&#39;interfaccia utenteVisione in diretta del video importato nello stream all'interno della console Google Cloud. Credito video: Elizabeth Mavor su Pixabay (pixelizzazione aggiunta).

5. Crea un'applicazione

Il primo passaggio consiste nel creare un'app che elabori i dati. Un'app può essere considerata una pipeline automatizzata che collega quanto segue:

  • Importazione dei dati: un feed video viene importato in uno stream.
  • Analisi dei dati: un modello di IA(Visione artificiale) può essere aggiunto dopo l'importazione.
  • Archiviazione dei dati: le due versioni del feed video (lo stream originale e lo stream elaborato dal modello di IA) possono essere archiviate in un media warehouse.

Nella console Google Cloud, un'app è rappresentata come un grafico.

Creare un'app vuota

Prima di poter compilare il grafo delle app, devi creare un'app vuota.

Crea un'app nella console Google Cloud.

  1. Vai alla console Google Cloud.
  2. Apri la scheda Applicazioni della dashboard di Vertex AI Vision.

Vai alla scheda Applicazioni

  1. Fai clic sul pulsante Crea.
  2. Inserisci traffic-app come nome dell'app e scegli la tua regione.
  3. Fai clic su Crea.

Aggiungere nodi dei componenti dell'app

Dopo aver creato l'applicazione vuota, puoi aggiungere i tre nodi al grafo dell'app:

  1. Nodo di importazione: la risorsa di flusso che importa i dati inviati da un'istanza VM di Compute Engine creata da te.
  2. Nodo di elaborazione: il modello di analisi dell'occupazione che agisce sui dati importati.
  3. Nodo di archiviazione: il warehouse multimediale che archivia i video elaborati e funge da archivio dei metadati. I datastore dei metadati includono informazioni di analisi sui dati video importati e informazioni dedotte dai modelli di IA.

Aggiungi nodi dei componenti all'app nella console.

  1. Apri la scheda Applicazioni della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
  2. Nella riga traffico-app, seleziona Visualizza grafico. Viene visualizzata la visualizzazione del grafico della pipeline di elaborazione.

Aggiungere un nodo di importazione dati

  1. Per aggiungere un nodo di stream di input, seleziona l'opzione Stream nella sezione Connettori del menu laterale.
  2. Nella sezione Origine del menu Stream che si apre, seleziona Aggiungi flussi.
  3. Nel menu Aggiungi stream, scegli Registra nuovi stream e aggiungi stream di traffico come nome dello stream.
  4. Per aggiungere lo stream al grafico dell'app, fai clic su Aggiungi stream.

Aggiungere un nodo di elaborazione dei dati

  1. Per aggiungere il nodo del modello di conteggio del numero di persone, seleziona l'opzione Analisi del numero di persone nella sezione Modelli specializzati del menu laterale.
  2. Lascia le selezioni predefinite Persone e Veicoli.
  3. Aggiungi linee in Incrocio di linee. Utilizza lo strumento Linea multipunto per disegnare le linee in cui devi rilevare auto o persone in entrata o in uscita.
  4. Disegna le zone attive per conteggiare le persone/i veicoli al loro interno.
  5. Aggiungi le impostazioni del tempo di attesa per rilevare la congestione se viene tracciata una zona attiva.
  • (attualmente la zona attiva e il passaggio della linea non sono supportati contemporaneamente. Utilizza una sola funzione alla volta.)

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

Aggiungere un nodo di archiviazione dei dati

  1. Per aggiungere il nodo di destinazione di output (spazio di archiviazione), seleziona l'opzione Media Warehouse di Vertex AI Vision nella sezione Connettori del menu laterale.
  2. Nel menu Media Warehouse di Vertex AI Vision, fai clic su Connetti warehouse.
  3. Nel menu Collega magazzino, seleziona Crea nuovo magazzino. Assegna il nome traffic-warehouse al magazzino e lascia la durata TTL a 14 giorni.
  4. Fai clic sul pulsante Crea per aggiungere il warehouse.

6. Collega l'output alla tabella BigQuery

Quando aggiungi un connettore BigQuery all'app Vertex AI Vision, tutti gli output del modello dell'app connesso vengono importati nella tabella di destinazione.

Puoi creare la tua tabella BigQuery e specificarla quando aggiungi un connettore BigQuery all'app oppure lasciare che la piattaforma dell'app Vertex AI Vision crei automaticamente la tabella.

Creazione automatica di tabelle

Se consenti alla piattaforma di app Vertex AI Vision di creare automaticamente la tabella, puoi specificare questa opzione quando aggiungi il nodo del connettore BigQuery.

Se vuoi utilizzare la creazione automatica delle tabelle, si applicano le seguenti condizioni per i set di dati e le tabelle:

  • Set di dati: il nome del set di dati creato automaticamente è visionai_dataset.
  • Tabella: il nome della tabella creata automaticamente è visionai_dataset.APPLICATION_ID.
  • Gestione degli errori:
  • Se esiste già una tabella con lo stesso nome nello stesso set di dati, non viene eseguita alcuna creazione automatica.
  1. Apri la scheda Applications (Applicazioni) della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
  2. Seleziona Visualizza app accanto al nome dell'applicazione nell'elenco.
  3. Nella pagina di creazione dell'applicazione, seleziona BigQuery dalla sezione Connettori.
  4. Lascia vuoto il campo BigQuery path. ee0b67d4ab2263d.png
  5. In Memorizza i metadati da: seleziona solo "Analytics sulla presenza" e deseleziona gli stream.

Il grafico dell'app finale dovrebbe avere il seguente aspetto:

1787242465fd6da7.png

7. Esegui il deployment dell'app per utilizzarla

Dopo aver creato l'app end-to-end con tutti i componenti necessari, l'ultimo passaggio per utilizzarla è il deployment.

  1. Apri la scheda Applications (Applicazioni) della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
  2. Seleziona Visualizza grafico accanto all'app di traffico nell'elenco.
  3. Nella pagina del generatore di grafici delle applicazioni, fai clic sul pulsante Esegui il deployment.
  4. Nella finestra di dialogo di conferma seguente, seleziona Esegui il deployment. Il completamento dell'operazione di deployment potrebbe richiedere diversi minuti. Al termine del deployment, accanto ai nodi vengono visualizzati dei segni di spunta verdi. ee78bbf00e5db898.png

8. Cercare i contenuti video nel magazzino di archiviazione

Dopo aver importato i dati video nell'app di elaborazione, puoi visualizzarli e cercarli in base alle informazioni di analisi del livello di occupazione.

  1. Apri la scheda Warehouse della dashboard di Vertex AI Vision. Vai alla scheda Magazzini
  2. Individua il magazzino traffico-magazzino nell'elenco e fai clic su Visualizza asset.
  3. Nella sezione Conteggio persone o Conteggio veicoli, imposta il valore Min su 1 e il valore Max su 5.
  4. Per filtrare i dati video elaborati archiviati nel Media Warehouse di Vertex AI Vision, fai clic su Cerca.

e636361b19738c8d.png

Una visualizzazione dei dati video archiviati che corrispondono ai criteri di ricerca nella console Google Cloud. Credito video: Elizabeth Mavor su Pixabay (criteri di ricerca applicati).

9. Analizza l'output nella tabella BigQuery

Vai a BigQuery

Seleziona il set di dati: visionai_dataset

Seleziona la tabella: il tuo APPLICATION_ID (in questo caso traffic-app)

Fai clic sui tre puntini a destra del nome della tabella e fai clic su Query

Scrivi la seguente query

Query1: query per verificare il conteggio dei veicoli che attraversa ogni riga al minuto

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

Query 2: query per controllare il numero di veicoli al minuto in ogni zona

—- 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

Nelle query precedenti puoi sostituire "Veicolo" con "Persona" per conteggiare le persone.

Questo codelab mostrerà i dati di esempio e la visualizzazione solo per la query 1. Puoi seguire una procedura simile per la query 2.

e6fd891f3a46246.png

Fai clic su Esplora dati nel menu laterale a destra e seleziona Esplora con Looker Studio

9e737ddb4d0d25b6.png

Nel riquadro "Dimensione", aggiungi l'ora e modifica la relativa configurazione in data e ora. In "Dimensione di distribuzione", aggiungi line_id. b5da9704ccd8db.png

Il grafico sopra riportato mostra il numero di veicoli/persone che attraversano ogni linea al minuto.

Le barre blu scuro e blu chiaro indicano i due diversi ID riga.

10. Complimenti

Complimenti, hai completato il lab.

Pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Elimina singole risorse

Risorse

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

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

Feedback

Fai clic qui per fornire un feedback

Sondaggio

Come utilizzerai questo tutorial?

Leggi solo Leggi e completa gli esercizi

Quanto è stato utile questo codelab?

Molto utile Moderatamente utile