Filtre de mouvement Vertex AI Vision

1. Objectifs

Présentation

Cet atelier de programmation se concentre sur la création d'une application Vertex AI Vision de bout en bout pour illustrer la fonctionnalité d'envoi de vidéos avec filtrage de 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 de retour au calme
  • Zone de détection des mouvements

Points abordés

  • Ingérer des vidéos pour le streaming
  • Les différentes fonctionnalités disponibles dans le filtre de mouvement et comment les utiliser
  • 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 comptez pas conserver les ressources créées dans cette procédure, créez un projet au lieu d'en sélectionner un 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 remplit le champ ID du compte de service en fonction de ce nom. Dans le champ Description du compte de service, saisissez une description. Par exemple, "Compte de service pour le 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), Storage > Lecteur des objets de l'espace de stockage† . Dans la liste Sélectionner un rôle, sélectionnez un rôle. Pour ajouter des rôles supplémentaires, cliquez sur Ajouter un autre rôle et 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'attribuez pas les rôles Propriétaire, Éditeur et 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 Keys (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 segments vidéo de mouvement et de produit qui contiennent des événements de mouvement. En ajustant la sensibilité au mouvement, la durée minimale de l'événement, la période d'analyse, la période de latence et la zone de détection de mouvement, l'utilisateur peut configurer le filtre en fonction de ses propres besoins.

Configuration du filtre de mouvement

Le filtre de mouvement propose cinq configurations que vous pouvez personnaliser.

  1. Sensibilité du capteur de mouvement : sensibilité du capteur de mouvement.
  2. Durée minimale de l'événement : durée minimale pendant laquelle un événement de mouvement sera enregistré.
  3. Période d'analyse : durée pendant laquelle la vidéo doit commencer à enregistrer avant la détection d'un événement de mouvement.
  4. Période de refroidissement : une fois un événement de mouvement terminé, une période de refroidissement de la durée spécifiée se produit. Pendant la période de refroidissement, 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 spécifier où la détection des mouvements doit s'exécuter. (Sera détaillé 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 pouvez choisir entre "Faible", "Moyenne" ou "Élevée".

Plus la sensibilité de la détection de mouvement est élevée, plus elle est sensible au bruit et aux petits mouvements. Ce paramètre est recommandé pour les environnements où se trouvent de petits objets en mouvement (comme des personnes au loin) et où la luminosité est stable.

En revanche, une faible sensibilité est moins sensible aux interférences lumineuses. Ce paramètre est idéal en cas d'interférences lumineuses plus importantes, comme dans un environnement extérieur, et pour les vidéos de qualité inférieure où il peut y avoir plus de bruit. Comme ce paramètre est le plus agressif de tous, il peut ignorer les mouvements de petits objets.

Durée minimale des événements

Utilisez l'option min_event_length_in_seconds dans la commande vaictl.
 Entier. La valeur par défaut est de 10 secondes. La valeur doit être comprise entre 0 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énement de mouvement a été détecté dans le cadre.

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. La valeur doit être comprise entre 0 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. Cela 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. La valeur par défaut est de 300 secondes. La valeur doit être comprise entre 0 et 3 600 secondes.

La période de refroidissement correspond à la durée pendant laquelle la détection de mouvement est suspendue après la capture d'un événement de mouvement. Pendant la période d'attente, aucun calcul ne sera effectué pour détecter les mouvements.

4. Exemple de filtre de mouvement de base

Manuel du SDK Vaictl

Pour consulter le manuel vaictl concernant le 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://BUCKET_NAME/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 : votre ID d'établissement. Par exemple, us-central1. Pour en savoir plus, consultez Emplacements Cloud.
  • LOCAL_FILE : nom d'un fichier vidéo local. Par exemple, street_vehicles_people.mp4.
  • Option "–loop" : facultative. Boucle les données du fichier pour simuler le streaming.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1

Variables de filtre de mouvement

  • MOTION_SENSITIVITY : sensibilité de la détection de mouvement.
  • MIN_EVENT_LENGTH : durée minimale des événements de mouvement.
  • LOOK_BACK_WINDOW : durée à capturer avant le premier mouvement dans un événement de détection de mouvement.
  • COOL_DOWN_PERIOD : période pendant laquelle la détection de mouvement est suspendue 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 le flux d'entrée. La première option consiste à envoyer les événements de mouvement à un flux dans la console Cloud. La deuxième option consiste à envoyer les événements de mouvement vers le stockage local.

Envoyer les 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. Cliquez sur l'onglet "Flux" 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".

Envoyer les résultats au flux

Cette commande diffuse un fichier vidéo dans un flux. Si vous utilisez l'indicateur "–loop", la vidéo est mise en boucle dans le flux jusqu'à ce que vous arrêtiez la commande. Nous exécuterons cette commande en tant que tâche en arrière-plan pour que le flux continue.

Ajoutez nohup au début et & à la fin pour en faire un job en 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ébut de l'opération d'ingestion vaictl et l'affichage de la vidéo dans le tableau de bord.

Une fois l'ingestion de flux disponible, vous pouvez voir 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 le 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 en 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 examiner l'utilisation de la zone de détection de mouvement et comment la configurer. Cette zone est destinée à améliorer la détection des mouvements en masquant ceux provenant des zones qui ne vous intéressent pas.

La zone de détection de mouvement comporte deux types : (1) les zones positives où la détection de mouvement ne s'exécute que dans la zone annotée ; (2) les zones négatives où la détection de mouvement ignore tout mouvement dans la zone annotée.

Annotation de zone

Utilisez l'indicateur zone_annotation dans la commande vaictl pour saisir les coordonnées des polygones de zone.
 Chaîne. La valeur par défaut est vide pour l'annotation de zone.

L'annotation de zone sera une chaîne saisie par l'utilisateur, indiquant les zones du cadre que l'utilisateur souhaite masquer ou sur lesquelles il souhaite se concentrer. Pour annoter la zone, l'utilisateur devra spécifier les coordonnées de l'image sur les axes X et Y pour chaque nœud de la zone. Une zone doit comporter au moins trois nœuds pour former un polygone. Un même frame peut contenir plusieurs zones. Si les zones se chevauchent, la zone couverte par les deux zones le sera toujours.

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

  • Pour désigner un seul nœud, utilisez : pour relier les axes X et Y des coordonnées d'une image. Par exemple, un nœud (0,0) en haut à gauche sera indiqué par 0:0.
  • Pour désigner tous les nœuds d'une même zone, utilisez ; pour les connecter. Par exemple, pour une zone avec des nœuds de (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 en tant que nœuds de connexion les uns à côté des autres. L'ordre peut être dans le sens des aiguilles d'une montre ou dans le sens inverse.

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

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

  • Pour indiquer plusieurs zones dans un même frame, utilisez - pour relier les différentes zones. Par exemple, si nous voulons saisir à la fois (0,0), (100,0), (100,100), (0,100) et (120,120), (110,150), (200,160), l'annotation de la zone de saisie sera 0:0;100:0;100:100;0:100-120:120;110:150;200:160.

Zone de détection de mouvement : un cadre avec deux zones*Deux zones dans un cadre.

Pour obtenir les coordonnées d'une image, vous pouvez utiliser certains outils disponibles en ligne. Par exemple, consultez Wolfram – Get Coordinates from Image.

Exclure la zone annotée

Utilisez le flag exclude_annotated_zone dans la commande vaictl pour configurer la détection de mouvement dans une zone ou en dehors d'une zone.
 : booléen. La valeur par défaut est "false".

"Exclure la zone annotée" est une entrée booléenne de l'utilisateur, indiquant s'il souhaite exclure ou non la zone annotée de la détection de mouvement.

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

Zone de détection de mouvements : option &quot;Exclure&quot; *Exécutez la détection de mouvement uniquement en dehors des zones d'entrée.

  • Si la valeur est définie sur "false", la zone agira comme une zone positive sur laquelle la détection de mouvement se concentrera.

Option &quot;Inclure&quot; de la zone de détection de mouvement *Exécutez la détection de mouvement uniquement dans les zones d'entrée.

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

Dans cet exemple, nous allons utiliser une vidéo dans laquelle un arbre est en mouvement constant au premier plan. Avec le paramètre de filtre de mouvement normal, la vidéo ne génère qu'un seul événement de mouvement qui a la durée de la vidéo d'origine, car le filtre de mouvement enregistre l'arbre en mouvement comme "en mouvement constant tout au long de la vidéo". Toutefois, grâce à la zone de détection de mouvement, nous pouvons masquer correctement le mouvement de l'arbre et nous concentrer sur celui des voitures et des piétons.

Préparation des 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 provenant de www.changedetection.net.

Crédit vidéo : N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad et 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

Préparation des variables d'environnement

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 du filtre 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.

Choisissez l'une des options ci-dessous pour découvrir les différents types d'utilisation de la zone de détection de mouvements.

Excluez l'arbre de la détection de mouvement.

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

Zone de détection de mouvements : excluez la détection de mouvements de la zone annotée dans l&#39;exemple de vidéo. *Exécutez la détection de mouvement uniquement en dehors des zones d'entrée.

Concentrez 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 de mouvements : exécutez la détection de mouvements à partir de la zone annotée dans l&#39;exemple de vidéo. *Exécutez la détection de mouvement uniquement en dehors des zones d'entrée.

Envoyer un flux vidéo avec un 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. Cliquez sur l'onglet "Flux" 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".

Envoyer les résultats au flux

Cette commande diffuse un fichier vidéo dans un flux. Si vous utilisez l'indicateur "–loop", la vidéo est mise en boucle dans le flux jusqu'à ce que vous arrêtiez la commande. Nous exécuterons cette commande en tant que tâche en arrière-plan pour que le flux continue.

Ajoutez nohup au début et & à la fin pour en faire un job en 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ébut de l'opération d'ingestion vaictl et l'affichage de la vidéo dans le tableau de bord.

Une fois l'ingestion de flux disponible, vous pouvez voir 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 le stockage local

Cette commande diffuse un fichier vidéo dans un flux. Si vous utilisez l'indicateur "–loop", la vidéo est mise en boucle dans le flux jusqu'à ce que vous arrêtiez la commande. Nous exécuterons cette commande en tant que tâche en arrière-plan pour que le flux continue.

Ajoutez nohup au début et & à la fin pour en faire un job en 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, mettez fin à l'opération du SDK vaictl en 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 ?

Très utile Moyennement utile