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 del movimento. In questo tutorial esamineremo i diversi parametri nella configurazione del filtro di movimento:
- Sensibilità del rilevamento dei movimenti
- Durata minima evento
- Finestra temporale
- Tempo di raffreddamento
- Zona di rilevamento dei movimenti
Cosa imparerai a fare
- Come importare i video per lo streaming
- Le 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 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
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.
- Abilita le API Compute Engine e Vision AI. Abilita le API
Crea un service account:
- Nella console Google Cloud, vai alla pagina Crea service account. Vai a Crea service account
- Seleziona il progetto.
- 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.
- Fai clic su Crea e continua.
- 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.
- Fai clic su Continua.
- 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:
- Nella console Google Cloud, fai clic sull'indirizzo email del service account che hai creato.
- Fai clic su Chiavi.
- Fai clic su Aggiungi chiave, 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.
† Ruolo necessario solo se copi un file video di esempio da un bucket Cloud Storage.
3. Filtro movimento
Il filtro Movimento acquisisce i segmenti video di movimento e di prodotto che contengono eventi di movimento. Regolando la sensibilità al movimento, la durata minima dell'evento, la finestra di ricerca, il periodo di raffreddamento e la zona di rilevamento del movimento, l'utente può configurare il filtro in base alle proprie esigenze.
Configurazione del filtro di movimento
Nel filtro del movimento sono disponibili cinque configurazioni per la personalizzazione.
- Sensibilità di rilevamento del movimento: quanto deve essere sensibile il rilevamento del movimento.
- Durata minima evento: la durata minima per cui verrà acquisito un evento di movimento.
- Finestra temporale: per quanto tempo prima del rilevamento di un evento di movimento deve iniziare la registrazione del video.
- Periodo di raffreddamento: dopo la fine di un evento di movimento, si verifica un periodo di raffreddamento della durata specificata. Durante il periodo di raffreddamento, gli eventi di movimento non verranno attivati.
- Zona di rilevamento del movimento: zona configurata dall'utente per specificare dove deve essere eseguito il rilevamento del movimento. (Verrà approfondito nella sezione successiva)
Sensibilità di rilevamento del movimento
Utilizza il flag motion_detection_sensitivity nel comando vaictl.
Stringa. Mezzo predefinito. Puoi scegliere tra le impostazioni 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 impostazioni in cui sono presenti oggetti in movimento più piccoli (come persone da lontano) e un'illuminazione stabile.
D'altra parte, la bassa sensibilità è meno sensibile alle interferenze luminose. Questa impostazione è ideale quando ci sono più interferenze luminose, 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 di piccoli oggetti.
Durata minima evento
Utilizza il flag min_event_length_in_seconds nel comando vaictl.
Numero intero. Il valore predefinito è 10 secondi. L'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 evento 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 è compreso tra 0 e 3600 secondi.
La finestra temporale è la durata memorizzata nella cache prima del rilevamento di un evento di movimento. È utile quando ci interessa vedere cosa succede nell'inquadratura alcuni 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. L'intervallo è compreso tra 0 e 3600 secondi.
Il periodo di raffreddamento indica per quanto tempo il rilevamento del movimento verrà 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 del movimento di base
Manuale dell'SDK Vaictl
Per controllare il manuale di vaictl per il flusso di input con filtro di 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:
- 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 .
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: 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
Variabili del filtro di movimento
- MOTION_SENSITIVITY: la sensibilità del rilevamento del movimento.
- 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 del movimento 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 di movimento
Esistono due opzioni per utilizzare il filtro del movimento con il flusso di input. La prima opzione è 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. Inizia attivando l'API Vision AI nella console Cloud.
Registrare un nuovo stream
- Fai clic sulla scheda Flussi di clic 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 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.
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 disponibile l'importazione dello stream, puoi visualizzare il feed video nella scheda Stream della dashboard di Vertex AI Vision selezionando lo stream del traffico.
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 esamineremo l'utilizzo della zona di rilevamento del movimento e come configurarla. La zona ha lo scopo di migliorare il rilevamento del movimento mascherando il movimento proveniente da aree che non ti interessano.
La zona di rilevamento del movimento è di due tipi: (1) zone positive, in cui il rilevamento del movimento viene eseguito solo nell'area annotata; (2) zone negative, in cui il rilevamento del movimento ignora qualsiasi movimento nell'area annotata.
Annotazione della zona
Utilizza il flag zone_annotation nel comando vaictl per inserire le coordinate dei poligoni della zona.
Stringa. Valore predefinito vuoto per l'annotazione della zona.
L'annotazione della zona sarà una stringa inserita dall'utente, che indica le zone del frame che l'utente vuole nascondere o su cui vuole concentrarsi. 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. In un frame possono essere presenti più zone. Se le zone si sovrappongono, l'area coperta da entrambe le zone verrà comunque coperta.
L'annotazione della zona ha una sintassi di input specifica da seguire.
- Per indicare un singolo nodo, utilizza
:per collegare l'asse x e l'asse y di una coordinata dell'immagine. Ad esempio, un nodo di(0,0)nell'angolo in alto a sinistra verrà indicato come0:0. - Per indicare tutti i nodi in una singola zona, utilizza
;per connetterli. Ad esempio, per una zona con nodi(0,0),(100,0),(100,100)e(0, 100), la zona verrà 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 orario o 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 sia(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, vedi Wolfram - Get Coordinates from Image
Escludi zona annotata
Utilizza il flag exclude_annotated_zone nel comando vaictl per configurare il rilevamento del movimento all'interno o all'esterno della zona.
Booleano. Il valore predefinito è false.
La zona esclusa annotata è un input booleano dell'utente che indica se l'utente vuole escludere o meno la zona annotata nel rilevamento del movimento.
- Se impostato su
true, la zona annotata fungerà da zona negativa. I movimenti nelle zone annotate non verranno rilevati.
*Esegui il rilevamento del movimento solo al di fuori delle zone di input.
- Se impostato su false, la zona fungerà da zona positiva, su cui si concentrerà il rilevamento del movimento.
*Esegui il rilevamento del movimento solo nelle zone di input.
6. Esempio di filtro del movimento con zona di rilevamento del movimento
In questo esempio, utilizzeremo un video in cui un albero si muove costantemente in primo piano. Nell'impostazione del filtro di movimento normale, il video produrrà un solo evento di movimento con la durata del video originale, perché il filtro di movimento registra l'albero in movimento come "in movimento costante per tutto il video". Tuttavia, con l'aiuto della zona di rilevamento del movimento, possiamo mascherare correttamente il movimento dell'albero e concentrarci su quello 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.
Video di: 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 del progetto Google Cloud.
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
Configurazione del filtro del movimento di base.
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 diversi tipi di utilizzo della zona di rilevamento del movimento.
Escludi l'albero dal rilevamento dei movimenti.
export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150" export EXCLUDE_ANNOTATED_ZONE=true
*Esegui il rilevamento del movimento solo al di fuori 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 del movimento solo al di fuori delle zone di input.
Inviare lo stream video con il filtro di movimento
Inviare gli eventi di movimento alla console cloud
Puoi utilizzare vaictl per trasmettere in streaming i dati video di output alla console Cloud. Inizia attivando l'API Vision AI nella console Cloud.
Registrare un nuovo stream
- Fai clic sulla scheda Flussi di clic 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 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.
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 disponibile l'importazione dello stream, puoi visualizzare il feed video nella scheda Stream della dashboard di Vertex AI Vision selezionando lo stream del traffico.
Invio dei risultati allo spazio di archiviazione locale
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.
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 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