Audiencia
Este tutorial se ha diseñado para ayudarte a empezar a explorar y desarrollar aplicaciones con la API Video Intelligence. Está diseñado para personas que tengan conocimientos básicos de Python. También deberías poder seguir el curso aunque tengas pocos conocimientos de programación. Después de completar este tutorial, deberías poder usar la documentación de referencia para crear tus propias aplicaciones básicas.
Este tutorial avanza a través de una aplicación de la API Video Intelligence que usa el código de Python. El objetivo no es explicar las bibliotecas de cliente de Python, sino cómo hacer llamadas a la API Video Intelligence mediante la función de detección de etiquetas de vídeo. Las aplicaciones en Java y Node.js son esencialmente similares.
Si buscas un ejemplo que solo incluya código o un ejemplo en otro idioma, consulta la guía práctica complementaria.
Requisitos previos
Para hacer este tutorial, debes cumplir los siguientes requisitos:
- Has configurado un proyecto de la API Video Intelligence en la Google Cloud consola.
- Has configurado tu entorno con una cuenta de servicio y credenciales predeterminadas de la aplicación.
- Tener conocimientos básicos en la programación de Python.
- Has configurado tu entorno de desarrollo de Python.
Te recomendamos que tengas instaladas en tu sistema las versiones más recientes de Python,pip
yvirtualenv
. Para obtener instrucciones, consulta la guía de configuración del entorno de desarrollo de Python para Google Cloud. - Haber instalado la biblioteca cliente de Google Cloud.
Anotar un vídeo mediante la detección de etiquetas
En este tutorial se explica cómo usar una aplicación básica de la API Video mediante una solicitud LABEL_DETECTION
. Una solicitud LABEL_DETECTION
anota un vídeo con etiquetas que se seleccionan en función del contenido de la imagen. Por ejemplo, un vídeo de un tren en un cruce puede generar etiquetas como "tren", "transporte" y "cruce ferroviario".
A continuación, se muestra el código completo necesario para este tutorial. La mayoría de los comentarios se han eliminado de este código para destacar lo breve que es. En su lugar, los comentarios se proporcionan más adelante a medida que analizamos el código.
Esta sencilla aplicación realiza las siguientes tareas:
- Importa las bibliotecas necesarias para ejecutar la aplicación.
- Toma un archivo de vídeo almacenado en un URI de Cloud Storage como argumento y lo transfiere a la función
main()
. - Obtiene las credenciales para ejecutar el servicio de la API Video Intelligence.
- Crea una solicitud de anotación de vídeo para enviarla al servicio de vídeo.
- Envía la solicitud y devuelve una operación de larga duración.
- Itera sobre la operación de larga duración hasta que se procese el vídeo y devuelve los valores disponibles.
- Analiza la respuesta del servicio y la muestra al usuario.
Importar bibliotecas
Se importan algunas bibliotecas estándar: argparse
para permitir que la aplicación acepte nombres de archivo de entrada como argumentos y sys
para dar formato a la salida mientras espera las respuestas de la API. El paquete time
se importa para ejecutar
algunos bucles de espera sencillos.
Cuando uses la API Video Intelligence, también tendrás que importar google.cloud.videointelligence_v1
y su clase de enumeración, que contiene el directorio de nuestras llamadas a la API.
Ejecutar la aplicación
En este caso, el argumento transferido se analiza para obtener el URI de Cloud Storage del nombre de archivo de vídeo y se transfiere a la función main()
.
Autenticar en la API
Antes de comunicarte con el servicio de API Video Intelligence, debes autenticar tu servicio mediante las credenciales adquiridas previamente. En una aplicación, la forma más sencilla de obtener credenciales es usar las credenciales predeterminadas de la aplicación (ADC). De forma predeterminada, ADC intenta obtener las credenciales del archivo de entorno GOOGLE_APPLICATION_CREDENTIALS
, que debe configurarse para que apunte al archivo JSON de la clave de tu cuenta de servicio. (Deberías haber configurado tu cuenta de servicio y tu entorno para usar ADC en la guía de inicio rápido.
Construir la solicitud
Ahora que el servicio de la API Video Intelligence está listo, puedes crear una solicitud a ese servicio. Las solicitudes a la API Video Intelligence se envían como objetos JSON. Consulta la referencia de la API Video Intelligence para obtener información detallada sobre la estructura concreta de estas solicitudes.
Este fragmento de código realiza las siguientes tareas:
- Crea el JSON de una solicitud POST al método
annotate_video()
. - Inserta la ubicación de Cloud Storage del nombre de archivo de vídeo proporcionado en la solicitud.
- Indica que el método
annotate
debe realizarLABEL_DETECTION
.
Comprobar la operación
Con la solicitud de operación de la operación en curso, se crea un bucle while
para comprobar periódicamente el estado de esa operación. Una vez que la operación haya indicado que es done
, se analiza la respuesta.
Analizar la respuesta
Una vez que se haya completado la operación, la respuesta contendrá el resultado
en un AnnotateVideoResponse,
que consta de una lista de annotationResults
, uno por cada vídeo enviado en la solicitud. Como solo se ha enviado un vídeo en la solicitud, se toma el primer segmentLabelAnnotations
de los resultados y se recorren todas las etiquetas de segmentLabelAnnotations
. Si solo usas segmentLabelAnnotations
, en este tutorial solo se mostrarán las anotaciones a nivel de vídeo.
Cada segment_label
incluye una descripción (segment_label.description
), una lista de categorías de entidades (segment_label.category_entities
) y una lista de segmentos que identifican la hora de inicio y de finalización de las apariciones de la etiqueta en el vídeo (debe ser un segmento que abarque todo el vídeo o el segmento de vídeo en el 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 } ] }, ... ] } ] } }
Como solo se ha enviado un vídeo en la solicitud, se imprime el primer description
del primer resultado.
Ejecutar la aplicación
Para ejecutar la aplicación, solo tienes que pasarle el URI de Cloud Storage de un 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 ...
Salida
A continuación se muestra un ejemplo de un posible 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
¡Enhorabuena! Has realizado una tarea de anotación con la API Video Intelligence.