Usa la API de Video Intelligence con C#

1. Descripción general

La API de Google Cloud Video Intelligence permite que los desarrolladores usen la tecnología de análisis de videos de Google como parte de sus aplicaciones.

Se puede usar para hacer lo siguiente:

La API de REST permite a los usuarios anotar videos almacenados de forma local o en Google Cloud Storage con información contextual a nivel de todo el video, por segmento, por toma y por fotograma.

En este codelab, te enfocarás en el uso de la API de Video Intelligence con C#. Aprenderás a analizar los videos en busca de etiquetas, cambios de toma y detección de contenido explícito.

Qué aprenderás

  • Cómo usar Cloud Shell
  • Cómo habilitar la API de Video Intelligence
  • Cómo autenticar solicitudes a la API
  • Cómo instalar la biblioteca cliente de Google Cloud para C#
  • Cómo analizar videos en busca de etiquetas
  • Cómo analizar videos para detectar cambios de toma
  • Cómo analizar los videos para detectar contenido explícito

Requisitos

  • Un proyecto de Google Cloud Platform
  • Un navegador como Chrome o Firefox
  • Conocimientos de C#

Encuesta

¿Cómo usarás este instructivo?

Ler Leer y completar los ejercicios

¿Cómo calificarías tu experiencia con C#?

Principiante Intermedio Avanzado

¿Cómo calificarías tu experiencia en el uso de los servicios de Google Cloud Platform?

Principiante Intermedio Avanzado .
.

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como PROJECT_ID). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto.
  • Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.

Inicia Cloud Shell

Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Activar Cloud Shell

  1. En la consola de Cloud, haz clic en Activar Cloud Shelld1264ca30785e435.png.

cb81e7c8e34bc8d.png

Si es la primera vez que inicias Cloud Shell, verás una pantalla intermedia que describe en qué consiste. Si apareció una pantalla intermedia, haz clic en Continuar.

d95252b003979716.png

El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.

7833d5e1c5d18f54.png

Esta máquina virtual está cargada con todas las herramientas de desarrollo necesarias. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que mejora considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer con un navegador.

Una vez que te conectes a Cloud Shell, deberías ver que estás autenticado y que el proyecto está configurado con tu ID del proyecto.

  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que tienes la autenticación:
gcloud auth list

Resultado del comando

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Ejecuta el siguiente comando en Cloud Shell para confirmar que el comando de gcloud conoce tu proyecto:
gcloud config list project

Resultado del comando

[core]
project = <PROJECT_ID>

De lo contrario, puedes configurarlo con el siguiente comando:

gcloud config set project <PROJECT_ID>

Resultado del comando

Updated property [core/project].

3. Habilita la API de Video Intelligence

Antes de comenzar a usar la API de Video Intelligence, debes habilitarla. Puedes habilitar la API con el siguiente comando en Cloud Shell:

gcloud services enable videointelligence.googleapis.com

4. Instala la biblioteca cliente de la API de Google Cloud Video Intelligence para C#

Primero, crea una aplicación de consola de C# simple que utilizarás para ejecutar muestras de la API de Video Intelligence:

dotnet new console -n VideoIntApiDemo

Deberías ver que se creó la aplicación y que se resolvieron las dependencias:

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

Luego, navega a la carpeta VideoIntApiDemo:

cd VideoIntApiDemo/

Además, agrega el paquete NuGet Google.Cloud.VideoIntelligence.V1 al proyecto:

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

Ahora, tienes todo listo para usar la API de Video Intelligence.

5. Detección de etiquetas

El análisis de etiquetas detecta etiquetas en un video almacenado de forma local o en Google Cloud Storage. En esta sección, analizarás un video en busca de etiquetas almacenadas en Google Cloud Storage.

Primero, abre el editor de código desde la parte superior derecha de Cloud Shell:

fd3fc1303e63572.png

Navega al archivo Program.cs dentro de la carpeta VideoIntApiDemo y reemplaza el código por lo siguiente:

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

Tómate unos minutos para estudiar el código y ver cómo se etiqueta el video.**

En Cloud Shell, ejecuta la app:

dotnet run

La API de Video Intelligence demora varios segundos en extraer etiquetas, pero, con el tiempo, deberías ver el siguiente resultado:

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

Resumen

En este paso, pudiste enumerar todas las etiquetas de un video con la API de Video Intelligence. Puedes obtener más información en la página Detección de etiquetas.

6. Detección de cambio de toma

Puedes usar la API de Video Intelligence para detectar cambios en las tomas en un video almacenado localmente o en Google Cloud Storage. En esta sección, realizarás un análisis de video para detectar cambios en un archivo ubicado en Google Cloud Storage.

Para detectar cambios de toma, navega al archivo Program.cs dentro de la carpeta VideoIntApiDemo y reemplaza el código por lo siguiente:

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

Tómate uno o dos minutos para estudiar el código y ver cómo se realiza la detección de tomas.

En Cloud Shell, ejecuta la app. Deberías ver el siguiente resultado:

dotnet run

Deberías ver el siguiente resultado:

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"

Resumen

En este paso, pudiste usar la API de Video Intelligence para detectar cambios de tomas en un archivo almacenado en Google Cloud Storage. Obtén más información sobre los cambios de plano.

7. Detección de contenido explícito

La detección de contenido explícito detecta contenido para adultos en un video. El contenido para adultos es aquel que por lo general es apropiado para mayores de 18 años, incluidas, sin limitaciones, imágenes de desnudos, actividades sexuales y pornografía (incluidos dibujos animados o anime). La respuesta incluye un valor de probabilidad agrupado en buckets, de VERY_UNLIKELY a VERY_LIKELY.

Cuando la detección de contenido explícito evalúa un video, lo hace por fotograma y considera solo el contenido visual. El componente de audio del video no se usa para evaluar el nivel de contenido explícito.

Para detectar contenido explícito, navega al archivo Program.cs dentro de la carpeta VideoIntApiDemo y reemplaza el código por lo siguiente:

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

Tómate uno o dos minutos para estudiar el código y ver cómo se realizó la detección de contenido explícito.**

En Cloud Shell, ejecuta la app:

dotnet run

Es posible que demore varios segundos, pero, con el tiempo, deberías ver el siguiente resultado:

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

Resumen

En este paso, pudiste realizar una detección de contenido explícito en un video con la API de Video Intelligence. Obtén más información sobre la detección de contenido explícito.

8. ¡Felicitaciones!

Aprendiste a usar la API de Video Intelligence con C#.

Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos de esta guía de inicio rápido:

  • Ve a la consola de Google Cloud.
  • Selecciona el proyecto que deseas cerrar y haz clic en “Borrar”. en la parte superior: esta opción programa la eliminación del proyecto.

Más información

Licencia

Este trabajo cuenta con una licencia Atribución 2.0 Genérica de Creative Commons.