Anotar um vídeo usando bibliotecas de cliente

Este guia de início rápido apresenta a API Video Intelligence. Neste guia de início rápido, configure seu projeto e autorização do Google Cloud e, em seguida, faça uma solicitação para que o Video Intelligence anote um vídeo.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Video Intelligence API.

    Enable the API

  5. Install the Google Cloud CLI.

  6. Se você estiver usando um provedor de identidade externo (IdP), primeiro faça login na CLI gcloud com sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Video Intelligence API.

    Enable the API

  11. Install the Google Cloud CLI.

  12. Se você estiver usando um provedor de identidade externo (IdP), primeiro faça login na CLI gcloud com sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  14. Instale a biblioteca de cliente

    Go

    go get cloud.google.com/go/videointelligence/apiv1

    Java

    Node.js

    Antes de instalar a biblioteca, verifique se você preparou seu ambiente para o desenvolvimento do Node.js.

    npm install @google-cloud/video-intelligence

    Python

    Antes de instalar a biblioteca, verifique se você preparou seu ambiente para o desenvolvimento do Python.

    pip install --upgrade google-cloud-videointelligence

    Outras linguagens

    C#: Siga as Instruções de configuração do C# na página das bibliotecas de cliente e acesse a Documentação de referência do Video Intelligence para .NET.

    PHP: Siga as Instruções de configuração do PHP na página das bibliotecas de cliente e acesse a Documentação de referência do Video Intelligence para PHP.

    Ruby: Siga as Instruções de configuração do Ruby na página das bibliotecas de cliente e acesse a Documentação de referência do Video Intelligence para Ruby.

    Configurar a autenticação

    1. Instale a CLI do Google Cloud. Após a instalação, inicialize a Google Cloud CLI executando o seguinte comando:

      gcloud init

      Se você estiver usando um provedor de identidade externo (IdP), primeiro faça login na CLI gcloud com sua identidade federada.

    2. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

      Uma tela de login será exibida. Após o login, suas credenciais são armazenadas no arquivo de credenciais local usado pelo ADC.

    Detecção de rótulos

    Agora é possível usar a API Video Intelligence para solicitar informações de um vídeo ou de um trecho dele como a detecção de rótulos. Execute o código a seguir para realizar a primeira solicitação de detecção de rótulos no vídeo:

    Go

    
    // Sample video_quickstart uses the Google Cloud Video Intelligence API to label a video.
    package main
    
    import (
    	"context"
    	"fmt"
    	"log"
    
    	"github.com/golang/protobuf/ptypes"
    
    	video "cloud.google.com/go/videointelligence/apiv1"
    	videopb "cloud.google.com/go/videointelligence/apiv1/videointelligencepb"
    )
    
    func main() {
    	ctx := context.Background()
    
    	// Creates a client.
    	client, err := video.NewClient(ctx)
    	if err != nil {
    		log.Fatalf("Failed to create client: %v", err)
    	}
    	defer client.Close()
    
    	op, err := client.AnnotateVideo(ctx, &videopb.AnnotateVideoRequest{
    		InputUri: "gs://cloud-samples-data/video/cat.mp4",
    		Features: []videopb.Feature{
    			videopb.Feature_LABEL_DETECTION,
    		},
    	})
    	if err != nil {
    		log.Fatalf("Failed to start annotation job: %v", err)
    	}
    
    	resp, err := op.Wait(ctx)
    	if err != nil {
    		log.Fatalf("Failed to annotate: %v", err)
    	}
    
    	// Only one video was processed, so get the first result.
    	result := resp.GetAnnotationResults()[0]
    
    	for _, annotation := range result.SegmentLabelAnnotations {
    		fmt.Printf("Description: %s\n", annotation.Entity.Description)
    
    		for _, category := range annotation.CategoryEntities {
    			fmt.Printf("\tCategory: %s\n", category.Description)
    		}
    
    		for _, segment := range annotation.Segments {
    			start, _ := ptypes.Duration(segment.Segment.StartTimeOffset)
    			end, _ := ptypes.Duration(segment.Segment.EndTimeOffset)
    			fmt.Printf("\tSegment: %s to %s\n", start, end)
    			fmt.Printf("\tConfidence: %v\n", segment.Confidence)
    		}
    	}
    }
    

    Java

    
    import com.google.api.gax.longrunning.OperationFuture;
    import com.google.cloud.videointelligence.v1.AnnotateVideoProgress;
    import com.google.cloud.videointelligence.v1.AnnotateVideoRequest;
    import com.google.cloud.videointelligence.v1.AnnotateVideoResponse;
    import com.google.cloud.videointelligence.v1.Entity;
    import com.google.cloud.videointelligence.v1.Feature;
    import com.google.cloud.videointelligence.v1.LabelAnnotation;
    import com.google.cloud.videointelligence.v1.LabelSegment;
    import com.google.cloud.videointelligence.v1.VideoAnnotationResults;
    import com.google.cloud.videointelligence.v1.VideoIntelligenceServiceClient;
    import java.util.List;
    
    public class QuickstartSample {
    
      /** Demonstrates using the video intelligence client to detect labels in a video file. */
      public static void main(String[] args) throws Exception {
        // Instantiate a video intelligence client
        try (VideoIntelligenceServiceClient client = VideoIntelligenceServiceClient.create()) {
          // The Google Cloud Storage path to the video to annotate.
          String gcsUri = "gs://cloud-samples-data/video/cat.mp4";
    
          // Create an operation that will contain the response when the operation completes.
          AnnotateVideoRequest request =
              AnnotateVideoRequest.newBuilder()
                  .setInputUri(gcsUri)
                  .addFeatures(Feature.LABEL_DETECTION)
                  .build();
    
          OperationFuture<AnnotateVideoResponse, AnnotateVideoProgress> response =
              client.annotateVideoAsync(request);
    
          System.out.println("Waiting for operation to complete...");
    
          List<VideoAnnotationResults> results = response.get().getAnnotationResultsList();
          if (results.isEmpty()) {
            System.out.println("No labels detected in " + gcsUri);
            return;
          }
          for (VideoAnnotationResults result : results) {
            System.out.println("Labels:");
            // get video segment label annotations
            for (LabelAnnotation annotation : result.getSegmentLabelAnnotationsList()) {
              System.out.println(
                  "Video label description : " + annotation.getEntity().getDescription());
              // categories
              for (Entity categoryEntity : annotation.getCategoryEntitiesList()) {
                System.out.println("Label Category description : " + categoryEntity.getDescription());
              }
              // segments
              for (LabelSegment segment : annotation.getSegmentsList()) {
                double startTime =
                    segment.getSegment().getStartTimeOffset().getSeconds()
                        + segment.getSegment().getStartTimeOffset().getNanos() / 1e9;
                double endTime =
                    segment.getSegment().getEndTimeOffset().getSeconds()
                        + segment.getSegment().getEndTimeOffset().getNanos() / 1e9;
                System.out.printf("Segment location : %.3f:%.3f\n", startTime, endTime);
                System.out.println("Confidence : " + segment.getConfidence());
              }
            }
          }
        }
      }
    }

    Node.js

    Antes de executar o exemplo, verifique se você preparou o ambiente para o desenvolvimento em Node.js.

    // Imports the Google Cloud Video Intelligence library
    const videoIntelligence = require('@google-cloud/video-intelligence');
    
    // Creates a client
    const client = new videoIntelligence.VideoIntelligenceServiceClient();
    
    // The GCS uri of the video to analyze
    const gcsUri = 'gs://cloud-samples-data/video/cat.mp4';
    
    // Construct request
    const request = {
      inputUri: gcsUri,
      features: ['LABEL_DETECTION'],
    };
    
    // Execute request
    const [operation] = await client.annotateVideo(request);
    
    console.log(
      'Waiting for operation to complete... (this may take a few minutes)'
    );
    
    const [operationResult] = await operation.promise();
    
    // Gets annotations for video
    const annotations = operationResult.annotationResults[0];
    
    // Gets labels for video from its annotations
    const labels = annotations.segmentLabelAnnotations;
    labels.forEach(label => {
      console.log(`Label ${label.entity.description} occurs at:`);
      label.segments.forEach(segment => {
        segment = segment.segment;
        console.log(
          `\tStart: ${segment.startTimeOffset.seconds}` +
            `.${(segment.startTimeOffset.nanos / 1e6).toFixed(0)}s`
        );
        console.log(
          `\tEnd: ${segment.endTimeOffset.seconds}.` +
            `${(segment.endTimeOffset.nanos / 1e6).toFixed(0)}s`
        );
      });
    });

    Python

    Antes de executar o exemplo, verifique se você preparou o ambiente para o desenvolvimento em Python.

    from google.cloud import videointelligence
    
    video_client = videointelligence.VideoIntelligenceServiceClient()
    features = [videointelligence.Feature.LABEL_DETECTION]
    operation = video_client.annotate_video(
        request={
            "features": features,
            "input_uri": "gs://cloud-samples-data/video/cat.mp4",
        }
    )
    print("\nProcessing video for label annotations:")
    
    result = operation.result(timeout=180)
    print("\nFinished processing.")
    
    # first result is retrieved because a single video was processed
    segment_labels = result.annotation_results[0].segment_label_annotations
    for i, segment_label in enumerate(segment_labels):
        print("Video label description: {}".format(segment_label.entity.description))
        for category_entity in segment_label.category_entities:
            print(
                "\tLabel category description: {}".format(category_entity.description)
            )
    
        for i, segment in enumerate(segment_label.segments):
            start_time = (
                segment.segment.start_time_offset.seconds
                + segment.segment.start_time_offset.microseconds / 1e6
            )
            end_time = (
                segment.segment.end_time_offset.seconds
                + segment.segment.end_time_offset.microseconds / 1e6
            )
            positions = "{}s to {}s".format(start_time, end_time)
            confidence = segment.confidence
            print("\tSegment {}: {}".format(i, positions))
            print("\tConfidence: {}".format(confidence))
        print("\n")

    Outras linguagens

    C#: Siga as Instruções de configuração do C# na página das bibliotecas de cliente e acesse a Documentação de referência do Video Intelligence para .NET.

    PHP: Siga as Instruções de configuração do PHP na página das bibliotecas de cliente e acesse a Documentação de referência do Video Intelligence para PHP.

    Ruby: Siga as Instruções de configuração do Ruby na página das bibliotecas de cliente e acesse a Documentação de referência do Video Intelligence para Ruby.

    Parabéns! Você enviou sua primeira solicitação para a API Video Intelligence.

    Como foi?

    Limpar

    Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga as etapas abaixo.

    A seguir