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 dei seguenti elementi:

  • 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 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 creare una funzione Cloud che elabori i dati del modello di Dati sull'occupazione.
  • Creare un argomento e una sottoscrizione Pub/Sub.
  • Come configurare la gestione degli eventi per inviare eventi 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 esistente. Una volta completata questa procedura, puoi eliminare il progetto e tutte le relative risorse. Vai al selettore dei 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. 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.
  4. Fai clic su Crea e continua.
  5. Per fornire l'accesso al progetto, concedi i seguenti ruoli all'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 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. Sul computer viene scaricato un file della chiave JSON.
  5. Fai clic su Chiudi.
  6. Installa e inizializza Google Cloud CLI.

† Il 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 riprodurre in streaming i dati video nella tua app di analisi della presenza.

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.

Preparare un video di esempio

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

Importare dati nello stream

  1. Per inviare questo file video locale allo stream di input dell'app, utilizza il seguente comando. Devi apportare 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, 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 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 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 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 utenteVisualizzazione in tempo reale del video importato nello stream nella console Google Cloud. Video di: Elizabeth Mavor su Pixabay (pixelazione aggiunta).

4. Crea una funzione Cloud Functions

Abbiamo bisogno di una funzione Cloud per elaborare i dati del modello e generare eventi che verranno successivamente inviati tramite il canale di eventi.

Puoi scoprire di più su Cloud Function qui

Crea una funzione Cloud Functions che ascolti il tuo modello

  1. Vai alla pagina di creazione dell'interfaccia utente della funzione Cloud Functions.
  2. Imposta il nome della funzione, che verrà utilizzato in seguito per fare riferimento a questa funzione Cloud nelle impostazioni di gestione degli eventi.
  3. Assicurati che la regione corrisponda alla tua applicazione.
  4. Modifica e salva le impostazioni dell'attivatore.
  5. Fai clic sul pulsante Avanti per passare alla parte del "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 argomento e sottoscrizione Pub/Sub

Dovremo fornire all'applicazione un argomento Pub/Sub a cui inviare l'evento. Per ricevere gli eventi, un abbonamento Pub/Sub deve essere sottoscritto per l'ottica configurata.

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

Creare un argomento Pub/Sub

Per creare un argomento Pub/Sub, puoi utilizzare gcloud CLI: (dovresti 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.

Creare una sottoscrizione Pub/Sub

Per creare un abbonamento 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 elabora i tuoi 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 (quello originale e quello 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 Applications (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 grafico dell'app:

  1. Nodo di importazione: la risorsa di flusso 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 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 Applications (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.

Aggiungi 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 traffic-stream come nome dello stream.
  4. Per aggiungere lo stream al grafico dell'app, fai clic su Aggiungi flussi.

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. Traccia le zone attive per contare le persone/i veicoli al loro interno.
  5. Aggiungi le impostazioni per il tempo di permanenza per rilevare la congestione se viene disegnata una zona attiva.
  • (attualmente la zona attiva e il passaggio di linea non sono supportati contemporaneamente. Utilizza una sola funzionalità alla volta.

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

Aggiungere un nodo di archiviazione dati

  1. Per aggiungere il nodo di destinazione di output (archiviazione), seleziona l'opzione warehouse multimediale 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 un nome al data warehouse del traffico del warehouse e lascia la durata TTL su 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 Functions creata in precedenza per la post-elaborazione, in modo che la funzione Cloud Functions possa elaborare liberamente l'output del modello e generare eventi in base alle tue esigenze. Poi configureremo il canale di eventi impostando come target l'argomento Pub/Sub creato in precedenza. Puoi anche impostare un intervallo minimo, che ti aiuterà a evitare che il tuo canale di 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 funzione Cloud (identificata dal nome) nel menu a discesa Post-elaborazione.
  3. Il grafico dell'applicazione salverà automaticamente le modifiche.

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

Configura il canale dell'evento

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

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

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 builder di grafici applicazioni, fai clic sul pulsante Esegui il deployment.
  4. Nella seguente finestra di dialogo di conferma, 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

9. Verificare gli eventi/i messaggi nell'abbonamento Pub/Sub

Dopo aver importato i dati video nell'app di elaborazione, la funzione Cloud dovrebbe generare eventi quando il modello di analisi dell'occupazione genera l'annotazione. Questi eventi devono essere pubblicati come messaggi tramite l'argomento Pub/Sub e ricevuti dall'abbonamento.

I seguenti passaggi presupponeno che tu abbia una sottoscrizione 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 "tira".
  4. Visualizza il messaggio nella tabella. error loading pub/sub subscription message image

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

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

Sondaggio

Come utilizzerai questo tutorial?

Solo lettura Leggi e completa gli esercizi

Quanto è stato utile questo codelab?

Molto utile Moderatamente utile