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 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 la 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

  • Ingérer des vidéos pour le streaming
  • 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 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 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 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électionner un rôle, sélectionnez 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'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 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 Google Cloud CLI.

† Rôle uniquement nécessaire 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 produits contenant 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 stabilisation 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

Cinq configurations sont disponibles pour personnaliser le filtre de mouvement.

  1. Sensibilité du capteur de mouvement: niveau de sensibilité du déclenchement du 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 la vidéo doit commencer à enregistrer avant qu'un événement de mouvement ne soit détecté.
  4. Délai de stabilisation: une fois qu'un événement de mouvement est terminé, un délai de stabilisation de la durée spécifiée est appliqué. 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 spécifier où la détection des mouvements doit s'exécuter. (Nous y reviendrons dans une section ultérieure.)

Sensibilité du détecteur de mouvement

Utilisez l'indicateur motion_detection_sensitivity dans la commande vaictl.Chaîne
. Format 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 mouvements plus petits. 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 lorsque l'éclairage est plus perturbé, comme dans un environnement extérieur, et pour une qualité vidéo inférieure où il peut y avoir plus de bruits. Étant donné que 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'indicateur min_event_length_in_seconds dans la commande vaictl.
Entier. 10 secondes par défaut. La plage est 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é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. La plage est 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. Il est utile lorsque vous souhaitez voir ce qui se passe dans le frame quelques secondes avant que des événements de mouvement ne soient détectés.

Intervalle entre chaque période d'autoscaling

Utilisez l'indicateur cool_down_period_in_seconds dans la commande vaictl.
 Entier. La valeur par défaut est de 300 secondes. La plage est comprise entre 0 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 exécuté pour détecter le mouvement.

4. Exemple de filtre de mouvement de base

Manuel du SDK Vaictl

Pour consulter le manuel vaictl sur 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 extrait 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 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 établissement. 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.
  • Option -loop: facultative. Boucle les données de 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: niveau de 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 mouvement.
  • COOL_DOWN_PERIOD: période pendant laquelle la détection de mouvement est mise en pause 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

Deux options s'offrent à vous pour utiliser le filtre de mouvement avec le flux d'entrée. La première consiste à envoyer les événements de mouvement à un flux dans la console cloud. La deuxième option consiste à envoyer les événements de mouvement au 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".

Envoyer les résultats à la diffusion

Cette commande diffuse un fichier vidéo dans un flux. Si vous utilisez l'option -loop, la vidéo est mise 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 traffic-stream.

Accéder à l'onglet "Flux"

Envoyer les résultats dans le stockage local

Cette commande lit en streaming un fichier vidéo dans un flux.

Ajoutez nohup au début et & à la fin pour en faire une tâche 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 voir comment utiliser la zone de détection de mouvement et la 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 se présente sous deux formes : (1) zones positives dans lesquelles la détection des mouvements ne s'exécute que dans la zone annotée ; (2) zones négatives dans lesquelles 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
. Par défaut, cette valeur est 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. Un frame peut comporter plusieurs zones. Si les zones se chevauchent, la zone couverte par les deux zones reste couverte.

L'annotation de zone doit respecter 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 (0,0) en haut à gauche sera désigné par 0:0.
  • Pour représenter tous les nœuds d'une même zone, connectez-les à l'aide de ;. 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 de connexion l'un à côté de l'autre. 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 comportant 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 connecter différentes zones. Par exemple, si nous souhaitons 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 des mouvements : cadre avec deux zones*Deux zones dans une image.

Pour obtenir les coordonnées à partir d'une image, certains outils sont disponibles en ligne. Par exemple, consultez Wolfram - Get Coordinates from Image (Wolfram - Obtenir les coordonnées à partir d'une image).

Exclure la zone annotée

Utilisez l'indicateur 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 la zone annotée de la détection de mouvement ou non.

  • 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 *Exécutez uniquement la détection de mouvement en dehors des zones d'entrée.

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

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 mouvement

Dans cet exemple, nous utiliserons une vidéo dans laquelle un arbre est en mouvement constant au premier plan. Avec le paramètre de filtre de mouvement standard, la vidéo ne produit qu'un seul événement de mouvement dont la durée correspond à celle 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 le mouvement des voitures et des piétons.

Préparation de la vidéo

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, dans l'atelier "Proc. IEEE Workshop on Change Detection (CDW-2012)", CVPR-2012, Providence, Rhode Island, 16-21 juin, 2012

Préparation de la variable 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.

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

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 *Exécutez uniquement la détection de mouvement en dehors des zones d'entrée.

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

Envoyer les résultats à la diffusion

Cette commande diffuse un fichier vidéo dans un flux. Si vous utilisez l'option -loop, la vidéo est mise 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 traffic-stream.

Accéder à l'onglet "Flux"

Envoyer les résultats sur 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 mise 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 une tâche 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, 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 envoyer 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 Plutôt utile