Como usar a API Video Intelligence com C#

1. Visão geral

Com a API Google Cloud Video Intelligence, os desenvolvedores podem usar a tecnologia de análise de vídeo do Google como parte dos aplicativos deles.

Ele pode ser usado para fazer o seguinte:

Com a API REST, os usuários podem fazer anotações em vídeos armazenados localmente ou no Google Cloud Storage com informações contextuais no nível de vídeo inteiro, por segmento, por imagem e por quadro.

Neste codelab, você se concentrará no uso da API Video Intelligence com C#. Você aprenderá a analisar vídeos quanto a rótulos, alterações de imagem e detecção de conteúdo explícito.

O que você vai aprender

  • Como usar o Cloud Shell
  • Como ativar a API Video Intelligence
  • Como autenticar solicitações de API
  • Como instalar a biblioteca de cliente do Google Cloud para C#
  • Como analisar vídeos em busca de rótulos
  • Como analisar se há alterações na imagem nos vídeos
  • Como analisar vídeos para detectar conteúdo explícito

O que é necessário

  • Um projeto do Google Cloud Platform
  • Um navegador, como o Chrome ou o Firefox
  • Familiaridade com C#

Pesquisa

Como você vai usar este tutorial?

Apenas leitura Leitura e exercícios

Como você classificaria sua experiência com C#?

Iniciante Intermediário Proficiente

Como você classificaria sua experiência com o uso dos serviços do Google Cloud Platform?

Iniciante Intermediário Proficiente

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto.
  • Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Inicie o Cloud Shell

Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

Ativar o Cloud Shell

  1. No Console do Cloud, clique em Ativar o Cloud Shelld1264ca30785e435.png.

cb81e7c8e34bc8d.png

Se você estiver iniciando o Cloud Shell pela primeira vez, verá uma tela intermediária com a descrição dele. Se aparecer uma tela intermediária, clique em Continuar.

d95252b003979716.png

Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.

7833d5e1c5d18f54.png

Essa máquina virtual tem todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Grande parte do trabalho neste codelab, se não todo, pode ser feito em um navegador.

Depois de se conectar ao Cloud Shell, você verá sua autenticação e o projeto estará configurado com o ID do seu projeto.

  1. Execute o seguinte comando no Cloud Shell para confirmar se a conta está autenticada:
gcloud auth list

Resposta ao comando

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Execute o seguinte comando no Cloud Shell para confirmar que o comando gcloud sabe sobre seu projeto:
gcloud config list project

Resposta ao comando

[core]
project = <PROJECT_ID>

Se o projeto não estiver configurado, configure-o usando este comando:

gcloud config set project <PROJECT_ID>

Resposta ao comando

Updated property [core/project].

3. ative a API Video Intelligence

Antes de começar a usar a API Video Intelligence, você precisa ativá-la. É possível ativar a API usando o seguinte comando no Cloud Shell:

gcloud services enable videointelligence.googleapis.com

4. Instalar a biblioteca de cliente da API Google Cloud Video Intelligence para C#

Primeiro, crie um aplicativo simples de console em C# para executar exemplos da API Video Intelligence:

dotnet new console -n VideoIntApiDemo

Você verá o aplicativo criado e as dependências resolvidas:

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

Em seguida, navegue até a pasta VideoIntApiDemo:

cd VideoIntApiDemo/

Adicione o pacote NuGet Google.Cloud.VideoIntelligence.V1 ao projeto:

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

Agora você já pode usar a API Video Intelligence.

5. Detecção de rótulos

A análise detecta rótulos em um vídeo armazenados localmente ou no Google Cloud Storage. Nesta seção, você vai analisar um vídeo sobre rótulos armazenados no Google Cloud Storage.

Primeiro, abra o editor de código no canto superior direito do Cloud Shell:

fd3fc1303e63572.png

Navegue até o arquivo Program.cs dentro da pasta VideoIntApiDemo e substitua o código pelo seguinte:

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

Reserve alguns minutos para estudar o código e ver como o vídeo está sendo identificado*.*

No Cloud Shell, execute o app:

dotnet run

A API Video Intelligence leva vários segundos para extrair rótulos, mas, em algum momento, você verá a seguinte saída:

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

Resumo

Nesta etapa, você conseguiu listar todos os rótulos em um vídeo usando a API Video Intelligence. Saiba mais na página Detecção de marcadores.

6. Detecção de alterações na imagem

É possível usar a API Video Intelligence para detectar alterações na imagem de um vídeo armazenado localmente ou no Google Cloud Storage. Nesta seção, você vai realizar uma análise de vídeo para alterações de imagem em um arquivo localizado no Google Cloud Storage.

Para detectar mudanças na imagem, navegue até o arquivo Program.cs dentro da pasta VideoIntApiDemo e substitua o código pelo seguinte:

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

Reserve alguns minutos para estudar o código e ver como a detecção de fotos é realizada.

Volte ao Cloud Shell e execute o app. A saída a seguir será exibida:

dotnet run

Você verá esta resposta:

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"

Resumo

Nesta etapa, você usou a API Video Intelligence para detectar alterações na imagem em um arquivo armazenado no Google Cloud Storage. Leia mais sobre alterações na imagem.

7. Detecção de conteúdo explícito

A detecção de conteúdo explícito identifica conteúdo adulto no vídeo. Esse conteúdo é inadequado para maiores de 18 anos, incluindo, entre outros, nudez, atividades sexuais e pornografia (inclusive anime ou desenhos animados). A resposta inclui um valor de probabilidade dividido em classes, de VERY_UNLIKELY a VERY_LIKELY.

Quando um vídeo é avaliado pela detecção de conteúdo explícito, isso é feito por frame e considera apenas o conteúdo visual. O componente de áudio do vídeo não é usado para avaliar o nível de conteúdo explícito.

Para detectar conteúdo explícito, navegue até o arquivo Program.cs na pasta VideoIntApiDemo e substitua o código pelo seguinte:

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

Reserve alguns minutos para estudar o código e ver como a detecção de conteúdo explícito era realizada*.*

No Cloud Shell, execute o app:

dotnet run

Isso pode levar alguns segundos, mas, em algum momento, a seguinte resposta vai aparecer:

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

Resumo

Nesta etapa, você conseguiu realizar a detecção de conteúdo explícito em um vídeo usando a API Video Intelligence. Leia mais sobre a detecção de conteúdo explícito.

8. Parabéns!

Você aprendeu a usar a API Video Intelligence com C#.

Limpar

Para evitar a cobrança na sua conta do Google Cloud Platform pelo uso de recursos neste guia de início rápido, siga estas etapas:

  • Acesse o console do Cloud Platform.
  • Selecione o projeto que você quer encerrar e clique em "Excluir". Na parte superior: isso programa a exclusão do projeto.

Saiba mais

Licença

Este conteúdo está sob a licença Atribuição 2.0 Genérica da Creative Commons.