Público-alvo
Este tutorial foi concebido para ajudar a começar a explorar e desenvolver aplicações com a Video Intelligence API. Foi concebido para pessoas com conhecimentos básicos de Python. Também deve conseguir seguir as instruções com conhecimentos de programação limitados. Depois de seguir este tutorial, deve conseguir usar a documentação de referência para criar as suas próprias aplicações básicas.
Este tutorial explica passo a passo uma aplicação da API Video Intelligence que usa código Python. O objetivo aqui não é explicar as bibliotecas cliente Python, mas sim explicar como fazer chamadas para a API Video Intelligence através da funcionalidade de deteção de etiquetas de vídeo. As aplicações em Java e Node.js são essencialmente semelhantes.
Se procura um exemplo apenas com código ou um exemplo noutro idioma, consulte o guia de instruções complementar.
Pré-requisitos
Este tutorial tem os seguintes pré-requisitos:
- Configurou um projeto da API Video Intelligence na Google Cloud consola.
- Configurou o seu ambiente através de uma conta de serviço e das credenciais predefinidas da aplicação.
- Tem conhecimentos básicos de programação em Python.
- Configurou o seu ambiente de programação Python.
Recomenda-se que tenha a versão mais recente do Python,pip
, evirtualenv
instalada no seu sistema. Para ver as instruções, consulte o guia de configuração do ambiente de desenvolvimento Python para Google Cloud. - Instalou a biblioteca cliente do Google Cloud
Anote um vídeo através da deteção de etiquetas
Este tutorial explica como criar uma aplicação básica da API Video com um pedido
LABEL_DETECTION
. Um pedido LABEL_DETECTION
anota um vídeo com etiquetas (ou "tags") selecionadas com base no conteúdo da imagem. Por exemplo, um vídeo de um comboio numa passagem de nível pode gerar etiquetas como "comboio", "transportes" e "passagem de nível".
Segue-se o código completo necessário para este tutorial. A maioria dos comentários foi removida deste código para realçar a sua brevidade. Em alternativa, os comentários são fornecidos mais tarde à medida que analisamos o código.
Esta aplicação simples realiza as seguintes tarefas:
- Importa as bibliotecas necessárias para executar a aplicação.
- Usa um ficheiro de vídeo armazenado no URI do Cloud Storage como argumento e
transmite-o à função
main()
. - Obtém credenciais para executar o serviço da API Video Intelligence.
- Cria um pedido de anotação de vídeo para enviar ao serviço de vídeo.
- Envia o pedido e devolve uma operação de longa duração.
- Faz um ciclo sobre a operação de longa duração até o vídeo ser processado e devolve os valores disponíveis.
- Analisa a resposta para o serviço e apresenta-a ao utilizador.
Importe bibliotecas
São importadas algumas bibliotecas padrão: argparse
para permitir que a aplicação aceite nomes de ficheiros de entrada como argumentos e sys
para formatar a saída enquanto aguarda respostas da API. O pacote time
é importado para executar
alguns ciclos de espera simples.
Quando usar a Video Intelligence API, também tem de importar o
google.cloud.videointelligence_v1
e a respetiva classe de enumeração, que contém
o diretório das nossas chamadas API.
Execute a aplicação
Aqui, o argumento transmitido é analisado para o URI do Cloud Storage do nome do ficheiro de vídeo e é transmitido para a função main()
.
Autentique-se na API
Antes de comunicar com o serviço Video Intelligence API, tem de autenticar o seu serviço através de credenciais adquiridas anteriormente. Numa aplicação, a forma mais simples de obter credenciais é usar as Credenciais padrão da aplicação (ADC). Por predefinição, o ADC tenta obter credenciais a partir do ficheiro de ambiente GOOGLE_APPLICATION_CREDENTIALS
, que deve ser definido para apontar para o ficheiro de chave JSON da sua conta de serviço. (Deve ter configurado a sua conta de serviço e ambiente para usar o ADC no guia de início rápido.
Construa o pedido
Agora que o serviço Video Intelligence API está pronto, pode criar um pedido para esse serviço. Os pedidos à API Video Intelligence são fornecidos como objetos JSON. Consulte a referência da API Video Intelligence para informações completas sobre a estrutura específica de tal pedido.
Este fragmento do código realiza as seguintes tarefas:
- Constrói o JSON para um pedido POST para o método
annotate_video()
. - Injeta a localização do Cloud Storage do nome do ficheiro de vídeo transmitido no pedido.
- Indica que o método
annotate
deve executarLABEL_DETECTION
.
Verifique a operação
Usando o pedido de operação existente para a operação existente, é construído um ciclo while
para verificar periodicamente o estado dessa operação. Assim que a operação indicar que está done
, a resposta é analisada.
Analise a resposta
Assim que a operação estiver concluída, a resposta vai conter o resultado
num
AnnotateVideoResponse,
que consiste numa lista de annotationResults
, um para cada vídeo enviado no
pedido. Uma vez que apenas foi enviado um vídeo no pedido, é usado o primeiro segmentLabelAnnotations
dos resultados. Todas as etiquetas em segmentLabelAnnotations
são processadas em ciclo. Se usar apenas
segmentLabelAnnotations
, este tutorial apresenta apenas anotações ao nível do vídeo.
Cada segment_label
inclui uma descrição (segment_label.description
), uma lista de categorias de entidades (segment_label.category_entities
) e uma lista de segmentos que identificam a hora de início/fim das ocorrências da etiqueta no vídeo (deve ser um segmento que abranja todo o vídeo ou segmento de vídeo no caso de segment_label_annotations
).
{ "name":"us-west1.12089999971048628582", "metadata":{ "@type":"type.googleapis.com/google.cloud.videointelligence.v1.AnnotateVideoProgress", "annotationProgress":[ { "inputUri":"gs://YOUR_BUCKET/YOUR_OBJECT", "updateTime":"2020-01-31T01:49:52.498015Z", "startTime":"2020-01-31T01:49:43.056481Z" } ] }, "done": true, "response":{ "@type":"type.googleapis.com/google.cloud.videointelligence.v1.AnnotateVideoResponse", "annotationResults":[ { "inputUri":"gs://YOUR_BUCKET/YOUR_OBJECT", "segmentLabelAnnotations": [ { "entity": { "entityId": "/m/01yrx", "languageCode": "en-US" }, "segments": [ { "segment": { "startTimeOffset": "0s", "endTimeOffset": "14.833664s" }, "confidence": 0.98509187 } ] }, ... ] } ] } }
Uma vez que apenas foi enviado um vídeo no pedido, é apresentado o
primeiro description
do primeiro resultado.
Execute a sua aplicação
Para executar a sua aplicação, basta transmitir-lhe o URI do Cloud Storage de um vídeo:
$ python labels.py gs://YOUR_BUCKET/YOUR_OBJECT Operation us-west1.4757250774497581229 started: 2020-01-30T01:46:30.158989Z Operation processing ... The video has been successfully processed. Video label description: urban area Label category description: city Segment 0: 0.0s to 38.752016s Confidence: 0.946980476379 Video label description: traffic Segment 0: 0.0s to 38.752016s Confidence: 0.94105899334 Video label description: vehicle Segment 0: 0.0s to 38.752016s Confidence: 0.919958174229 ...
Resultado
Segue-se um exemplo de um possível resultado.
Processing video for label annotations:Finished processing. Video label description: crowd Label category description: people Segment 0: 0.0s to 60.24s Confidence: 0.527720749378
Video label description: official Label category description: person Segment 0: 0.0s to 60.24s Confidence: 0.372822880745
Video label description: audience Label category description: people Segment 0: 0.0s to 60.24s Confidence: 0.501719772816
Video label description: news Segment 0: 0.0s to 60.24s Confidence: 0.867252230644
Video label description: people Label category description: person Segment 0: 0.0s to 60.24s Confidence: 0.46747264266
Video label description: politics Segment 0: 0.0s to 60.24s Confidence: 0.319397002459
Parabéns! Realizou uma tarefa de anotação com a Video Intelligence API!