Application de surveillance du trafic Vertex AI Vision

1. Objectifs

Présentation

Cet atelier de programmation se concentre sur la création de bout en bout d'une application Vertex AI Vision pour surveiller les séquences vidéo du trafic en temps réel. Nous allons utiliser les fonctionnalités intégrées du modèle spécialisé pré-entraîné Analyse de l'occupation pour capturer les éléments suivants :

  • Comptez le nombre de véhicules et de personnes traversant une route à une certaine ligne.
  • Comptez le nombre de véhicules/personnes dans une zone fixe de la route.
  • Détecter les embouteillages sur n'importe quelle partie de la route.

Points abordés

  • Configurer une VM pour ingérer des vidéos à diffuser en streaming
  • Créer une application dans Vertex AI Vision
  • Les différentes fonctionnalités disponibles dans Occupancy Analytics et comment les utiliser
  • Déployer l'application
  • Découvrez comment rechercher des vidéos dans le Media Warehouse de Vertex AI Vision.
  • Comment connecter la sortie à BigQuery, écrire une requête SQL pour extraire des insights à partir de la sortie JSON du modèle et visualiser le résultat en temps réel dans Looker Studio.

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. Configurer une VM pour diffuser des vidéos

Avant de créer une application dans Occupancy Analytics, vous devez enregistrer un flux qui pourra être utilisé ultérieurement par l'application.

Dans ce tutoriel, vous allez créer une instance de VM Compute Engine qui héberge une vidéo, puis envoyer les données de cette vidéo en streaming depuis la VM.

Créer une VM Linux

La première étape pour envoyer une vidéo à partir d'une instance de VM Compute Engine consiste à créer l'instance de VM.

  1. Dans la console, accédez à la page Instances de VM. Accéder à la page "Instances de VM"
  2. Sélectionnez le projet et cliquez sur Continuer.
  3. Cliquez sur Créer une instance.
  4. Spécifiez un nom pour votre VM. Pour en savoir plus, consultez Recommandation pour l'attribution de noms aux ressources.
  5. Facultatif : modifiez la zone de cette VM. Compute Engine choisit de manière aléatoire la liste des zones de chaque région pour encourager l'utilisation dans plusieurs zones.
  6. Acceptez les autres options par défaut. Pour en savoir plus sur ces options, consultez Créer et démarrer une VM.
  7. Pour créer et démarrer la VM, cliquez sur Créer.

Configurer l'environnement de VM

Une fois la VM démarrée, vous pouvez utiliser la console pour vous y connecter à l'aide de SSH depuis votre navigateur. Vous pouvez ensuite télécharger l'outil de ligne de commande vaictl pour ingérer des vidéos dans votre flux.

Établir une connexion SSH avec votre VM

  1. Dans la console, accédez à la page Instances de VM. Accéder à la page "Instances de VM"
  2. Dans la section Se connecter de la ligne de l'instance que vous avez créée, cliquez sur SSH. Une connexion SSH s'ouvre dans une nouvelle fenêtre de navigateur. Option SSH dans l'UI

Télécharger l'outil de ligne de commande vaictl

  1. Dans la fenêtre SSH dans le navigateur, téléchargez l'outil de ligne de commande Vertex AI Vision (vaictl) à l'aide de la commande suivante :
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
  1. Installez l'outil de ligne de commande en exécutant la commande suivante :
sudo apt install ./visionai_0.0-4_amd64.deb
  1. Vous pouvez tester l'installation en exécutant la commande suivante :
vaictl --help

4. Ingérer un fichier vidéo pour le streaming

Une fois votre environnement de VM configuré, vous pouvez copier un exemple de fichier vidéo, puis utiliser vaictl pour diffuser les données vidéo vers votre application d'analyse de l'occupation.

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 "traffic-stream".
  4. Dans le champ "Région", saisissez "us-central1".
  5. Cliquez sur "S'inscrire".

L'enregistrement du flux prend quelques minutes.

Copier un exemple de vidéo sur votre VM

  1. Dans la fenêtre SSH dans le navigateur de votre VM, copiez 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 .

Diffuser des vidéos depuis une VM et ingérer des données dans votre flux

  1. Pour envoyer ce fichier vidéo local au flux d'entrée de l'application, utilisez la commande suivante. Vous devez effectuer les substitutions de variables suivantes :
  • 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
export LOCAL_FILE=street_vehicles_people.mp4
  1. 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 afin que le flux continue même après la déconnexion de la VM.
  • ( ajoutez "nohup" au début et "&" à la fin pour en faire un job en arrière-plan)
nohup vaictl -p $PROJECT_ID \
    -l $LOCATION_ID \
    -c application-cluster-0 \
    --service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --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"

Vue de la vidéo en direct diffusée dans l&#39;UIVue en direct de la vidéo ingérée dans le flux dans la console Google Cloud. Crédit vidéo : Elizabeth Mavor sur Pixabay (pixellisation ajoutée).

5. Créer une application

La première étape consiste à créer une application qui traite vos données. Une application peut être considérée comme un pipeline automatisé qui relie les éléments suivants :

  • Ingestion de données : un flux vidéo est ingéré dans un flux.
  • Analyse des données : un modèle d'IA(vision par ordinateur) peut être ajouté après l'ingestion.
  • Stockage des données : les deux versions du flux vidéo (le flux d'origine et le flux traité par le modèle d'IA) peuvent être stockées dans un entrepôt multimédia.

Dans la console Google Cloud, une application est représentée sous forme de graphique.

Créer une application vide

Avant de pouvoir remplir le graphique de l'application, vous devez d'abord créer une application vide.

Créez une application dans la console Google Cloud.

  1. Accédez à la console Google Cloud.
  2. Ouvrez l'onglet Applications du tableau de bord Vertex AI Vision.

Accéder à l'onglet "Applications"

  1. Cliquez sur le bouton Créer.
  2. Saisissez "traffic-app" comme nom d'application et choisissez votre région.
  3. Cliquez sur Créer.

Ajouter des nœuds de composant d'application

Une fois l'application vide créée, vous pouvez ajouter les trois nœuds au graphique de l'application :

  1. Nœud d'ingestion : ressource de flux qui ingère les données envoyées à partir d'une instance de VM Compute Engine que vous créez.
  2. Nœud de traitement : modèle d'analyse de l'occupation qui agit sur les données ingérées.
  3. Nœud de stockage : entrepôt multimédia qui stocke les vidéos traitées et sert de magasin de métadonnées. Les magasins de métadonnées incluent des informations analytiques sur les données vidéo ingérées et des informations inférées par les modèles d'IA.

Ajoutez des nœuds de composant à votre application dans la console.

  1. Ouvrez l'onglet Applications du tableau de bord Vertex AI Vision. Accéder à l'onglet "Applications"
  2. Sur la ligne "Trafic vers l'application", sélectionnez Afficher le graphique. Vous êtes alors redirigé vers la visualisation graphique du pipeline de traitement.

Ajouter un nœud d'ingestion de données

  1. Pour ajouter un nœud de flux d'entrée, sélectionnez l'option Flux dans la section Connecteurs du menu latéral.
  2. Dans la section Source du menu Flux qui s'affiche, sélectionnez Ajouter des flux.
  3. Dans le menu Ajouter des flux, sélectionnez Enregistrer les nouveaux flux et ajoutez "traffic-stream" comme nom de flux.
  4. Pour ajouter le flux au graphique de l'application, cliquez sur Ajouter des flux.

Ajouter un nœud de traitement des données

  1. Pour ajouter le nœud de modèle de comptage d'occupation, sélectionnez l'option Analyse de l'occupation dans la section Modèles spécialisés du menu latéral.
  2. Laissez les sélections par défaut Personnes et Véhicules.
  3. Ajoutez des lignes dans le croisement de lignes. Utilisez l'outil Ligne multipoint pour dessiner les lignes où vous devez détecter les voitures ou les personnes qui entrent ou sortent.
  4. Dessinez les zones actives pour compter les personnes/véhicules dans ces zones.
  5. Ajoutez des paramètres pour le temps de séjour afin de détecter les embouteillages si une zone active est dessinée.
  • (Les zones et les lignes actives ne sont pas compatibles simultanément. N'utilisez qu'une seule fonctionnalité à la fois.)

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

Ajouter un nœud de stockage de données

  1. Pour ajouter le nœud de destination de sortie (stockage), sélectionnez l'option Entrepôt de données multimédias Vertex AI Vision dans la section Connecteurs du menu latéral.
  2. Dans le menu Entrepôt de données multimédias de Vertex AI Vision, cliquez sur Connecter un entrepôt.
  3. Dans le menu Connecter un entrepôt, sélectionnez Créer un entrepôt. Nommez l'entrepôt "traffic-warehouse" et laissez la durée TTL à 14 jours.
  4. Cliquez sur le bouton Créer pour ajouter l'entrepôt.

6. Connecter la sortie à une table BigQuery

Lorsque vous ajoutez un connecteur BigQuery à votre application Vertex AI Vision, toutes les sorties de modèle d'application connectées sont ingérées dans la table cible.

Vous pouvez créer votre propre table BigQuery et la spécifier lorsque vous ajoutez un connecteur BigQuery à l'application, ou laisser la plate-forme de l'application Vertex AI Vision créer automatiquement la table.

Création automatique de tableaux

Si vous laissez la plate-forme d'application Vertex AI Vision créer automatiquement la table, vous pouvez spécifier cette option lorsque vous ajoutez le nœud du connecteur BigQuery.

Les conditions suivantes s'appliquent aux ensembles de données et aux tables si vous souhaitez utiliser la création automatique de tables :

  • Ensemble de données : le nom de l'ensemble de données créé automatiquement est "visionai_dataset".
  • Table : le nom de la table créée automatiquement est visionai_dataset.APPLICATION_ID.
  • Gestion des erreurs :
  • Si une table portant le même nom existe déjà dans le même ensemble de données, aucune création automatique n'a lieu.
  1. Ouvrez l'onglet Applications du tableau de bord Vertex AI Vision. Accéder à l'onglet "Applications"
  2. Sélectionnez Afficher l'application à côté du nom de votre application dans la liste.
  3. Sur la page du générateur d'applications, sélectionnez BigQuery dans la section Connecteurs.
  4. Laissez le champ Chemin d'accès BigQuery vide. ee0b67d4ab2263d.png
  5. Dans Stocker les métadonnées de, sélectionnez uniquement "Analyse de l'occupation" et décochez les flux.

Le graphique final de l'application devrait se présenter comme suit :

1787242465fd6da7.png

7. Déployer votre application pour l'utiliser

Une fois que vous avez créé votre application de bout en bout avec tous les composants nécessaires, la dernière étape pour l'utiliser consiste à la déployer.

  1. Ouvrez l'onglet Applications du tableau de bord Vertex AI Vision. Accéder à l'onglet "Applications"
  2. Sélectionnez Afficher le graphique à côté de l'application de trafic dans la liste.
  3. Sur la page du générateur de graphiques d'application, cliquez sur le bouton Deploy (Déployer).
  4. Dans la boîte de dialogue de confirmation suivante, sélectionnez Déployer. L'opération de déploiement peut prendre plusieurs minutes. Une fois le déploiement terminé, des coches vertes s'affichent à côté des nœuds. ee78bbf00e5db898.png

8. Rechercher du contenu vidéo dans l'entrepôt de stockage

Une fois que vous avez ingéré des données vidéo dans votre application de traitement, vous pouvez afficher les données vidéo analysées et les rechercher en fonction des informations d'analyse de l'occupation.

  1. Ouvrez l'onglet Entrepôts du tableau de bord Vertex AI Vision. Accéder à l'onglet "Entrepôts"
  2. Recherchez l'entrepôt traffic-warehouse dans la liste, puis cliquez sur Afficher les composants.
  3. Dans la section Nombre de personnes ou Nombre de véhicules, définissez la valeur Min sur 1 et la valeur Max sur 5.
  4. Pour filtrer les données vidéo traitées stockées dans le Media Warehouse de Vertex AI Vision, cliquez sur Rechercher.

e636361b19738c8d.png

Vue des données vidéo stockées qui correspondent aux critères de recherche dans la console Google Cloud. Crédit vidéo : Elizabeth Mavor sur Pixabay (critères de recherche appliqués).

9. Analyser les résultats dans une table BigQuery

Accéder à BigQuery

Sélectionnez l'ensemble de données : visionai_dataset.

Sélectionnez la table : votre APPLICATION_ID (traffic-app dans cet exemple)

Cliquez sur les trois points à droite du nom de la table, puis sur "Requête".

Rédigez la requête suivante :

Requête 1 : requête permettant de vérifier le nombre de véhicules franchissant chaque ligne par minute

abc.sql

- Get list of active marked lines for each timeframe
WITH line_array AS (
  SELECT
  t.ingestion_time AS ingestion_time,
  JSON_QUERY_ARRAY(t.annotation.stats["crossingLineCounts"]) AS lines
  FROM
  `PROJ_ID.visionai_dataset.APP_ID` AS t
),
- Flatten active lines to get individual entities details
flattened AS (
  SELECT
  line_array.ingestion_time,
  JSON_VALUE(line.annotation.id) as line_id,
  JSON_QUERY_ARRAY(line["positiveDirectionCounts"]) AS entities
  FROM line_array, unnest(line_array.lines) as line
 )
- Generate aggregate vehicle count per zone w.r.t time 
SELECT
  STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, line_id,
  SUM(INT64(entity["count"])) as vehicle_count
FROM
  flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, line_id

Requête 2 : requête permettant de vérifier le nombre de véhicules par minute dans chaque zone

- Get list of active zones for each timeframe
WITH zone_array AS (
     SELECT
     t.ingestion_time AS ingestion_time,
     JSON_QUERY_ARRAY(t.annotation.stats["activeZoneCounts"]) AS zones
     FROM
     `PROJ_ID.visionai_dataset.APP_ID` AS t
),
- Flatten active zones to get individual entities details
flattened AS (
   SELECT zone_array.ingestion_time, JSON_VALUE(zone.annotation.id) as zone_id,
         JSON_QUERY_ARRAY(zone["counts"]) AS entities
   FROM zone_array, unnest(zone_array.zones) as zone
 )
- Generate aggregate vehicle count per zone w.r.t time 
SELECT 
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, 
zone_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, zone_id

Dans les requêtes ci-dessus, vous pouvez remplacer "Véhicule" par "Personne" pour comptabiliser les personnes.

Cet atelier de programmation ne présente que les exemples de données et la visualisation pour la requête 1. Vous pouvez suivre une procédure similaire pour Query2.

e6fd891f3a46246.png

Cliquez sur "Explorer les données" dans le menu de droite, puis sélectionnez "Explorer avec Looker Studio".

9e737ddb4d0d25b6.png

Dans le volet "Dimension", ajoutez l'heure et définissez la configuration de l'heure sur "Date et heure". Dans "dimension de répartition", ajoutez line_id. b5da9704ccd8db.png

Le graphique ci-dessus indique le nombre de véhicules/personnes traversant chaque ligne par minute.

Les barres bleu foncé et bleu clair indiquent les deux différents line-ids.

10. Félicitations

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

Nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.

Supprimer le projet

Supprimer des ressources individuelles

Ressources

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

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