Filtre de mouvement Vertex AI Vision

1. Objectifs

Présentation

Cet atelier de programmation porte sur la création d'une application Vertex AI Vision de bout en bout pour illustrer l'envoi de vidéos avec la fonctionnalité de filtrage du mouvement. Dans ce tutoriel, nous allons passer en revue les différents paramètres de configuration du filtre de mouvement:

  • Sensibilité de la détection des mouvements
  • Durée minimale des événements
  • Période d'analyse
  • Temps d'attente
  • Zone de détection des mouvements

Points abordés

  • Comment ingérer des vidéos en streaming
  • Différentes fonctionnalités disponibles dans le filtre de mouvement et leur utilisation
  • Où consulter les statistiques du filtre de mouvement ?
  • Ajuster le paramètre en fonction de votre vidéo

2. Avant de commencer

  1. Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud. Remarque: Si vous ne prévoyez pas de conserver les ressources créées au cours de cette procédure, créez un projet au lieu de sélectionner un projet existant. Après avoir suivi ces étapes, vous pouvez supprimer le projet. Cela entraîne la suppression de toutes les ressources qui lui sont associées. Accéder au sélecteur de projet
  2. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
  3. Activez les API Compute Engine et Vision AI. Activer les API

Créez un compte de service:

  1. Dans la console Google Cloud, accédez à la page Créer un compte de service. Accéder à la page "Créer un compte de service"
  2. Sélectionnez votre projet.
  3. Dans le champ Nom du compte de service, saisissez un nom. La console Google Cloud renseigne le champ ID de compte de service à partir de ce nom. Dans le champ Description du compte de service, saisissez une description. Par exemple, "Compte de service" pour le guide de démarrage rapide.
  4. Cliquez sur Créer et continuer.
  5. Pour accorder l'accès à votre projet, attribuez le ou les rôles suivants à votre compte de service: Vision AI > Éditeur Vision AI, Compute Engine > Administrateur d'instances Compute (bêta), Stockage > Lecteur des objets Storage† . Dans la liste Sélectionnez un rôle, choisissez un rôle. Pour ajouter des rôles supplémentaires, cliquez sur Ajouter un autre rôle, puis ajoutez chaque rôle supplémentaire. Remarque: Le champ Rôle détermine les ressources auxquelles votre compte de service peut accéder dans votre projet. Vous pouvez révoquer ces rôles ou attribuer des rôles supplémentaires ultérieurement. Dans les environnements de production, n'accordez pas les rôles Propriétaire, Éditeur ou Lecteur. Attribuez plutôt un rôle prédéfini ou un rôle personnalisé répondant à vos besoins.
  6. Cliquez sur Continuer.
  7. Cliquez sur OK pour terminer la création du compte de service. Ne fermez pas la fenêtre de votre navigateur. Vous en aurez besoin lors de la tâche suivante.

Créez une clé de compte de service:

  1. Dans la console Google Cloud, cliquez sur l'adresse e-mail du compte de service que vous avez créé.
  2. Cliquez sur Clés.
  3. Cliquez sur Ajouter une clé, puis sur Créer une clé.
  4. Cliquez sur Create (Créer). Un fichier de clé JSON est téléchargé sur votre ordinateur.
  5. Cliquez sur Fermer.
  6. Installez et initialisez la Google Cloud CLI.

† Rôle requis uniquement si vous copiez un exemple de fichier vidéo à partir d'un bucket Cloud Storage.

3. Filtre de mouvement

Le filtre de mouvement capture les séquences de mouvement et de vidéo du produit qui contiennent des événements de mouvement. En ajustant la sensibilité du mouvement, la durée minimale des événements, la période d'analyse, la période d'attente et la zone de détection des mouvements, l'utilisateur peut configurer le filtre en fonction de ses besoins.

Configuration du filtre des mouvements

Cinq configurations de personnalisation sont disponibles dans le filtre de mouvement.

  1. Sensibilité du mouvement: niveau de sensibilité pour déclencher un mouvement.
  2. Durée minimale des événements: durée minimale pendant laquelle un événement de mouvement sera enregistré.
  3. Période d'analyse: durée pendant laquelle l'enregistrement vidéo doit commencer avant qu'un mouvement ne soit détecté.
  4. Période d'attente: lorsqu'un événement de mouvement se termine, un délai d'attente de la durée spécifiée se produit. Pendant cette période, les événements de mouvement ne sont pas déclenchés.
  5. Zone de détection des mouvements: zone configurée par l'utilisateur pour définir l'emplacement d'exécution de la détection des mouvements. (sera développé dans une section ultérieure)

Sensibilité du détecteur de mouvement

Utilisez l'option motion_detection_sensitivity dans la commande "vaictl".Chaîne
. Support par défaut. Vous avez le choix entre "Faible", "Moyenne" et "Élevée".

Plus la sensibilité à la détection des mouvements est élevée, plus elle est sensible aux bruits et aux mouvements mineurs. Ce paramètre est recommandé pour les environnements comportant de petits objets en mouvement (des personnes éloignées, par exemple) et un éclairage stable.

En revanche, une faible sensibilité est moins sensible aux interférences d'éclairage. Ce paramètre est idéal en cas d'interférences avec l'éclairage (en extérieur, par exemple) et en cas de faible qualité vidéo, lorsque le bruit est plus important. Ce paramètre étant le filtrage le plus agressif de tous, il peut ignorer les mouvements des petits objets.

Durée minimale des événements

Utilisez l'option min_event_length_in_seconds dans la commande "vaictl".
Entier. 10 secondes par défaut. Cette valeur doit être comprise entre 0 seconde et 3 600 secondes.

Durée minimale des vidéos d'événements de mouvement qui seront analysées une fois qu'un segment d'événements de mouvement a été détecté dans l'image.

Période d'analyse

Utilisez l'option look_back_window_in_seconds dans la commande "vaictl".
Entier. La valeur par défaut est de 3 secondes. Cette valeur doit être comprise entre 0 seconde et 3 600 secondes.

La période d'analyse correspond à la durée mise en cache avant la détection d'un événement de mouvement. Elle est utile lorsque nous souhaitons voir ce qui se passe dans le cadre quelques secondes avant la détection d'événements de mouvement.

Intervalle entre chaque période d'autoscaling

Utilisez l'option cool_down_period_in_seconds dans la commande "vaictl".
Entier. 300 secondes par défaut. Cette valeur doit être comprise entre 0 seconde et 3 600 secondes.

La période d'attente correspond à la durée de mise en pause de la détection des mouvements après qu'un événement de mouvement a été enregistré. Pendant la période d'attente, aucun calcul n'est effectué pour détecter les mouvements.

4. Exemple de filtre de mouvement de base

Manuel du SDK Vaictl

Pour consulter le manuel vaictl du flux d'entrée avec filtre de mouvement, utilisez la commande ci-dessous.

vaictl send video-file applying motion-filter -h

Préparer un exemple de vidéo

  1. Vous pouvez copier un exemple de vidéo à l'aide de la commande gsutil cp suivante. Remplacez la variable suivante :
  • SOURCE: emplacement du fichier vidéo à utiliser. Vous pouvez utiliser votre propre source de fichier vidéo (par exemple, gs://NOM_BUCKET/FILENAME.mp4) ou utiliser l'exemple de vidéo (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(vidéo avec des personnes et des véhicules, source).
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Préparer les variables d'environnement

Définissez les variables d'environnement ci-dessous pour utiliser le modèle de commande fourni.

variables vaictl

  • PROJECT_ID: ID de votre projet Google Cloud.
  • LOCATION_ID: ID de votre zone géographique. Par exemple, us-central1. Pour en savoir plus, consultez la section Emplacements Cloud.
  • LOCAL_FILE: nom d'un fichier vidéo local. Par exemple, street_vehicles_people.mp4.
  • L'option –loop: facultatif. Boucle les données du fichier pour simuler un flux de données.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1

Variables du filtre de mouvement

  • MOTION_SENSITIVITY: niveau de sensibilité de la détection des mouvements.
  • MIN_EVENT_LENGTH: durée minimale des événements de mouvement.
  • LOOK_BACK_WINDOW: durée de la capture avant le premier mouvement dans un événement de mouvement.
  • COOL_DOWN_PERIOD: période pendant laquelle la détection des mouvements s'interrompt après la capture d'un événement de mouvement.
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>

Préparer la commande de filtre de mouvement

Il existe deux options pour utiliser le filtre de mouvement avec un flux d'entrée. La première consiste à envoyer les événements de mouvement vers un flux dans la console Cloud. La deuxième option consiste à envoyer les événements de mouvement dans l'espace de stockage local.

Envoyer des résultats à la console Cloud

Vous pouvez utiliser vaictl pour diffuser les données vidéo de sortie vers la console Cloud. Commencez par activer l'API Vision AI dans la console Cloud.

Enregistrer un nouveau flux

  1. Onglet "Flux de clics" dans le panneau de gauche de Vertex AI Vision
  2. Cliquez sur "S'inscrire".
  3. Dans le champ "Nom du flux", saisissez motion-detection-stream.
  4. Dans la région, saisissez us-central1
  5. Cliquez sur "S'inscrire".

Envoi des résultats dans le flux

Cette commande diffuse un fichier vidéo dans un flux. Si vous utilisez l'option –loop, la vidéo est lue en boucle dans le flux jusqu'à ce que vous arrêtiez la commande. Nous allons exécuter cette commande en tant que tâche d'arrière-plan afin que son flux continue.

Ajoutez nohup au début et & à la fin pour en faire un job d'arrière-plan.

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

Il peut s'écouler environ 100 secondes entre le démarrage de l'opération d'ingestion vaictl et l'affichage de la vidéo dans le tableau de bord.

Une fois l'ingestion du flux disponible, vous pouvez afficher le flux vidéo dans l'onglet Flux du tableau de bord Vertex AI Vision en sélectionnant le flux de trafic.

Accéder à l'onglet "Flux"

Envoyer les résultats vers l'espace de stockage local

Cette commande diffuse un fichier vidéo dans un flux.

Ajoutez nohup au début et & à la fin pour en faire un job d'arrière-plan.

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. Zone de détection des mouvements

Dans cette section, nous allons nous intéresser à l'utilisation des zones de détection de mouvements et apprendre à les configurer. La zone est destinée à améliorer la détection des mouvements en masquant les mouvements provenant des zones qui ne vous intéressent pas.

La zone de détection des mouvements est de deux types : (1) zones positives où la détection des mouvements ne fonctionne que dans la zone annotée ; (2) des zones négatives où la détection des mouvements ignore tout mouvement dans la zone annotée.

Annotation de zone

Utilisez l'option zone_annotation dans la commande "vaictl" pour saisir les coordonnées des polygones de zone.Chaîne
. Valeur par défaut vide pour l'annotation de zone.

L'annotation de zone est une chaîne saisie par l'utilisateur, indiquant les zones de l'image que l'utilisateur souhaite masquer ou cibler. Pour annoter la zone, l'utilisateur doit spécifier les coordonnées de l'image des axes x et y pour chaque nœud de la zone. Une zone doit comporter au moins trois nœuds pour former un polygone. Il peut y avoir plusieurs zones dans un cadre. Si les zones se chevauchent, la zone couverte par les deux zones reste couverte.

L'annotation de zone doit suivre une syntaxe d'entrée spécifique.

  • Pour désigner un nœud unique, utilisez : afin de relier les axes x et y d'une coordination d'image. Par exemple, un nœud de (0,0) dans le coin supérieur gauche sera désigné par 0:0.
  • Pour désigner tous les nœuds d'une seule zone, utilisez ; pour connecter les nœuds. Par exemple, pour une zone avec des nœuds (0,0), (100,0), (100,100) et (0, 100), la zone sera désignée par 0:0;100:0;100:100;0:100. Saisissez toujours les nœuds sous forme de nœuds de connexion côte à côte, dans le sens des aiguilles d'une montre ou dans le sens inverse des aiguilles d'une montre.

Zone de détection des mouvements : carré*Zone carrée comportant quatre nœuds.

Zone de détection des mouvements : triangle*Zone de triangle comportant trois nœuds.

  • Pour désigner plusieurs zones dans une seule image, utilisez - pour connecter différentes zones. Par exemple, si nous voulons saisir à la fois (0,0), (100,0), (100,100), (0,100) et (120,120), (110,150) et (200,160), l'annotation de la zone d'entrée sera 0:0;100:0;100:100;0:100-120:120;110:150;200:160.

Zone de détection des mouvements : un cadre à deux zones*Deux zones dans une image.

Des outils en ligne permettent d'obtenir des coordonnées à partir d'une image. (par exemple, Wolfram – Obtenir des coordonnées à partir d'une image).

Exclure la zone annotée

Utilisez l'option exclude_annotated_zone dans la commande "vaictl" pour configurer la détection des mouvements dans une zone ou en dehors de celle-ci.Valeur booléenne
. La valeur par défaut est "false".

"Exclure la zone annotée" est une entrée booléenne indiquant si l'utilisateur souhaite ou non exclure la zone annotée pour la détection des mouvements.

  • Si elle est définie sur true, la zone annotée agit comme une zone négative. Les mouvements dans les zones annotées ne seront pas détectés.

Zone de détection des mouvements - option d&#39;exclusion *N'exécuter la détection des mouvements qu'en dehors des zones de saisie.

  • Si cette règle est définie sur "False", la zone est considérée comme positive, et la détection des mouvements se concentre en priorité.

Zone de détection des mouvements - option d&#39;inclusion *Exécuter la détection des mouvements uniquement dans les zones de saisie.

6. Exemple de filtre de mouvement avec zone de détection de mouvements

Dans cet exemple, nous allons utiliser une vidéo avec un arbre qui se déplace constamment au premier plan. Avec un filtre de mouvement standard, la vidéo ne génère qu'un seul événement de mouvement qui correspond à la durée de la vidéo d'origine. En effet, le filtre de mouvement enregistre l'arbre en mouvement comme un "déplacement constant tout au long de la vidéo". Cependant, la zone de détection des mouvements nous permet de masquer correctement les mouvements de l'arbre et de nous concentrer sur les mouvements des voitures et des piétons.

Préparation de vidéos

L'exemple de vidéo (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) contient des arbres, des voitures et des piétons du site www.changedetection.net.

Crédit vidéo: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad et P. Ishwar, changedetection.net: un nouvel ensemble de données d'analyse comparative de la détection des modifications, dans Proc. Atelier IEEE sur la détection des changements (CDW-2012), CVPR-2012, Providence, Rhode Island, 16-21 juin, 2012

Préparation de la variable d'environnement

les variables de projet Google Cloud.

export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4

Configuration de base des filtres de mouvement.

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>

Configuration de la zone de détection des mouvements.

Sélectionnez l'option ci-dessous pour afficher les différents types d'utilisation pour la zone de détection des mouvements.

Excluez l'arbre pour la détection des mouvements.

export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150"
export EXCLUDE_ANNOTATED_ZONE=true

Zone de détection des mouvements : exclure la détection des mouvements de la zone annotée dans l&#39;exemple de vidéo *N'exécuter la détection des mouvements qu'en dehors des zones de saisie.

Privilégier la détection des mouvements sur la rue.

export ZONE_ANNOTATION="0:300;780:300;780:480;0:480"
export EXCLUDE_ANNOTATED_ZONE=false

Zone de détection des mouvements : lancez la détection des mouvements à partir de la zone annotée dans l&#39;exemple vidéo. *N'exécuter la détection des mouvements qu'en dehors des zones de saisie.

Envoyer le flux vidéo avec filtre de mouvement

Envoyer les événements de mouvement à la console Cloud

Vous pouvez utiliser vaictl pour diffuser les données vidéo de sortie vers la console Cloud. Commencez par activer l'API Vision AI dans la console Cloud.

Enregistrer un nouveau flux

  1. Onglet "Flux de clics" dans le panneau de gauche de Vertex AI Vision
  2. Cliquez sur "S'inscrire".
  3. Dans le champ "Nom du flux", saisissez motion-detection-stream.
  4. Dans la région, saisissez us-central1
  5. Cliquez sur "S'inscrire".

Envoi des résultats dans le flux

Cette commande diffuse un fichier vidéo dans un flux. Si vous utilisez l'option –loop, la vidéo est lue en boucle dans le flux jusqu'à ce que vous arrêtiez la commande. Nous allons exécuter cette commande en tant que tâche d'arrière-plan afin que son flux continue.

Ajoutez nohup au début et & à la fin pour en faire un job d'arrière-plan.

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

Il peut s'écouler environ 100 secondes entre le démarrage de l'opération d'ingestion vaictl et l'affichage de la vidéo dans le tableau de bord.

Une fois l'ingestion du flux disponible, vous pouvez afficher le flux vidéo dans l'onglet Flux du tableau de bord Vertex AI Vision en sélectionnant le flux de trafic.

Accéder à l'onglet "Flux"

Envoyer les résultats vers l'espace de stockage local

Cette commande diffuse un fichier vidéo dans un flux. Si vous utilisez l'option –loop, la vidéo est lue en boucle dans le flux jusqu'à ce que vous arrêtiez la commande. Nous allons exécuter cette commande en tant que tâche d'arrière-plan afin que son flux continue.

Ajoutez nohup au début et & à la fin pour en faire un job d'arrière-plan.

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. Félicitations

Félicitations, vous avez terminé l'atelier !

Nettoyage

Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud, arrêtez l'opération du SDK vaictl via la ligne de commande avec ctrl + z.

Ressources

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

Commentaires

Cliquez ici pour nous faire part de vos commentaires

Enquête

Comment allez-vous utiliser ce tutoriel ?

Je vais le lire uniquement Je vais le lire et effectuer les exercices

Cet atelier de programmation vous a-t-il été utile ?

<ph type="x-smartling-placeholder"></ph> Très utile Plutôt utile
.