Utiliser l'API Video Intelligence avec C#

1. Présentation

L'API Google Cloud Video Intelligence permet aux développeurs d'utiliser la technologie d'analyse vidéo de Google dans leurs applications.

Elle vous permet d'effectuer les opérations suivantes:

L'API REST permet aux utilisateurs d'annoter des vidéos stockées localement ou dans Google Cloud Storage avec des informations contextuelles au niveau de la vidéo entière, par segment, par plan et par image.

Dans cet atelier de programmation, vous allez vous concentrer sur l'utilisation de l'API Video Intelligence avec C#. Vous apprendrez à identifier les libellés, les changements de plans et la détection de contenu explicite dans vos vidéos.

Points abordés

  • Utiliser Cloud Shell
  • Activer l'API Video Intelligence
  • Authentifier les requêtes API
  • Installer la bibliothèque cliente Google Cloud pour C#
  • Analyser les étiquettes des vidéos
  • Analyser des vidéos pour détecter les changements de plans
  • Analyser les vidéos pour détecter le contenu explicite

Prérequis

  • Un projet Google Cloud Platform
  • Un navigateur tel que Chrome ou Firefox
  • Bonne connaissance de C#

Enquête

Comment allez-vous utiliser ce tutoriel ?

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

Comment évalueriez-vous votre expérience avec C#?

Débutant Intermédiaire Expert

Quel est votre niveau d'expérience avec les services Google Cloud Platform ?

<ph type="x-smartling-placeholder"></ph> Débutant Intermédiaire Expert
.

2. Préparation

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.

Démarrer Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Activer Cloud Shell

  1. Dans Cloud Console, cliquez sur Activer Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

Si vous démarrez Cloud Shell pour la première fois, un écran intermédiaire vous explique de quoi il s'agit. Si un écran intermédiaire s'est affiché, cliquez sur Continuer.

d95252b003979716.png

Le provisionnement et la connexion à Cloud Shell ne devraient pas prendre plus de quelques minutes.

7833d5e1c5d18f54.png

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute dans Google Cloud, ce qui améliore considérablement les performances du réseau et l'authentification. Une grande partie, voire la totalité, de votre travail dans cet atelier de programmation peut être effectué dans un navigateur.

Une fois connecté à Cloud Shell, vous êtes authentifié et le projet est défini sur votre ID de projet.

  1. Exécutez la commande suivante dans Cloud Shell pour vérifier que vous êtes authentifié :
gcloud auth list

Résultat de la commande

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet:
gcloud config list project

Résultat de la commande

[core]
project = <PROJECT_ID>

Si vous obtenez un résultat différent, exécutez cette commande :

gcloud config set project <PROJECT_ID>

Résultat de la commande

Updated property [core/project].

3. Activer l'API Video Intelligence

Avant de pouvoir utiliser l'API Video Intelligence, vous devez l'activer. Vous pouvez activer l'API à l'aide de la commande suivante dans Cloud Shell:

gcloud services enable videointelligence.googleapis.com

4. Installer la bibliothèque cliente de l'API Google Cloud Video Intelligence pour C#

Commencez par créer une application de console C# simple que vous utiliserez pour exécuter des exemples de l'API Video Intelligence:

dotnet new console -n VideoIntApiDemo

L'application créée et les dépendances doivent être résolues:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

Accédez ensuite au dossier VideoIntApiDemo:

cd VideoIntApiDemo/

Ajoutez le package NuGet Google.Cloud.VideoIntelligence.V1 au projet:

dotnet add package Google.Cloud.VideoIntelligence.V1
info : Adding PackageReference for package 'Google.Cloud.VideoIntelligence.V1' into project '/home/atameldev/VideoIntApiDemo/VideoIntApiDemo.csproj'.
log  : Restoring packages for /home/atameldev/VideoIntApiDemo/VideoIntApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.VideoIntelligence.V1' version '1.0.0' added to file '/home/atameldev/VideoIntApiDemo/VideoIntApiDemo.csproj'.

Vous êtes maintenant prêt à utiliser l'API Video Intelligence.

5. Détection de thèmes

L'analyse des étiquettes détecte les étiquettes d'une vidéo, qui sont stockées en local ou dans Google Cloud Storage. Dans cette section, vous allez analyser une vidéo à la recherche d'étiquettes stockées dans Google Cloud Storage.

Commencez par ouvrir l'éditeur de code en haut à droite de Cloud Shell:

fd3fc1303e63572.png

Accédez au fichier Program.cs dans le dossier VideoIntApiDemo et remplacez le code par ce qui suit:

using System;
using System.Collections.Generic;
using Google.Cloud.VideoIntelligence.V1;

namespace VideoIntApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = VideoIntelligenceServiceClient.Create();
            var request = new AnnotateVideoRequest
            {
                InputUri = "gs://cloud-samples-data/video/gbikes_dinosaur.mp4",
                Features = { Feature.LabelDetection }
            };
            var op = client.AnnotateVideo(request).PollUntilCompleted();
            foreach (var result in op.Result.AnnotationResults)
            {
                PrintLabels("Video", result.SegmentLabelAnnotations);
                PrintLabels("Shot", result.ShotLabelAnnotations);
                PrintLabels("Frame", result.FrameLabelAnnotations);
            }
        }

        static void PrintLabels(string labelName,
            IEnumerable<LabelAnnotation> labelAnnotations)
        {
            foreach (var annotation in labelAnnotations)
            {
                Console.WriteLine($"{labelName} label: {annotation.Entity.Description}");
                foreach (var entity in annotation.CategoryEntities)
                {
                    Console.WriteLine($"{labelName} label category: {entity.Description}");
                }
                foreach (var segment in annotation.Segments)
                {
                    Console.Write("Segment location: ");
                    Console.Write(segment.Segment.StartTimeOffset);
                    Console.Write(":");
                    Console.WriteLine(segment.Segment.EndTimeOffset);
                    Console.WriteLine($"Confidence: {segment.Confidence}");
                }
            }
        }
    }
}

Prenez une minute ou deux pour étudier le code et voir comment la vidéo est étiquetée*.*

Retournez dans Cloud Shell, puis exécutez l'application:

dotnet run

L'extraction des étiquettes par l'API Video Intelligence prend plusieurs secondes, mais vous devriez obtenir le résultat suivant:

Video label: bicycle
Video label category: vehicle
Segment location: "0s":"42.766666s"
Confidence: 0.475821
Video label: tyrannosaurus
Video label category: dinosaur
Segment location: "0s":"42.766666s"
Confidence: 0.4222222
Video label: tree
Video label category: plant
Segment location: "0s":"42.766666s"
Confidence: 0.4231415
...

Résumé

Au cours de cette étape, vous avez pu répertorier toutes les étiquettes d'une vidéo à l'aide de l'API Video Intelligence. Pour en savoir plus, consultez la page Détection de thèmes.

6. Détection de changements de plan

Vous pouvez utiliser l'API Video Intelligence pour détecter les changements de plans dans une vidéo stockée en local ou dans Google Cloud Storage. Dans cette section, vous allez effectuer une analyse vidéo des changements de plans dans un fichier situé dans Google Cloud Storage.

Pour détecter les changements de plans, accédez au fichier Program.cs dans le dossier VideoIntApiDemo et remplacez le code par ce qui suit:

using System;
using Google.Cloud.VideoIntelligence.V1;

namespace VideoIntApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = VideoIntelligenceServiceClient.Create();
            var request = new AnnotateVideoRequest
            {
                InputUri = "gs://cloud-samples-data/video/gbikes_dinosaur.mp4",
                Features = { Feature.ShotChangeDetection }
            };
            var op = client.AnnotateVideo(request).PollUntilCompleted();
            foreach (var result in op.Result.AnnotationResults)
            {
                foreach (var annotation in result.ShotAnnotations)
                {
                    Console.Out.WriteLine("Start Time Offset: {0}\tEnd Time Offset: {1}",
                        annotation.StartTimeOffset, annotation.EndTimeOffset);
                }
            }
        }
    }
}

Prenez une minute ou deux pour étudier le code et voir comment la détection de plans est effectuée.

Retournez dans Cloud Shell, puis exécutez l'application. Vous devriez obtenir le résultat suivant:

dotnet run

Vous devriez obtenir le résultat suivant :

Start Time Offset: "0s" End Time Offset: "5.166666s"
Start Time Offset: "5.233333s"  End Time Offset: "10.066666s"
Start Time Offset: "10.100s"    End Time Offset: "28.133333s"
Start Time Offset: "28.166666s" End Time Offset: "42.766666s"

Résumé

Au cours de cette étape, vous avez pu utiliser l'API Video Intelligence pour détecter les changements de plans dans un fichier stocké dans Google Cloud Storage. En savoir plus sur les changements de plans

7. Détection de contenu explicite

La détection de contenu explicite détecte le contenu réservé aux adultes dans une vidéo. Le contenu réservé aux adultes désigne un contenu généralement adapté aux personnes de 18 ans et plus. Cela inclut, mais sans s'y limiter, la nudité, les activités sexuelles et la pornographie (y compris dans les dessins animés). La réponse inclut une valeur de probabilité divisée en bins, de VERY_UNLIKELY à VERY_LIKELY.

Lorsque la fonctionnalité de détection de contenu explicite évalue une vidéo, elle le fait sur la base des prises de vue et ne prend en compte que le contenu visuel. La composante audio de la vidéo n'est pas utilisée pour évaluer le niveau de contenu explicite.

Pour détecter le contenu explicite, accédez au fichier Program.cs dans le dossier VideoIntApiDemo et remplacez le code par ce qui suit:

using System;
using Google.Cloud.VideoIntelligence.V1;

namespace VideoIntApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = VideoIntelligenceServiceClient.Create();
            var request = new AnnotateVideoRequest
            {
                InputUri = "gs://cloud-samples-data/video/gbikes_dinosaur.mp4",
                Features = { Feature.ExplicitContentDetection }
            };
            var op = client.AnnotateVideo(request).PollUntilCompleted();
            foreach (var result in op.Result.AnnotationResults)
            {
                foreach (var frame in result.ExplicitAnnotation.Frames)
                {
                    Console.WriteLine("Time Offset: {0}", frame.TimeOffset);
                    Console.WriteLine("Pornography Likelihood: {0}", frame.PornographyLikelihood);
                    Console.WriteLine();
                }
            }
        }
    }
}

Prenez une minute ou deux pour étudier le code et voir comment la détection de contenu explicite a été effectuée*.*

Retournez dans Cloud Shell, puis exécutez l'application:

dotnet run

Cette opération peut prendre plusieurs secondes, mais vous devriez obtenir le résultat suivant:

dotnet run

Time Offset: "0.056149s"
Pornography Likelihood: VeryUnlikely

Time Offset: "1.166841s"
Pornography Likelihood: VeryUnlikely
...
Time Offset: "41.678209s"
Pornography Likelihood: VeryUnlikely

Time Offset: "42.596413s"
Pornography Likelihood: VeryUnlikely

Résumé

Au cours de cette étape, vous avez pu détecter le contenu explicite d'une vidéo à l'aide de l'API Video Intelligence. En savoir plus sur la détection de contenu explicite

8. Félicitations !

Vous avez appris à utiliser l'API Video Intelligence avec C#.

Effectuer un nettoyage

Afin d'éviter que des frais ne soient facturés sur votre compte Google Cloud Platform pour les ressources utilisées dans ce démarrage rapide, procédez comme suit :

  • Accédez à la console Cloud Platform.
  • Sélectionnez le projet que vous souhaitez arrêter, puis cliquez sur "Supprimer". en haut: la suppression du projet est programmée.

En savoir plus

Licence

Ce document est publié sous une licence Creative Commons Attribution 2.0 Generic.