1. Obiettivi
Panoramica
Questo codelab si concentra sulla creazione di un'applicazione Vertex AI Vision end-to-end per dimostrare l'invio di video con la funzionalità di filtro dei movimenti. In questo tutorial esamineremo i diversi parametri nella configurazione del filtro movimento:
- Sensibilità del rilevamento dei movimenti
- Durata minima dell'evento
- Finestra temporale
- Tempo di raffreddamento
- Zona di rilevamento dei movimenti
Cosa imparerai a fare
- Come importare i video per lo streaming
- Diverse funzionalità disponibili in 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 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
- 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 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 può accedere il tuo account di servizio 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.
- 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 e poi su Crea nuova chiave.
- Fai clic su Crea. Un file della chiave JSON viene scaricato sul computer.
- 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 Movimento acquisisce segmenti di video di prodotti e in movimento che contengono eventi di movimento. Modificando la sensibilità al movimento, la durata minima dell'evento, 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 movimento
Nel filtro movimento sono disponibili 5 configurazioni per la personalizzazione.
- Sensibilità di rilevamento del movimento: indica quanto deve essere sensibile il rilevamento del movimento.
- Durata minima evento: la durata minima di un evento di movimento che verrà acquisito.
- Finestra temporale: il tempo che deve trascorrere prima che la registrazione del video inizi 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. (verrà descritto in una 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.
Maggiore è la sensibilità del rilevamento del movimento, maggiore è la sensibilità al rumore e ai movimenti più piccoli. Questa impostazione è consigliata per le situazioni in cui sono presenti oggetti in movimento più piccoli (ad esempio persone da lontano) e illuminazione stabile.
D'altra parte, la sensibilità ridotta è meno sensibile alle interferenze dell'illuminazione. Questa impostazione è perfetta per le interferenze di illuminazione, ad esempio in ambienti esterni, 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 di piccoli oggetti.
Durata minima degli eventi
Utilizza il flag min_event_length_in_seconds
nel comando vaictl.
Numero intero. Il valore predefinito è 10 secondi. Intervallo compreso tra 0 e 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. Intervallo compreso tra 0 e 3600 secondi.
La finestra temporale indica il periodo di tempo memorizzato nella cache prima che venga rilevato un evento di movimento. È utile quando ci interessa vedere cosa succede nell'inquadratura pochi secondi prima che vengano rilevati eventi di movimento.
Periodo di attesa
Utilizza il flag cool_down_period_in_seconds
nel comando vaictl.
Numero intero. Il valore predefinito è 300 secondi. Intervallo compreso tra 0 e 3600 secondi.
Il periodo di attesa indica il tempo per cui il rilevamento dei movimenti viene messo in pausa dopo che è stato acquisito 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 consultare il manuale di vaictl
per lo stream di input con filtro movimento, utilizza il comando riportato di seguito.
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: 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 .
Prepara le variabili di ambiente
Imposta le seguenti variabili di ambiente 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, consulta Località cloud.
- LOCAL_FILE: il nome di un file video locale. Ad esempio street_vehicles_people.mp4.
- Flag -loop: facoltativo. Esegue il looping dei dati del file per simulare lo streaming.
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1
Variabili del filtro di movimento
- MOTION_SENSITIVITY: la sensibilità del rilevamento dei movimenti.
- MIN_EVENT_LENGTH: durata minima degli eventi di movimento.
- LOOK_BACK_WINDOW: la durata da acquisire prima del primo movimento in un evento di movimento.
- COOL_DOWN_PERIOD: il periodo in cui il rilevamento dei movimenti viene messo in pausa 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>
Preparare il comando del filtro 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 in streaming i dati video di output alla console cloud. Per iniziare, attiva l'API Vision AI nella console Cloud.
Registra un nuovo stream
- Fai clic sulla scheda Stream nel riquadro a sinistra di Vertex AI Vision.
- Fai clic su Registrati
- In Nome stream, inserisci
motion-detection-stream
- Nella regione, inserisci
us-central1
- Fai clic su Registrati
Invio dei risultati allo stream
Questo comando trasmette in streaming 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 lo streaming continui.
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 essere necessari 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.
Invio dei risultati allo spazio di archiviazione locale
Questo comando trasmette in streaming un file video a uno stream.
Aggiungi nohup
all'inizio e &
alla fine per renderlo 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 approfondiremo l'utilizzo della zona di rilevamento dei movimenti e come configurarla. Lo scopo della zona è migliorare il rilevamento dei movimenti mascherando i movimenti provenienti da aree che non ti interessano.
Le zone di rilevamento dei movimenti hanno due tipi: (1) zone positive in cui il rilevamento dei movimenti funziona 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 dei poligoni delle zone.
Stringa. Valore predefinito vuoto per l'annotazione delle zone.
L'annotazione delle zone sarà una stringa inserita dall'utente che indica le zone del frame che l'utente vuole nascondere o mettere a fuoco. Per annotare la zona, l'utente dovrà specificare le coordinate dell'immagine dell'asse x e dell'asse y per ogni 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, l'area coperta da entrambe le zone continuerà a essere coperta.
L'annotazione della zona deve seguire una sintassi di input specifica.
- Per indicare un singolo nodo, utilizza
:
per collegare l'asse x e l'asse y di una coordinazione immagine. 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, una zona con i nodi(0,0)
,(100,0)
,(100,100)
e(0, 100)
sarà indicata come0:0;100:0;100:100;0:100
. Inserisci sempre i nodi come nodi di collegamento uno accanto 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. Ad esempio, consulta Wolfram - Ottieni coordinate dall'immagine
Escludi zona annotata
Utilizza il flag exclude_annotated_zone
nel comando vaictl per configurare il rilevamento dei movimenti all'interno o all'esterno della zona.
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 fungerà da zona negativa. I movimenti nelle zone annotate non verranno rilevati.
*Esegui il rilevamento dei movimenti solo all'esterno delle zone di input.
- Se impostato su false, la zona fungerà da zona positiva, su cui si concentrerà il rilevamento dei movimenti.
*Esegui il rilevamento dei movimenti solo nelle zone di input.
6. Esempio di filtro 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 movimento normale, il video produrrà un solo evento di movimento con la durata del video originale perché il filtro movimento registra l'albero in movimento come "in movimento costante per tutto il video". Tuttavia, con l'aiuto della zona di rilevamento dei movimenti, possiamo mascherare correttamente il movimento dell'albero e concentrarci sul movimento di auto e pedoni.
Preparazione del 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.
Credito video: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad e P. Ishwar, changedetection.net: A new change detection benchmark dataset, in Proc. IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012, Providence, RI, 16-21 Jun., 2012
Preparazione delle variabili 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 dei movimenti.
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.
Scegli una delle opzioni riportate di seguito per visualizzare i diversi tipi di utilizzo della 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 all'esterno delle zone di input.
Concentra 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.
Inviare stream video con filtro movimento
Inviare gli eventi di movimento alla console cloud
Puoi utilizzare vaictl per trasmettere in streaming i dati video di output alla console cloud. Per iniziare, attiva l'API Vision AI nella console Cloud.
Registra un nuovo stream
- Fai clic sulla scheda Stream nel riquadro a sinistra di Vertex AI Vision.
- Fai clic su Registrati
- In Nome stream, inserisci
motion-detection-stream
- Nella regione, inserisci
us-central1
- Fai clic su Registrati
Invio dei risultati allo stream
Questo comando trasmette in streaming 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 lo streaming continui.
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 essere necessari 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.
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 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.
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
Complimenti, hai completato 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 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