Application d'analyse de l'occupation Vertex AI Vision avec gestion des événements

1. Objectifs

Présentation

Cet atelier de programmation vous permettra de créer une application Vertex AI Vision de bout en bout pour envoyer des événements avec la fonctionnalité de gestion des événements. Nous allons utiliser les fonctionnalités intégrées du modèle spécialisé pré-entraîné Analyse de l'occupation pour générer des événements en fonction des éléments suivants:

  • Comptez le nombre de véhicules et de personnes qui traversent une route au niveau d'une ligne donnée.
  • Comptez le nombre de véhicules/personnes dans une région fixe de la route.
  • Détecter des embouteillages sur n'importe quelle partie de la route

Points abordés

  • Ingérer des vidéos pour le streaming
  • Créer une application dans Vertex AI Vision
  • Différentes fonctionnalités disponibles dans Occupancy Analytics et comment les utiliser
  • Déployer l'application
  • Rechercher des vidéos dans votre espace de stockage Vertex AI Vision Media Warehouse
  • Créer une fonction Cloud qui traite les données du modèle Occupancy Analytics
  • Créer un sujet et un abonnement Pub/Sub
  • Configurer la gestion des événements pour envoyer des événements via un sujet Pub/Sub

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 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 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 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. Ingérer un fichier vidéo pour le streaming

Vous pouvez utiliser vaictl pour diffuser les données vidéo dans 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. Pour la région, saisissez "us-central1".
  5. Cliquez sur "S'inscrire".

L'enregistrement du flux prend quelques minutes.

Préparer un extrait vidéo

  1. Vous pouvez copier un extrait 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 .

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: 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.
  • 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
export LOCAL_FILE=street_vehicles_people.mp4
  1. 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 une tâche 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 &

L'opération d'ingestion vaictl peut prendre environ 100 secondes avant que la vidéo ne s'affiche 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"

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

4. Créer une fonction Cloud

Nous aurons besoin d'une fonction Cloud Functions pour analyser les données du modèle et générer des événements qui seront ensuite envoyés via le canal d'événements.

Pour en savoir plus sur la fonction Cloud, cliquez ici.

Créer une fonction Cloud qui écoute votre modèle

  1. Accédez à la page de création de l'interface utilisateur de Cloud Functions.
  2. Définissez le nom de la fonction. Nous l'utiliserons plus tard dans les paramètres de gestion des événements pour désigner cette fonction Cloud.
  3. Vérifiez que la région correspond à votre application.
  4. Modifiez les paramètres du déclencheur, puis enregistrez-les.
  5. Cliquez sur le bouton "Suivant" pour accéder à la partie "code". Échec du chargement de l&#39;exemple de création de fonction Cloud
  6. Modifiez votre fonction Cloud. Voici un exemple avec un environnement d'exécution Node.js.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
 // Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
 // For more about logging, please see https://cloud.google.com/functions/docs/monitoring

 // The processor output will be stored in req.body.
 const messageString = constructMessage(req.body);

 // Send your message to operator output with res HTTP response context.
 res.status(200).send(messageString);
};

function constructMessage(data) {
 /**
  * Typically, your processor output should contains appPlatformMetadata & it's designed output.
  * For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
  * to construct the return annotation as such. 
  */

 // access appPlatformMetat.
 const appPlatformMetadata = data.appPlatformMetadata;

 // access annotations.
 const annotations = data.annotations.map(annotation => {
  // This is a mock OccupancyCountingPredictionResult annotation.
  return {"annotation" : {"track_info": {"track_id": "12345"}}};
 });

 const events = [];
 for(const annotation of annotations) {
   events.push({
       "event_message": "Detection event",
       "payload" : {
         "description" : "object detected"
       },
       "event_id" : "track_id_12345"
     });
 }

  /**
   * Typically, your cloud function should return a string represent a JSON which has two fields:
   * "annotations" must follow the specification of the target model.
   * "events" should be of type "AppPlatformEventBody".
   */
 const messageJson = {
   "annotations": annotations,
   "events": events,
 };
 return JSON.stringify(messageJson);
}
  1. Cliquez sur le bouton "Déployer" pour déployer la fonction.

5. Créer un sujet et un abonnement Pub/Sub

Nous devons fournir à l'application un sujet Pub/Sub auquel elle peut envoyer l'événement. Pour recevoir les événements, un abonnement Pub/Sub doit s'abonner à l'optique configurée.

Pour en savoir plus sur les sujets Pub/Sub, cliquez ici. Pour en savoir plus sur les abonnements, cliquez ici.

Créer un sujet Pub/Sub

Pour créer un sujet Pub/Sub, vous pouvez utiliser la gcloud CLI: (Vous devez remplacer SUBSCRIPTION_ID par la valeur réelle de votre configuration.)

gcloud pubsub topics create TOPIC_ID

Vous pouvez également utiliser l'interface utilisateur Pub/Sub.

Créer un abonnement Pub/Sub

Pour créer un abonnement Pub/Sub, vous pouvez utiliser la gcloud CLI: (vous devez remplacer SUBSCRIPTION_ID et TOPIC_ID par la valeur réelle de votre configuration)

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

Vous pouvez également utiliser l'interface utilisateur de Pub/Sub.

6. 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 connecte 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 de 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 la forme d'un graphique.

Créer une application vide

Avant de pouvoir renseigner 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 Ajouter Créer.
  2. Saisissez traffic-app comme nom d'application, puis sélectionnez votre région.
  3. Cliquez sur Créer.

Ajouter des nœuds de composants 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 des données.
  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 dépôt 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 de trafic d'application, sélectionnez Afficher le graphique. La visualisation graphique du pipeline de traitement s'affiche.

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 de nouveaux flux, puis ajoutez un flux de trafic 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 du modèle de calcul du nombre de personnes, sélectionnez l'option Analyse de l'occupation dans la section Modèles spécialisés du menu latéral.
  2. Conservez les sélections par défaut Personnes et Véhicules.
  3. Ajoute des lignes au croisement de lignes. Utilisez l'outil de ligne multipoint pour dessiner les lignes où vous devez détecter les voitures ou les personnes qui partent ou arrivent.
  4. Dessinez les zones actives pour comptabiliser les personnes/véhicules qui s'y trouvent.
  5. Ajoutez des paramètres pour la durée d'inactivité afin de détecter la congestion si une zone active est dessinée.
  • (actuellement, le passage de zone active et le passage de ligne ne sont pas pris en charge simultanément. Utilisez 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 multimédia de Vertex AI Vision dans la section Connecteurs du menu latéral.
  2. Dans le menu Entrepôt multimédia 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.

7. Configurer la gestion des événements

Durée : 02:00

Nous allons connecter le modèle à la fonction Cloud créée précédemment pour le post-traitement. La fonction Cloud peut ainsi ingérer librement la sortie du modèle et générer des événements adaptés à vos besoins. Nous allons ensuite configurer le canal d'événements en configurant le sujet Pub/Sub créé précédemment comme cible. Vous pouvez également définir un intervalle minimal, ce qui vous permettra d'éviter que votre canal d'événements ne soit inondé par le même événement sur une courte période.

Sélectionner une fonction Cloud pour le post-traitement

  1. Cliquez sur le nœud de traitement des données(analyse de l'occupation) du graphique de votre application pour ouvrir le menu latéral.
  2. Sélectionnez votre fonction Cloud (identifiée par son nom) dans la liste déroulante "Post-traitement".
  3. Le graphique de l'application enregistre automatiquement vos modifications.

Échec du chargement de l&#39;exemple de configuration du post-traitement

Configurer le canal d'événements

  1. Cliquez sur le nœud de traitement des données(analyse de l'occupation) du graphique de votre application pour ouvrir le menu latéral.
  2. Cliquez sur "CONFIGURER UNE NOTIFICATION D'ÉVÉNEMENT" dans la section "Notifications d'événement". Échec du chargement de l&#39;exemple de notification d&#39;événement
  3. Sélectionnez votre sujet Pub/Sub dans le menu déroulant.
  4. (facultatif) Définissez l'intervalle/la fréquence minimale pour la publication des événements.

Échec du chargement de l&#39;exemple de boîte de dialogue de notification d&#39;événement

8. 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 traffic-app dans la liste.
  3. Sur la page du générateur de graphiques de l'application, cliquez sur le bouton 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 apparaissent à côté des nœuds. ee78bbf00e5db898.png

9. Vérifier les événements/messages dans l'abonnement Pub/Sub

Une fois que vous avez ingéré des données vidéo dans votre application de traitement, la fonction Cloud Functions doit générer des événements une fois que le modèle d'analyse de l'occupation génère une annotation. Ces événements doivent ensuite être publiés en tant que messages via votre sujet Pub/Sub et reçus par votre abonnement.

Les étapes suivantes supposent que vous disposez d'un abonnement pull.

  1. Ouvrez la liste des abonnements Pub/Sub de votre projet et recherchez l'abonnement correspondant. Accéder à la page de la liste des abonnements Pub/Sub
  2. Accédez à l'onglet "Message".
  3. Cliquez sur le bouton "Pull" (Tirer).
  4. Affichez votre message dans le tableau. Erreur lors du chargement de l&#39;image du message d&#39;abonnement Pub/Sub

Vous pouvez également découvrir comment recevoir des messages sans interface utilisateur. Accéder à la page d'abonnement

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