1. Obiettivi
Panoramica
Questo codelab è incentrato sulla creazione di un'applicazione Vertex AI Vision end-to-end per dimostrare l'invio di video con la funzionalità di filtro del movimento. In questo tutorial analizzeremo i diversi parametri nella configurazione del filtro di movimento:
- Sensibilità del rilevamento dei movimenti
- Durata minima degli eventi
- Finestra di riepilogo
- Tempo di raffreddamento
- Zona di rilevamento dei movimenti
Cosa imparerai a fare
- Come importare video per lo streaming
- Diverse funzionalità disponibili nel filtro movimento e come utilizzarle
- Dove controllare le statistiche del filtro movimento
- Come regolare l'impostazione in base al video
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. Filtro di movimento
Il filtro di movimento acquisisce segmenti video di movimento e del prodotto che contengono eventi di movimento. Regolando la sensibilità del movimento, la durata minima degli eventi, la finestra temporale, il periodo di attesa e la zona di rilevamento dei movimenti, l'utente può configurare il filtro in base alle proprie esigenze.
Configurazione del filtro di movimento
Nel filtro di movimento sono disponibili 5 configurazioni per la personalizzazione.
- Sensibilità del movimento: la sensibilità del movimento.
- Lunghezza minima degli eventi: la durata minima della cattura di un evento di movimento.
- Finestra temporale: per quanto tempo il video deve iniziare a registrare prima che venga rilevato un evento di movimento.
- Periodo di attesa: al termine di un evento di movimento, viene effettuato un periodo di attesa con la durata specificata. Durante il periodo di attesa, gli eventi di movimento non verranno attivati.
- Zona di rilevamento dei movimenti: zona configurata dall'utente per specificare dove deve essere eseguito il rilevamento dei movimenti. (Approfondiremo nella sezione successiva)
Sensibilità di rilevamento del movimento
Utilizza il flag motion_detection_sensitivity
nel comando vaictl.Stringa
. Mezzo predefinito. Puoi scegliere tra bassa, media o alta.
Più alta è la sensibilità del rilevamento dei movimenti, più sensibile è al rumore e ai movimenti più piccoli. Questa impostazione è consigliata per le impostazioni in cui sono presenti oggetti in movimento più piccoli (ad esempio persone da lontano) e un'illuminazione stabile.
La bassa sensibilità, invece, è meno sensibile alle interferenze di luce. Questa impostazione è perfetta per quando c'è maggiore interferenza luminosa, ad esempio in un ambiente esterno, e per una qualità video inferiore in cui potrebbero esserci più rumori. Poiché questa impostazione è il filtro più aggressivo di tutti, potrebbe ignorare i movimenti provenienti da oggetti di piccole dimensioni.
Durata minima degli eventi
Utilizza il flag min_event_length_in_seconds
nel comando vaictl.
Numero intero. Il valore predefinito è 10 secondi. L'intervallo va da 0 a 3600 secondi.
La durata minima dei video degli eventi di movimento che verranno analizzati una volta rilevato un segmento di eventi di movimento nel frame.
Finestra temporale
Utilizza il flag look_back_window_in_seconds
nel comando vaictl.
Numero intero. Il valore predefinito è 3 secondi. L'intervallo va da 0 a 3600 secondi.
La finestra temporale indica il periodo di tempo memorizzato nella cache prima che venga rilevato un evento di movimento. È utile per vedere cosa succede nell'inquadratura alcuni secondi prima che vengano rilevati gli eventi di movimento.
Periodo di attesa
Utilizza il flag cool_down_period_in_seconds
nel comando vaictl.
Numero intero. Il valore predefinito è 300 secondi. L'intervallo va da 0 a 3600 secondi.
Il periodo di attesa indica per quanto tempo il rilevamento dei movimenti viene messo in pausa dopo l'acquisizione di un evento di movimento. Durante il periodo di attesa, non verrà eseguito alcun calcolo per rilevare il movimento.
4. Esempio di filtro di movimento di base
Manuale dell'SDK Vaictl
Per controllare il manuale di vaictl
per lo stream di input con filtro di movimento, usa il comando seguente.
vaictl send video-file applying motion-filter -h
Preparare un video di esempio
- 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 .
Prepara le variabili di ambiente
Imposta le variabili di ambiente riportate di seguito per utilizzare il modello di comando fornito.
variabili vaictl
- 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
Variabili di filtro di movimento
- MOTION_SENSITIVITY: quanto sarà sensibile il rilevamento dei movimenti.
- MIN_EVENT_LENGTH: durata minima degli eventi di movimento.
- LOOK_BACK_WINDOW: durata dell'acquisizione prima del primo movimento di un evento di movimento.
- COOL_DOWN_PERIOD: il periodo in cui il rilevamento del movimento verrà sospeso dopo l'acquisizione di un evento di movimento.
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
Comando del filtro di preparazione del movimento
Esistono due opzioni per utilizzare il filtro di movimento con lo stream di input. La prima è inviare gli eventi di movimento a uno stream nella console Cloud. La seconda opzione è inviare gli eventi di movimento allo spazio di archiviazione locale.
Invio dei risultati alla console Cloud
Puoi utilizzare vaictl per trasmettere i dati video di output in streaming alla console Cloud. Inizia attivando l'API Vision AI nella console Cloud.
Registrare un nuovo stream
- Fai clic sulla scheda Stream nel riquadro a sinistra di Vertex AI Vision.
- Fai clic su Registrati
- Nel nome dello stream, inserisci
motion-detection-stream
. - Nella regione inserisci
us-central1
- Fai clic su Registra
Invio dei risultati allo stream in corso...
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 creare un job in background.
INPUT_VIDEO=street_vehicles_people.mp4 vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to streams motion-detection-stream --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.
Invio dei risultati allo spazio di archiviazione locale
Questo comando consente di trasmettere un file video a uno stream.
Aggiungi nohup
all'inizio e &
alla fine per creare un job in background.
INPUT_VIDEO=street_vehicles_people.mp4 OUTPUT_PATH=<path_to_store_motion_events_on_local_disk> nohup vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
5. Zona di rilevamento dei movimenti
In questa sezione illustreremo in dettaglio l'utilizzo della zona di rilevamento dei movimenti e come configurarla. La zona ha lo scopo di migliorare il rilevamento dei movimenti mascherando i movimenti provenienti da aree che non ti interessano.
La zona di rilevamento dei movimenti ha due tipi: (1) zone positive in cui il rilevamento del movimento viene eseguito solo nell'area annotata; (2) zone negative in cui il rilevamento dei movimenti ignora qualsiasi movimento nell'area annotata.
Annotazione zona
Utilizza il flag zone_annotation
nel comando vaictl per inserire le coordinate per i poligoni di zona.Stringa
. Vuoto per impostazione predefinita per l'annotazione della zona.
L'annotazione zona sarà un input di stringa dell'utente, che indicherà le zone nel frame su cui l'utente vuole nascondere o impostare lo stato attivo. Per annotare la zona, l'utente dovrà specificare le coordinate dell'immagine dell'asse x e dell'asse y per ciascun nodo della zona. Una zona deve avere tre o più nodi per formare un poligono. Un frame può contenere più zone. Se le zone si sovrappongono tra loro, l'area coperta da entrambe le zone sarà comunque coperta.
L'annotazione della zona ha una sintassi di input specifica da seguire.
- Per indicare un singolo nodo, utilizza
:
per collegare gli assi x e y di una coordinazione di immagini. Ad esempio, un nodo di(0,0)
nell'angolo in alto a sinistra sarà indicato come0:0
. - Per indicare tutti i nodi in una singola zona, utilizza
;
per connettere i nodi. Ad esempio, per una zona con nodi di(0,0)
,(100,0)
,(100,100)
e(0, 100)
, la zona sarà indicata come0:0;100:0;100:100;0:100
. Inserisci sempre i nodi come nodi di collegamento vicini l'uno all'altro. L'ordine può essere sia in senso orario che antiorario.
*Una zona quadrata con quattro nodi.
*Una zona triangolare con tre nodi.
- Per indicare più zone in un singolo frame, utilizza
-
per collegare zone diverse. Ad esempio, se vogliamo inserire entrambi i valori(0,0)
,(100,0)
,(100,100)
,(0,100)
e(120,120)
,(110,150)
,(200,160)
, l'annotazione della zona di input sarà0:0;100:0;100:100;0:100-120:120;110:150;200:160
.
*Due zone all'interno di un frame.
Per ottenere le coordinate da un'immagine, sono disponibili alcuni strumenti online che consentono di ottenere le coordinate. Ad esempio, consulta Wolfram - Ottieni coordinate dall'immagine
Escludi zona annotata
Utilizza il flag exclude_annotated_zone
in vaictl per configurare il rilevamento del movimento in una zona o all'esterno della zona.
Valore booleano. Il valore predefinito è false.
Escludi zone annotate è un input booleano da parte dell'utente, che indica se l'utente vuole escludere o meno la zona annotata nel rilevamento dei movimenti.
- Se impostato su
true
, la zona annotata agirà come zona negativa. Non verranno rilevati movimenti nelle zone annotate.
*Esegui il rilevamento dei movimenti solo al di fuori delle zone di input.
- Se il criterio viene impostato su false, la zona fungerà da zona positiva, sulla quale si concentrerà il rilevamento dei movimenti.
*Esegui il rilevamento dei movimenti solo nelle zone di input.
6. Esempio di filtro di movimento con zona di rilevamento dei movimenti
In questo esempio utilizzeremo un video in cui un albero si muove costantemente in primo piano. Con l'impostazione del filtro di movimento standard, il video produrrà solo un evento di movimento della durata di quello originale, perché il filtro di movimento registra l'albero in movimento come "in continuo movimento per tutto il video". Tuttavia, con l'aiuto della zona di rilevamento dei movimenti, possiamo mascherare correttamente il movimento dell'albero e concentrarci su quello di auto e pedoni.
Preparazione video
Il video di esempio (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4 ) contiene alberi, auto e pedoni di www.changedetection.net.
Riconoscimenti del video: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad e P. Ishwar, changedetection.net: un nuovo set di dati di benchmark per il rilevamento delle modifiche, in Proc. IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012, Providence, RI, 16-21 giugno, 2012
Preparazione della variabile di ambiente
Variabili di progetto Google Cloud.
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
Configurazione di base del filtro di movimento.
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
Configurazione della zona di rilevamento dei movimenti.
Seleziona una delle opzioni seguenti per visualizzare i diversi tipi di utilizzo per la zona di rilevamento dei movimenti.
Escludi l'albero per il rilevamento dei movimenti.
export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150" export EXCLUDE_ANNOTATED_ZONE=true
*Esegui il rilevamento dei movimenti solo al di fuori delle zone di input.
Metti a fuoco il rilevamento dei movimenti sulla strada.
export ZONE_ANNOTATION="0:300;780:300;780:480;0:480" export EXCLUDE_ANNOTATED_ZONE=false
*Esegui il rilevamento dei movimenti solo al di fuori delle zone di input.
Invia stream video con filtro di movimento
Inviare gli eventi di movimento alla console Cloud
Puoi utilizzare vaictl per trasmettere i dati video di output in streaming alla console Cloud. Inizia attivando l'API Vision AI nella console Cloud.
Registrare un nuovo stream
- Fai clic sulla scheda Stream nel riquadro a sinistra di Vertex AI Vision.
- Fai clic su Registrati
- Nel nome dello stream, inserisci
motion-detection-stream
. - Nella regione inserisci
us-central1
- Fai clic su Registra
Invio dei risultati allo stream in corso...
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 creare un job in background.
vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to streams motion-detection-stream --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.
Invio dei risultati allo spazio di archiviazione locale
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 creare un job in background.
OUTPUT_PATH=<path_to_store_motion_events> vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=$ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
7. 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, termina l'operazione dell'SDK vaictl tramite la riga di comando con ctrl
+ z
.
Risorse
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/motion-filtering-model
https://cloud.google.com/vision-ai/docs/create-manage-streams
Feedback
Fai clic qui per fornire un feedback