1. Obiettivi
Panoramica
Questo codelab si concentra sulla creazione di un'applicazione Vertex AI Vision end-to-end per monitorare i filmati del traffico in tempo reale. Utilizzeremo il modello specializzato preaddestrato Occupancy analytics. funzionalità integrate per acquisire quanto segue:
- Contare il numero di veicoli e persone che attraversano una strada su una determinata linea.
- Contare il numero di veicoli per persona in una zona fissa della strada.
- Rilevamento della congestione 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 Analisi delle presenze e come utilizzarle
- Come eseguire il deployment dell'app
- Come cercare video nel warehouse multimediale di Vertex AI Vision nel tuo spazio di archiviazione.
- Come connettere l'output a BigQuery, scrivere una query SQL per estrarre insight dall'output JSON del modello e visualizzare il risultato in Looker Studio in tempo reale.
2. Prima di iniziare
- 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 create in questa procedura, crea un progetto invece di selezionarne uno esistente. Dopo aver completato questi passaggi, puoi eliminare il progetto rimuovendo tutte le risorse associate. Vai al selettore progetti
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come controllare se la fatturazione è abilitata per un progetto.
- Abilita le API Compute Engine e Vision AI. Abilita le API
Crea un account di servizio:
- Nella console Google Cloud, vai alla pagina Crea account di servizio. Vai a Crea account di servizio
- Seleziona il progetto.
- Nel campo Nome account di servizio, inserisci un nome. 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.
- Fai clic su Crea e continua.
- Per concedere l'accesso al progetto, concedi i seguenti ruoli al tuo account di servizio: Vision AI > Editor Vision AI, Compute Engine > Amministratore istanze Compute (beta), Storage > Visualizzatore oggetti Storage † . Nell'elenco Seleziona un ruolo, seleziona un ruolo. Per aggiungere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni altro ruolo. 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 di 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 dell'account di servizio. Non chiudere la finestra del browser. Lo utilizzerai nel passaggio successivo.
Crea una chiave dell'account di servizio:
- Nella console Google Cloud, fai clic sull'indirizzo email dell'account di servizio che hai creato.
- Fai clic su Chiavi.
- Fai clic su Aggiungi chiave, quindi su Crea nuova chiave.
- Fai clic su Crea. Sul computer viene scaricato un file della chiave JSON.
- Fai clic su Chiudi.
- Installa e inizializza Google Cloud CLI.
† Il ruolo è necessario solo se copi un file video di esempio da un bucket Cloud Storage.
3. Configura una VM per riprodurre video in streaming
Prima di creare un'app in Analisi delle presenze, devi registrare uno stream che possa 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 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.
- 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 ulteriori informazioni, consulta la Convenzione di denominazione delle risorse.
- (Facoltativo) Modifica la Zona per questa VM. Compute Engine randomizza l'elenco di zone all'interno di ogni regione per incoraggiarne l'uso in più zone.
- Accetta le restanti opzioni predefinite. Per saperne di più su queste opzioni, consulta Creare e avviare una VM.
- Per creare e avviare la VM, fai clic su Crea.
Configurare l'ambiente VM
Dopo l'avvio della VM, puoi utilizzare la console per connetterti alla VM tramite SSH dal browser. Successivamente, potrai scaricare lo strumento a riga di comando vaictl per importare 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.
Scarica lo strumento a riga di comando vaictl
- Nella finestra SSH nel browser, scarica lo strumento a riga di comando di 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 questo 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 utilizzare vaictl per inviare i dati video in streaming all'app di analisi delle presenze.
Inizia attivando l'API Vision AI nella console Cloud
Registrare un nuovo stream
- Fai clic sulla scheda Stream nel riquadro sinistro di Vertex AI Vision.
- Fai clic su Registrati
- Nel nome dello stream, inserisci "traffic-stream".
- Nella regione, inserisci "us-central1"
- Fai clic su Registra
La registrazione dello stream richiederà un paio di minuti.
Copia un video di esempio nella VM
- Nella finestra SSH-in-browser della tua VM, copia un video di esempio con il seguente comando gsutil cp. Sostituisci la seguente variabile:
- ORIGINE: posizione di un file video da utilizzare. Puoi utilizzare la tua origine del file video (ad esempio, gs://BUCKET_NAME/FILENAME.mp4) oppure il video di esempio (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 )(video con persone e veicoli, fonte)
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
- Per inviare questo file video locale allo stream di input dell'app, utilizza il seguente comando. Devi effettuare le seguenti sostituzioni delle variabili:
- PROJECT_ID: l'ID del tuo progetto Google Cloud.
- LOCATION_ID: l'ID della tua località. Ad esempio us-central1. Per ulteriori informazioni, vedi Località cloud.
- LOCAL_FILE: il nome di un file video locale. Ad esempio street_vehicles_people.mp4.
- –loop flag: facoltativo. Esegue il loop 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
- Questo comando consente di trasmettere un file video a uno stream. Se utilizzi il flag –loop, il video rimane in loop nello stream fino a quando 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.
Quando l'importazione dello stream è disponibile, puoi visualizzare il feed video nella scheda Stream della dashboard di Vertex AI Vision selezionando lo stream del flusso di traffico.
Visione in diretta del video importato nello stream all'interno della console Google Cloud. Video di: Elizabeth Mavor su Pixabay (pixelazione aggiunta).
5. Crea un'applicazione
Il primo passaggio consiste nel creare un'app che elabora i tuoi dati. Un'app può essere considerata una pipeline automatizzata che collega quanto segue:
- Importazione dati: un feed video viene importato in uno stream.
- Analisi dei dati: è possibile aggiungere un modello di IA(visione artificiale) dopo l'importazione.
- Archiviazione dei dati: le due versioni del feed video (quello originale e quello elaborato dal modello di IA) possono essere archiviate in un media warehouse.
Nella console Google Cloud un'app è rappresentata da un grafico.
Creare un'app vuota
Prima di poter completare il grafico dell'app, devi creare un'app vuota.
Crea un'app nella console Google Cloud.
- Vai alla console Google Cloud.
- Apri la scheda Applications (Applicazioni) della dashboard di Vertex AI Vision.
- Fai clic sul pulsante Crea.
- Inserisci traffic-app come nome dell'app e scegli la tua regione.
- Fai clic su Crea.
Aggiungere 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 creata da te.
- Nodo di elaborazione: il modello di analisi delle presenze che agisce sui dati importati.
- Nodo di archiviazione: il warehouse multimediale in cui sono archiviati i video elaborati e che funge da archivio di metadati. Gli archivi di metadati includono informazioni di analisi sui dati video importati e informazioni dedotte dai modelli di IA.
Aggiungi i nodi dei componenti all'app nella console.
- Apri la scheda Applications (Applicazioni) della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
- Nella linea dell'app Traffico, seleziona Visualizza grafico. Viene visualizzata la visualizzazione grafica della pipeline di elaborazione.
Aggiungi un nodo di importazione dati
- Per aggiungere un nodo per lo stream di input, seleziona l'opzione Stream nella sezione Connettori del menu laterale.
- Nella sezione Origine del menu Stream visualizzato, seleziona Aggiungi stream.
- Nel menu Aggiungi stream, scegli Registra nuovi stream e aggiungi stream di traffico come nome dello stream.
- Per aggiungere lo stream al grafico dell'app, fai clic su Aggiungi stream.
Aggiungere un nodo di elaborazione dati
- Per aggiungere il nodo del modello per il numero di presenze, seleziona l'opzione Analisi del numero di persone nella sezione Modelli specializzati del menu laterale.
- Lascia le selezioni predefinite Persone e Veicoli.
- Aggiungi linee in Crossing. Utilizza lo strumento Linea multipunto per tracciare le linee in cui rilevare le auto o le persone in uscita o in entrata.
- Traccia le zone attive per contare le persone/i veicoli al loro interno.
- Aggiungi le impostazioni del tempo di attesa per rilevare la congestione se viene tracciata una zona attiva.
- (attualmente la zona attiva e il passaggio di linea non sono supportati contemporaneamente. Utilizza una sola funzione alla volta.)
Aggiungere un nodo di archiviazione dati
- Per aggiungere il nodo di destinazione di output (archiviazione), seleziona l'opzione warehouse multimediale 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 Collega magazzino, seleziona Crea nuovo magazzino. Assegna un nome al data warehouse del traffico del warehouse e lascia la durata TTL su 14 giorni.
- Fai clic sul pulsante Crea per aggiungere il warehouse.
6. Connetti l'output alla tabella BigQuery
Quando aggiungi un connettore BigQuery all'app Vertex AI Vision, tutti gli output del modello dell'app collegati verranno 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 del set di dati e della tabella:
- 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 una tabella con lo stesso nome sotto lo stesso set di dati, non viene creata alcuna creazione automatica.
- Apri la scheda Applications (Applicazioni) della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
- Seleziona Visualizza app accanto al nome della tua applicazione nell'elenco.
- Nella pagina del generatore di applicazioni, seleziona BigQuery dalla sezione Connettori.
- Lascia vuoto il campo BigQuery path.
- In Metadati del negozio da: seleziona solo "Analisi delle presenze" e deseleziona i flussi.
Il grafico finale dell'app dovrebbe essere simile al seguente:
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 Applications (Applicazioni) della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
- Seleziona Visualizza grafico accanto all'app Traffico nell'elenco.
- Nella pagina di Application Graph Builder, fai clic sul pulsante Esegui il deployment.
- 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 appaiono dei segni di spunta verdi.
8. Cerca contenuti video nel warehouse di archiviazione
Dopo aver importato i dati video nella tua app di elaborazione, puoi visualizzare i dati video analizzati ed eseguire ricerche nei dati in base alle informazioni sull'analisi del numero di persone.
- Apri la scheda Warehouse della dashboard di Vertex AI Vision. Vai alla scheda Warehouse
- Individua il warehouse del data warehouse 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 nel warehouse multimediale di Vertex AI Vision, fai clic su Cerca.
Una visualizzazione dei dati video archiviati che corrispondono ai criteri di ricerca nella console Google Cloud. Riconoscimenti del video: Elizabeth Mavor su Pixabay (criteri di ricerca applicati).
9. Analizza l'output in una tabella BigQuery
Vai a BigQuery
Seleziona il set di dati: visionai_dataset
Seleziona la tabella: 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
Query2: query per verificare il conteggio dei veicoli al minuto in ciascuna 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 il campo "Veicolo". a "Persona" per contare Persona.
Questo codelab mostra solo i dati di esempio e la visualizzazione per Query1. Puoi seguire la procedura simile per Query2.
Fai clic su Esplora dati nel menu laterale a destra e seleziona Esplora con Looker Studio
Nella "dimensione" aggiungere ora e modificare la configurazione dell'ora in data-ora. In "Dimensioni di suddivisione" aggiungi line_id.
Il grafico sopra mostra il numero di veicoli per persona che attraversano ogni linea in un minuto.
Le barre blu scuro e azzurro indicano i due diversi ID linea.
10. Complimenti
Congratulazioni, hai terminato 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