Utilizzo dell'API Video Intelligence con C#

1. Panoramica

L'API Google Cloud Video Intelligence consente agli sviluppatori di utilizzare la tecnologia di analisi video di Google nelle loro applicazioni.

Può essere utilizzato per:

L'API REST consente agli utenti di annotare i video archiviati localmente o in Google Cloud Storage con informazioni contestuali a livello di video intero, per segmento, per inquadratura e per fotogramma.

In questo codelab, ti concentrerai sull'utilizzo dell'API Video Intelligence con C#. Imparerai ad analizzare i video per rilevare etichette, cambi di inquadratura e contenuti espliciti.

Cosa imparerai a fare

  • Come utilizzare Cloud Shell
  • Come abilitare l'API Video Intelligence
  • Come autenticare le richieste API
  • Come installare la libreria client Google Cloud per C#
  • Come analizzare i video per le etichette
  • Come analizzare i video per i cambi di inquadratura
  • Come analizzare i video per il rilevamento di contenuti espliciti

Che cosa ti serve

  • Un progetto Google Cloud
  • Un browser, ad esempio Chrome o Firefox
  • Familiarità con C#

Sondaggio

Come utilizzerai questo tutorial?

Leggilo e basta Leggilo e completa gli esercizi

Come valuteresti la tua esperienza con C#?

Principiante Intermedio Avanzato

Come valuti la tua esperienza di utilizzo dei servizi Google Cloud Platform?

Principiante Intermedio Avanzato

2. Configurazione e requisiti

Configurazione dell'ambiente autonomo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
  • L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come PROJECT_ID). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto.
  • Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. Completare questo codelab non costa molto, se non nulla. Per arrestare le risorse ed evitare addebiti oltre a quelli previsti in questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.

Avvia Cloud Shell

Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Attiva Cloud Shell

  1. Nella console Cloud, fai clic su Attiva Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

Se è la prima volta che avvii Cloud Shell, viene visualizzata una schermata intermedia che ne descrive le funzionalità. Se è stata visualizzata una schermata intermedia, fai clic su Continua.

d95252b003979716.png

Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.

7833d5e1c5d18f54.png

Questa macchina virtuale è caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Gran parte del lavoro per questo codelab, se non tutto, può essere svolto con un browser.

Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è autenticato e il progetto è impostato sul tuo ID progetto.

  1. Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list

Output comando

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Esegui questo comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto:
gcloud config list project

Output comando

[core]
project = <PROJECT_ID>

In caso contrario, puoi impostarlo con questo comando:

gcloud config set project <PROJECT_ID>

Output comando

Updated property [core/project].

3. abilita l'API Video Intelligence

Prima di poter iniziare a utilizzare l'API Video Intelligence, devi abilitarla. Puoi abilitare l'API utilizzando il seguente comando in Cloud Shell:

gcloud services enable videointelligence.googleapis.com

4. Installa la libreria client dell'API Google Cloud Video Intelligence per C#

Innanzitutto, crea una semplice applicazione console C# che utilizzerai per eseguire gli esempi dell'API Video Intelligence:

dotnet new console -n VideoIntApiDemo

Dovresti vedere l'applicazione creata e le dipendenze risolte:

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

A questo punto, vai alla cartella VideoIntApiDemo:

cd VideoIntApiDemo/

e aggiungi il pacchetto NuGet Google.Cloud.VideoIntelligence.V1 al progetto:

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

Ora puoi utilizzare l'API Video Intelligence.

5. Rilevamento etichette

L'analisi delle etichette rileva le etichette in un video archiviato localmente o in Google Cloud Storage. In questa sezione analizzerai un video per le etichette archiviate in Google Cloud Storage.

Innanzitutto, apri l'editor di codice dalla parte in alto a destra di Cloud Shell:

fd3fc1303e63572.png

Vai al file Program.cs all'interno della cartella VideoIntApiDemo e sostituisci il codice con il seguente:

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}");
                }
            }
        }
    }
}

Dedica un minuto o due allo studio del codice per capire come viene etichettato il video.*

Torna a Cloud Shell ed esegui l'app:

dotnet run

L'API Video Intelligence impiega alcuni secondi per estrarre le etichette, ma alla fine dovresti visualizzare il seguente output:

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

Riepilogo

In questo passaggio, hai potuto elencare tutte le etichette di un video utilizzando l'API Video Intelligence. Per saperne di più, consulta la pagina Rilevamento delle etichette.

6. Rilevamento cambio di inquadratura

Puoi utilizzare l'API Video Intelligence per rilevare i cambi di inquadratura in un video archiviato localmente o in Google Cloud Storage. In questa sezione, eseguirai l'analisi video per i cambi di inquadratura su un file che si trova in Google Cloud Storage.

Per rilevare i cambi di inquadratura, vai al file Program.cs all'interno della cartella VideoIntApiDemo e sostituisci il codice con il seguente:

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);
                }
            }
        }
    }
}

Prenditi un minuto o due per studiare il codice e vedere come viene eseguita la rilevazione dei tiri.

Torna in Cloud Shell ed esegui l'app. Dovresti vedere il seguente output:

dotnet run

Dovresti vedere l'output seguente:

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"

Riepilogo

In questo passaggio, hai potuto utilizzare l'API Video Intelligence per rilevare i cambi di inquadratura in un file archiviato in Google Cloud Storage. Scopri di più sui cambi di inquadratura.

7. Rilevamento di contenuti espliciti

Il rilevamento di contenuti espliciti rileva i contenuti per adulti all'interno di un video. I contenuti per adulti sono generalmente adatti a persone di età pari o superiore a 18 anni, inclusi, a titolo esemplificativo, nudità, attività sessuali e pornografia (inclusi cartoni animati o anime). La risposta include un valore di probabilità suddiviso in bucket, da VERY_UNLIKELY a VERY_LIKELY.

Quando il rilevamento di contenuti espliciti valuta un video, lo fa in base ai singoli fotogrammi e prende in considerazione solo i contenuti visivi. La componente audio del video non viene utilizzata per valutare il livello di contenuti espliciti.

Per rilevare contenuti espliciti, vai al file Program.cs all'interno della cartella VideoIntApiDemo e sostituisci il codice con il seguente:

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();
                }
            }
        }
    }
}

Prenditi un minuto o due per studiare il codice e vedere come è stata eseguita la rilevazione dei contenuti espliciti*.*

Torna a Cloud Shell ed esegui l'app:

dotnet run

Potrebbero essere necessari diversi secondi, ma alla fine dovresti visualizzare l'output seguente:

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

Riepilogo

In questo passaggio, hai potuto eseguire il rilevamento di contenuti espliciti in un video utilizzando l'API Video Intelligence. Scopri di più sul rilevamento di contenuti espliciti.

8. Complimenti!

Hai imparato a utilizzare l'API Video Intelligence utilizzando C#.

Esegui la pulizia

Per evitare che al tuo account Google Cloud Platform vengano addebitate le risorse utilizzate in questa guida rapida, procedi come segue.

  • Vai alla console Cloud Platform.
  • Seleziona il progetto che vuoi chiudere, quindi fai clic su "Elimina" in alto: il progetto verrà pianificato per l'eliminazione.

Scopri di più

Licenza

Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.