Público
Este instructivo está diseñado para que comiences a explorar y desarrollar aplicaciones con la API de Video Intelligence. Está pensado para las personas que tienen conocimientos básicos sobre Python. También deberías poder seguirla con conocimientos de programación limitados. Tener recorriste este instructivo, deberías poder usar Documentación de referencia para crear tu propia aplicaciones básicas.
En este instructivo, se explica paso a paso una aplicación de la API de Video Intelligence que usa el código de Python. La finalidad no es explicar las bibliotecas cliente de Python, explicar cómo se realiza una llamada a la API de Video Intelligence con la detección de etiquetas de video . En esencia, las aplicaciones en Java y Node.js son similares.
Si buscas un ejemplo de código único o un ejemplo en otro lenguaje, consulta la guía práctica complementaria.
Requisitos
Este instructivo tiene los siguientes requisitos previos:
- Haber configurado un proyecto de la API de Video Intelligence en la consola de Google Cloud
- Haber configurado tu entorno con una cuenta de servicio y credenciales predeterminadas de la aplicación.
- Estar familiarizado con los aspectos básicos de la programación en Python.
- Haber configurado tu entorno de desarrollo de Python.
Se recomienda tienes instalada la versión más reciente de Python,pip
yvirtualenv
en en tu sistema. Para obtener instrucciones, consulta la Guía de configuración del entorno de desarrollo de Python para Google Cloud. - Instalaste la biblioteca cliente de Google Cloud.
Anota un video con la detección de etiquetas
En este instructivo, se explica cómo es una aplicación básica de la API de video, mediante una solicitud LABEL_DETECTION
. Una solicitud LABEL_DETECTION
anota un video con etiquetas que se seleccionan en función del contenido de la imagen. Por ejemplo, un video de un tren en un cruce puede producir etiquetas como “tren”, “transporte” y “cruce ferroviario”.
A continuación, se muestra el código completo necesario para este instructivo. Con más comentarios se quitaron de este código para resaltar lo breve que es. En cambio, se proporcionan comentarios más adelante a medida que repasamos el código.
Esta aplicación simple ejecuta las siguientes tareas:
- Importa las bibliotecas necesarias para ejecutar la aplicación.
- Toma un archivo de video almacenado en el URI de Cloud Storage como un argumento y lo pasa a la función
main()
. - Obtiene las credenciales para ejecutar el servicio de la API de Video Intelligence.
- Crea una solicitud de anotación de video para enviar al servicio de video.
- Envía la solicitud y muestra una operación de larga duración.
- Repite de forma indefinida la operación de larga duración hasta que el video se procese y muestre los valores disponibles.
- Analiza la respuesta del servicio y muestra la respuesta al usuario.
Importa las bibliotecas
Se importan algunas bibliotecas estándar: argparse
para permitir que la aplicación realice las siguientes acciones:
Acepta los nombres de archivos de entrada como argumentos y sys
para dar formato al resultado, mientras que
a la espera de respuestas de la API. Se importó el paquete time
para su ejecución
algunos bucles de espera simples.
Cuando uses la API de Video Intelligence, también deberás importar google.cloud.videointelligence_v1
y su clase de enumeración, que contiene el directorio de nuestras llamadas a la API.
Ejecuta la aplicación
Aquí, el argumento pasado se analiza para el URI de Cloud Storage del nombre de archivo del video y se pasa a la función main()
.
Autenticación en la API
Antes de comunicarte con el servicio de la API de Video Intelligence, debes autenticar tu servicio con las credenciales ya adquiridas. Dentro de una aplicación, la manera más simple de obtener credenciales es usar las Credenciales predeterminadas de la aplicación (ADC). De forma predeterminada, ADC intenta obtener credenciales del
Archivo de entorno GOOGLE_APPLICATION_CREDENTIALS
, que se debe configurar para apuntar
al archivo de claves JSON de tu cuenta de servicio. (Debes haber configurado tu cuenta de servicio y tu entorno para usar las ADC en la Guía de inicio rápido.
Crea la solicitud
Ahora que el servicio de la API de Video Intelligence está listo, puedes crear una solicitud a ese servicio. Las solicitudes a la API de Video Intelligence se proporcionan como objetos JSON. Consulta la referencia de la API de Video Intelligence para obtener información completa sobre la estructura específica de esta solicitud.
Este fragmento de código realiza las siguientes tareas:
- Construye el JSON para una solicitud POST al método
annotate_video()
. - Inserta la ubicación de Cloud Storage del nombre de archivo de video que se pasó en la solicitud.
- Indica que el método
annotate
debe realizar unaLABEL_DETECTION
.
Verifica la operación
Con la solicitud de operación existente para la operación existente, se realiza un bucle while
.
para verificar periódicamente el estado de esa operación. Una vez que la operación indica que la operación es done
, se analiza la respuesta.
Analiza la respuesta
Una vez que la operación se haya completado, la respuesta contendrá el resultado.
en un
AnnotateVideoResponse,
que consiste en una lista de annotationResults
, una por cada video enviado en
la solicitud. Como solo se envió un video en la solicitud, la
se tomaron los primeros segmentLabelAnnotations
de los resultados, se tomaron todas las etiquetas de
Se repiten las segmentLabelAnnotations
. Usando solo
segmentLabelAnnotations
, en este instructivo, solo se muestran anotaciones a nivel de video.
Cada segment_label
incluye una descripción (segment_label.description
), un
lista de categorías de entidades (segment_label.category_entities
) y una lista de
segmentos que identifican la hora de inicio y finalización de los casos de etiquetas en el video
(debe ser un segmento que abarque todo el video o el segmento de video 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 envió un video en la solicitud, la
se imprimen los primeros description
del primer resultado.
Ejecuta tu aplicación
Para ejecutar la aplicación, solo pasa el URI de Cloud Storage de un video:
$ 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 resultado posible.
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
Felicitaciones Realizaste una tarea de anotación con la API de Video Intelligence.