1. Obiettivi
Panoramica
Questo codelab si concentrerà sulla creazione end-to-end di un'applicazione Vertex AI Vision per monitorare i filmati video del traffico in tempo reale. Utilizzeremo le funzionalità integrate del modello specializzato preaddestrato Analisi dell'occupazione per acquisire quanto segue:
- Conta il numero di veicoli e persone che attraversano una strada in corrispondenza di una determinata linea.
- Conta il numero di veicoli/persone in una regione fissa della strada.
- Rilevamento di congestione in qualsiasi parte della strada.
Cosa imparerai a fare
- Come configurare una VM per l'importazione di video per lo streaming
- Come creare un'applicazione in Vertex AI Vision
- Diverse funzionalità disponibili in Occupancy Analytics e come utilizzarle
- Come eseguire il deployment dell'app
- Come cercare video in Media Warehouse di Vertex AI Vision.
- Come collegare l'output a BigQuery, scrivere una query SQL per estrarre approfondimenti dall'output JSON del modello e visualizzare il risultato in tempo reale in Looker Studio.
2. Prima di iniziare
- Nella console Google Cloud, nella pagina di selezione del progetto, 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 già esistente. Una volta completata questa procedura, puoi eliminare il progetto e tutte le relative risorse. Vai al selettore di progetti
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.
- Abilita le API Compute Engine e Vision AI. Abilita le API
Crea un service account:
- Nella console Google Cloud, vai alla pagina Crea service account. Vai a Crea service account
- Seleziona il progetto.
- Nel campo Nome service account, inserisci un nome. La console Google Cloud compila il campo ID service account in base a questo nome. Nel campo Descrizione service account, inserisci una descrizione. Ad esempio, Service account for quickstart.
- Fai clic su Crea e continua.
- Per fornire l'accesso al tuo progetto, concedi i seguenti ruoli al tuo service account: Vision AI > Editor Vision AI, Compute Engine > Amministratore istanze di Compute Engine (beta), Storage > Visualizzatore oggetti Storage † . Nell'elenco Seleziona un ruolo, seleziona un ruolo. Per i ruoli aggiuntivi, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo successivo. Nota: il campo Ruolo influisce sulle risorse a cui il service account può accedere nel tuo progetto. Puoi revocare questi ruoli o concederne altri in un secondo momento. In 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.
- Fai clic su Continua.
- Fai clic su Fine per completare la creazione del service account. Non chiudere la finestra del browser. Lo utilizzerai nel prossimo passaggio.
Crea una chiave dell'account di servizio:
- Nella console Google Cloud, fai clic sull'indirizzo email del service account che hai creato.
- Fai clic su Chiavi.
- Fai clic su Aggiungi chiave, poi su Crea nuova chiave.
- Fai clic su Crea. Un file della chiave JSON viene scaricato sul computer.
- Fai clic su Chiudi.
- 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 video
Prima di creare un'app in Occupancy Analytics, devi registrare uno stream che potrà essere utilizzato in un secondo momento dall'app.
In questo tutorial creerai un'istanza VM di Compute Engine che ospita un video e invierai i dati di streaming video dalla VM.
Crea una VM Linux
Il primo passaggio per inviare video da un'istanza VM di Compute Engine è creare l'istanza VM.
- Nella console, vai alla pagina Istanze VM. Vai a Istanze VM
- Seleziona il progetto e fai clic su Continua.
- Fai clic su Crea istanza.
- Specifica un Nome per la VM. Per saperne di più, consulta le convenzioni per la denominazione delle risorse.
- (Facoltativo) Modifica la zona per questa VM. Compute Engine randomizza l'elenco delle zone all'interno di ogni regione per incoraggiare l'utilizzo in più zone.
- Accetta le opzioni predefinite rimanenti. Per saperne di più su queste opzioni, consulta Crea e avvia una VM.
- Per creare e avviare la VM, fai clic su Crea.
Configura l'ambiente VM
Dopo l'avvio della VM, puoi utilizzare la console per accedere alla VM tramite SSH dal browser. Quindi, puoi scaricare lo strumento a riga di comando vaictl per inserire il video nel tuo stream.
Stabilisci una connessione SSH alla VM
- Nella console, vai alla pagina Istanze VM. Vai a Istanze VM
- 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.

Scaricare lo strumento a riga di comando vaictl
- 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
- Installa lo strumento a riga di comando eseguendo il seguente comando:
sudo apt install ./visionai_0.0-4_amd64.deb
- 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 poi utilizzare vaictl per trasmettere in streaming i dati video all'app di analisi dell'occupazione.
Inizia attivando l'API Vision AI in Cloud Console
Registrare un nuovo stream
- Fai clic sulla scheda Flussi di clic nel riquadro a sinistra di Vertex AI Vision.
- Fai clic su Registrati.
- In Nome stream, inserisci "traffic-stream".
- Nella regione, inserisci "us-central1".
- Fai clic su Registrati.
La registrazione dello stream richiederà un paio di minuti.
Copia un video di esempio nella VM
- Nella finestra SSH nel browser della VM, copia un video di esempio con il seguente comando gsutil cp. Sostituisci la seguente variabile:
- SOURCE: La posizione di un file video da utilizzare. Puoi utilizzare la tua origine del 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, origine).
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 gsutil cp $SOURCE .
Riprodurre in streaming video dalla VM e importare dati nello stream
- Per inviare questo file video locale al flusso di input dell'app, utilizza il comando seguente. Devi effettuare le seguenti sostituzioni di variabili:
- PROJECT_ID: l'ID del tuo progetto Google Cloud.
- LOCATION_ID: il tuo ID località. Ad esempio, us-central1. Per maggiori informazioni, consulta Località cloud.
- LOCAL_FILE: il nome di un file video locale. Ad esempio, street_vehicles_people.mp4.
- – Flag loop: facoltativo. Esegue il loop dei dati dei 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
- Questo comando trasmette in streaming un file video a uno stream. Se utilizzi il flag -loop, il video viene riprodotto in loop nello stream finché non arresti il comando. Eseguiamo questo comando come job in background in modo che lo streaming continui 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 essere necessari circa 100 secondi tra l'avvio dell'operazione di importazione vaictl e la visualizzazione del video nella dashboard.
Una volta disponibile l'importazione dello stream, puoi visualizzare il feed video nella scheda Stream della dashboard di Vertex AI Vision selezionando lo stream del traffico.
Visualizzazione in tempo reale del video in fase di inserimento nello stream nella console Google Cloud. Video di: Elizabeth Mavor su Pixabay (pixelizzazione aggiunta).
5. Crea un'applicazione
Il primo passaggio consiste nel creare un'app che elabori i tuoi dati. Un'app può essere considerata una pipeline automatizzata che collega:
- Importazione dei dati: un feed video viene importato in uno stream.
- Analisi dei dati: dopo l'importazione, è possibile aggiungere un modello di AI(Computer Vision).
- Archiviazione dei dati: le due versioni del feed video (lo stream originale e lo stream elaborato dal modello di AI) possono essere archiviate in un warehouse multimediale.
Nella console Google Cloud, un'app è rappresentata come un grafico.
Creare un'app vuota
Prima di poter compilare il grafico dell'app, devi prima creare un'app vuota.
Crea un'app nella console Google Cloud.
- Vai alla console Google Cloud.
- Apri la scheda Applicazioni della dashboard di Vertex AI Vision.
- Fai clic sul pulsante Aggiungi Crea.
- Inserisci traffic-app come nome dell'app e scegli la tua regione.
- Fai clic su Crea.
Aggiungi nodi dei componenti dell'app
Dopo aver creato l'applicazione vuota, puoi aggiungere i tre nodi al grafico dell'app:
- Nodo di importazione: la risorsa di flusso che importa i dati inviati da un'istanza VM di Compute Engine che crei.
- Nodo di elaborazione: il modello di analisi dell'occupazione che agisce sui dati importati.
- Nodo di archiviazione: il warehouse multimediale che archivia i video elaborati e funge da archivio dei metadati. I negozi di metadati includono informazioni di analisi sui dati video importati e informazioni dedotte dai modelli di AI.
Aggiungi nodi dei componenti all'app nella console.
- Apri la scheda Applicazioni della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
- Nella riga dell'app di traffico, seleziona Visualizza grafico. Viene visualizzata la visualizzazione del grafico della pipeline di elaborazione.
Aggiungere un nodo di importazione dati
- Per aggiungere un nodo di flusso di input, seleziona l'opzione Flussi nella sezione Connettori del menu laterale.
- Nella sezione Origine del menu Stream che si apre, seleziona Aggiungi stream.
- Nel menu Aggiungi flussi, scegli Registra nuovi flussi e aggiungi traffic-stream come nome del flusso.
- Per aggiungere lo stream al grafico dell'app, fai clic su Aggiungi stream.
Aggiungere un nodo di elaborazione dei dati
- Per aggiungere il nodo del modello di conteggio dell'occupazione, seleziona l'opzione Analisi dell'occupazione nella sezione Modelli specializzati del menu laterale.
- Lascia selezionate le opzioni predefinite Persone e Veicoli.
- Aggiungi linee in Attraversamento linea. Utilizza lo strumento Linea multipunto per disegnare le linee in cui devi rilevare le auto o le persone che entrano o escono.
- Disegna le zone attive per conteggiare le persone/i veicoli in quella zona.
- Aggiungi le impostazioni per il tempo di permanenza per rilevare la congestione se viene disegnata una zona attiva.
- Al momento non è supportato l'attraversamento simultaneo di zone e linee attive. Utilizza una sola funzionalità alla volta.)


Aggiungere un nodo di archiviazione dei dati
- 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.
- Nel menu Warehouse multimediale di Vertex AI Vision, fai clic su Connetti warehouse.
- Nel menu Connetti warehouse, seleziona Crea nuovo warehouse. Assegna al warehouse il nome warehouse-traffico e lascia la durata TTL a 14 giorni.
- 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 connessa vengono importati nella tabella di destinazione.
Puoi creare una 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 set di dati e tabelle:
- Set di dati: il nome del set di dati creato automaticamente è visionai_dataset.
- Tabella: il nome della tabella creato automaticamente è visionai_dataset.APPLICATION_ID.
- Gestione degli errori:
- Se esiste la tabella con lo stesso nome nello stesso set di dati, non viene creata automaticamente.
- Apri la scheda Applicazioni della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
- Seleziona Visualizza app accanto al nome dell'applicazione nell'elenco.
- Nella pagina del generatore di applicazioni, seleziona BigQuery dalla sezione Connettori.
- Lascia vuoto il campo Percorso BigQuery.

- In Archivia metadati da: seleziona solo "Analisi delle presenze" e deseleziona gli stream.
Il grafico finale dell'app dovrebbe essere simile a questo:

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.
- Apri la scheda Applicazioni della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
- Seleziona Visualizza grafico accanto all'app di traffico nell'elenco.
- Nella pagina del generatore di grafici delle applicazioni, fai clic sul pulsante Esegui il deployment.
- Nella finestra di dialogo di conferma successiva, seleziona Esegui il deployment. Il completamento dell'operazione di deployment potrebbe richiedere diversi minuti. Al termine del deployment, accanto ai nodi vengono visualizzati segni di spunta verdi.

8. Cercare contenuti video nel warehouse di archiviazione
Dopo aver importato i dati video nell'app di elaborazione, puoi visualizzare i dati video analizzati e cercarli in base alle informazioni di analisi dell'occupazione.
- Apri la scheda Magazzini della dashboard di Vertex AI Vision. Vai alla scheda Magazzini
- Trova il magazzino di distribuzione nel magazzino nell'elenco e fai clic su Visualizza asset.
- Nella sezione Conteggio persone o Conteggio veicoli, imposta il valore Min su 1 e il valore Max su 5.
- Per filtrare i dati video elaborati archiviati in Media Warehouse di Vertex AI Vision, fai clic su Cerca.

Una visualizzazione dei dati video archiviati che corrispondono ai criteri di ricerca nella console Google Cloud. Video di: 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 poi su Query.
Scrivi la seguente query:
Query 1: Query per controllare il conteggio dei veicoli che attraversano ogni linea 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 conteggio dei 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 modificare "Vehicle" in "Person" per conteggiare le persone.
Questo codelab mostrerà solo i dati e la visualizzazione di esempio per Query1. Puoi seguire una procedura simile per Query2.

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

Nel riquadro "Dimensione", aggiungi l'ora e modifica la configurazione dell'ora in data e ora. In "Dimensione di distribuzione", aggiungi line_id. 
Il grafico sopra mostra il conteggio dei veicoli/persone che attraversano ogni linea al minuto.
Le barre blu scuro e azzurro indicano i due diversi ID linea.
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