App Vertex AI Vision Occupancy Analytics con gestione eventi

1. Obiettivi

Panoramica

Questo codelab si concentrerà sulla creazione di un'applicazione Vertex AI Vision end-to-end per inviare eventi con la funzionalità di gestione degli eventi. Utilizzeremo le funzionalità integrate del modello specializzato preaddestrato Analisi dell'occupazione per generare eventi in base all'acquisizione di 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 importare i 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 creare una funzione Cloud Functions che elabora i dati del modello Occupancy Analytics.
  • Come creare un argomento e una sottoscrizione Pub/Sub.
  • Come configurare la gestione degli eventi per inviarli tramite l'argomento Pub/Sub.

2. Prima di iniziare

  1. 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
  2. Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.
  3. Abilita le API Compute Engine e Vision AI. Abilita le API

Crea un service account:

  1. Nella console Google Cloud, vai alla pagina Crea service account. Vai a Crea service account
  2. Seleziona il progetto.
  3. 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.
  4. Fai clic su Crea e continua.
  5. 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.
  6. Fai clic su Continua.
  7. 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:

  1. Nella console Google Cloud, fai clic sull'indirizzo email del service account che hai creato.
  2. Fai clic su Chiavi.
  3. Fai clic su Aggiungi chiave, 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. Importare un file video per lo streaming

Puoi 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

  1. Fai clic sulla scheda Flussi di clic nel riquadro a sinistra di Vertex AI Vision.
  2. Fai clic su Registrati.
  3. In Nome stream, inserisci "traffic-stream".
  4. Nella regione, inserisci "us-central1".
  5. Fai clic su Registrati.

La registrazione dello stream richiederà un paio di minuti.

Preparare un video di esempio

  1. Puoi copiare 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 .

Importare i dati nello stream

  1. 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
  1. 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.
  • ( 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.

Vai alla scheda Stream

Visualizzazione del video in diretta in streaming nell&#39;interfaccia utenteVisualizzazione in tempo reale del video in fase di inserimento nello stream nella console Google Cloud. Video di: Elizabeth Mavor su Pixabay (pixelizzazione aggiunta).

4. Crea una funzione Cloud

Avremo bisogno di una Cloud Function per elaborare i dati del modello e generare eventi che verranno inviati in un secondo momento tramite il canale di eventi.

Puoi scoprire di più su Cloud Functions qui

Crea una funzione Cloud che ascolta il tuo modello

  1. Vai alla pagina di creazione dell'interfaccia utente di Cloud Functions.
  2. Imposta il nome della funzione, che verrà utilizzato in un secondo momento per fare riferimento a questa funzione Cloud Functions nelle impostazioni di gestione degli eventi.
  3. Assicurati che la regione corrisponda a quella della tua applicazione.
  4. Modifica e salva le impostazioni del trigger.
  5. Fai clic sul pulsante Avanti per passare alla parte relativa al "codice". Impossibile caricare l&#39;esempio di creazione della funzione Cloud Functions
  6. Modifica la funzione cloud. Ecco un esempio con il runtime 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);
}
  1. Fai clic sul pulsante "Esegui il deployment" per eseguire il deployment della funzione.

5. Crea un argomento e una sottoscrizione Pub/Sub

Dobbiamo fornire all'applicazione un argomento Pub/Sub a cui inviare l'evento. Per ricevere gli eventi, un abbonamento Pub/Sub deve sottoscrivere l'opt-out configurato.

Puoi scoprire di più sull'argomento Pub/Sub qui e sull'abbonamento qui.

Crea un argomento Pub/Sub

Per creare un argomento Pub/Sub, puoi utilizzare gcloud CLI: (devi sostituire SUBSCRIPTION_ID con il valore reale della tua configurazione)

gcloud pubsub topics create TOPIC_ID

In alternativa, puoi utilizzare l'interfaccia utente di Pub/Sub.

Crea un abbonamento Pub/Sub

Per creare una sottoscrizione Pub/Sub, puoi utilizzare gcloud CLI: (devi sostituire SUBSCRIPTION_ID e TOPIC_ID con il valore reale della tua configurazione)

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

In alternativa, puoi utilizzare l'interfaccia utente di Pub/Sub.

6. 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.

  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 Aggiungi Crea.
  2. Inserisci traffic-app come nome dell'app e scegli la tua regione.
  3. 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:

  1. Nodo di importazione: la risorsa di stream che importa i dati.
  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 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.

  1. Apri la scheda Applicazioni della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
  2. 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

  1. Per aggiungere un nodo di flusso di input, seleziona l'opzione Flussi nella sezione Connettori del menu laterale.
  2. Nella sezione Origine del menu Stream che si apre, seleziona Aggiungi stream.
  3. Nel menu Aggiungi flussi, scegli Registra nuovi flussi e aggiungi traffic-stream come nome del flusso.
  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 dell'occupazione, seleziona l'opzione Analisi dell'occupazione nella sezione Modelli specializzati del menu laterale.
  2. Lascia selezionate le opzioni predefinite Persone e Veicoli.
  3. 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.
  4. Disegna le zone attive per conteggiare le persone/i veicoli in quella zona.
  5. 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.)

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 Warehouse multimediale di Vertex AI Vision, fai clic su Connetti warehouse.
  3. Nel menu Connetti warehouse, seleziona Crea nuovo warehouse. Assegna al warehouse il nome warehouse-traffico e lascia la durata TTL a 14 giorni.
  4. Fai clic sul pulsante Crea per aggiungere il warehouse.

7. Configura la gestione degli eventi

Durata 02:00

Collegheremo il modello alla funzione Cloud precedentemente creata per la post-elaborazione, in cui la funzione Cloud può elaborare liberamente l'output del modello e generare eventi adatti alle tue esigenze. Quindi configureremo il canale di eventi configurando l'argomento Pub/Sub creato in precedenza come destinazione. Puoi anche impostare un intervallo minimo, che ti aiuterà a evitare che il canale degli eventi venga inondato dallo stesso evento in un breve periodo di tempo.

Seleziona la funzione Cloud Functions per la post-elaborazione

  1. Fai clic sul nodo di elaborazione dei dati(analisi dell'occupazione) nel grafico dell'applicazione per aprire il menu laterale.
  2. Seleziona la tua funzione Cloud (identificata dal nome della funzione) nel menu a discesa Post-elaborazione.
  3. Il grafico dell'applicazione salverà automaticamente le modifiche.

Impossibile caricare l&#39;esempio di configurazione del post-elaborazione

Configurare il canale eventi

  1. Fai clic sul nodo di elaborazione dei dati(analisi dell'occupazione) nel grafico dell'applicazione per aprire il menu laterale.
  2. Fai clic su "CONFIGURA NOTIFICA EVENTO" nella sezione Notifica evento. Impossibile caricare l&#39;esempio di notifica evento
  3. Seleziona l'argomento Pub/Sub nel menu a discesa.
  4. (Facoltativo) imposta l'intervallo/la frequenza minimi per la pubblicazione degli eventi.

Impossibile caricare l&#39;esempio di finestra di dialogo di notifica degli eventi

8. 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 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 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. ee78bbf00e5db898.png

9. Verifica di eventi/messaggi nella sottoscrizione Pub/Sub

Dopo aver importato i dati video nell'app di elaborazione, la funzione Cloud Functions dovrebbe generare eventi una volta che il modello di analisi dell'occupazione restituisce l'annotazione. Questi eventi devono quindi essere pubblicati come messaggi tramite l'argomento Pub/Sub e ricevuti dalla sottoscrizione.

I passaggi seguenti presuppongono che tu disponga di un abbonamento pull.

  1. Apri l'elenco delle sottoscrizioni Pub/Sub nel tuo progetto e trova la sottoscrizione corrispondente. Vai alla pagina dell'elenco delle sottoscrizioni Pub/Sub
  2. Vai alla scheda "Messaggio".
  3. Fai clic sul pulsante "Pull".
  4. Visualizza il messaggio nella tabella. errore durante il caricamento dell&#39;immagine del messaggio di sottoscrizione Pub/Sub

In alternativa, puoi scoprire come ricevere messaggi senza UI. Vai alla pagina dell'abbonamento

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?

Leggilo e basta Leggilo e completa gli esercizi

Quanto è stato utile questo codelab?

Molto utile Moderatamente utile