App Vertex AI Vision Occupancy Analytics con gestione eventi

1. Obiettivi

Panoramica

Questo codelab riguarda la creazione di un'applicazione Vertex AI Vision end-to-end per inviare eventi con la funzionalità di gestione degli eventi. Utilizzeremo il modello specializzato preaddestrato Occupancy analytics. funzionalità integrate per generare eventi basati sull'acquisizione dei seguenti elementi:

  • 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 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 Functions che elabora i dati del modello di analisi delle persone.
  • Creare un argomento Pub/Sub e abbonamento.
  • Come configurare la gestione degli eventi per inviare eventi tramite l'argomento Pub/Sub.

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 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
  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 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.
  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, quindi 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 trasmettere i dati video in streaming alla tua app di analisi delle presenze.

Inizia attivando 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 Registra

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

Importare dati nello stream

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

Vai alla scheda Stream

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

4. Crea una funzione Cloud Functions

Avrai bisogno di una funzione Cloud Functions per assimilare i dati generare eventi che verranno successivamente inviati tramite il canale degli eventi.

Scopri di più sulla funzione Cloud Functions 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 in seguito verrà utilizzato come riferimento a questa funzione Cloud Functions nelle impostazioni di Gestione 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 andare al "codice" . Impossibile caricare l&#39;esempio di creazione della funzione Cloud Functions
  6. Modifica la funzione Cloud Functions. 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 su "Esegui il deployment" per eseguire il deployment della funzione.

5. Crea argomento Pub/Sub e abbonamento

Dovremo fornire all'applicazione un argomento Pub/Sub a cui può inviare l'evento. Per ricevere gli eventi, è necessario sottoscrivere un abbonamento Pub/Sub all'ottica configurata.

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

Crea 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

Crea una sottoscrizione 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 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.

  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 delle presenze che agisce sui dati importati.
  3. 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.

  1. Apri la scheda Applications (Applicazioni) della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
  2. Nella linea dell'app Traffico, seleziona Visualizza grafico. Viene visualizzata la visualizzazione grafica della pipeline di elaborazione.

Aggiungi un nodo di importazione dati

  1. Per aggiungere un nodo per lo stream di input, seleziona l'opzione Stream nella sezione Connettori del menu laterale.
  2. Nella sezione Origine del menu Stream visualizzato, seleziona Aggiungi stream.
  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 dati

  1. 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.
  2. Lascia le selezioni predefinite Persone e Veicoli.
  3. 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.
  4. Traccia le zone attive per contare 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 di linea non sono supportati contemporaneamente. Utilizza una sola funzione 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 warehouse multimediale di Vertex AI Vision, fai clic su Connetti warehouse.
  3. Nel menu Collega magazzino, seleziona Crea nuovo warehouse. 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 Gestione eventi

Durata 02:00

Collegheremo il modello alla funzione Cloud Functions creata in precedenza per la post-elaborazione, dove la funzione Cloud Functions può assimilare liberamente l'output del modello e generare eventi adatti alle tue esigenze. Quindi configureremo il canale degli eventi configurando come destinazione l'argomento Pub/Sub creato in precedenza. Puoi anche impostare un intervallo minimo per evitare che il tuo 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 delle presenze) nel grafico dell'applicazione per aprire il menu laterale.
  2. Seleziona la funzione Cloud Functions (identificata in base al 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 della post-elaborazione

Configura il canale degli eventi

  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 NOTIFICA DEGLI EVENTI" nella sezione Notifica degli eventi. 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 della finestra di dialogo 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 Applications (Applicazioni) della dashboard di Vertex AI Vision. Vai alla scheda Applicazioni
  2. Seleziona Visualizza grafico accanto all'app Traffico nell'elenco.
  3. Nella pagina di Application Graph Builder, 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 appaiono dei segni di spunta verdi. ee78bbf00e5db898.png

9. Verifica eventi/messaggi nella sottoscrizione Pub/Sub

Dopo aver importato i dati video nella tua app di elaborazione, la funzione Cloud Functions dovrebbe generare eventi una volta che il modello di analisi delle presenze genera l'annotazione. Questi eventi dovrebbero essere pubblicati come messaggi tramite l'argomento Pub/Sub e ricevuto dal tuo abbonamento.

I seguenti passaggi presupponeno che tu abbia una sottoscrizione pull.

  1. Apri l'elenco di sottoscrizioni Pub/Sub sul tuo progetto e di trovare l'abbonamento corrispondente. Vai alla pagina dell'elenco delle sottoscrizioni Pub/Sub
  2. Vai a "Messaggio" .
  3. Fai clic su "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 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 Leggilo e completa gli esercizi

Quanto è stato utile questo codelab?

Molto utile Moderatamente utile