Contáctenos

Aplicación de IA al procesamiento de video en tiempo real: conceptos básicos y más

Líderes del pensamiento

Aplicación de IA al procesamiento de video en tiempo real: conceptos básicos y más

mm

Por Maksym Tatarants, Data science ingeniero en MobiDev.

No hay nada nuevo en el uso de inteligencia artificial (IA) en el procesamiento de video. Si mira más allá del procesamiento de imágenes, es uno de los casos de uso más comunes para la IA. Y al igual que el procesamiento de imágenes, el procesamiento de video utiliza técnicas establecidas como visión de computadora, reconocimiento de objetos, aprendizaje automático y aprendizaje profundo para mejorar este proceso. 

Ya sea que use visión por computadora y PNL en edición de video y generación, reconocimiento de objetos en etiquetado automático de contenido de video tareas, aprendizaje automático para agilizar Análisis de video con IA, o aprendizaje profundo para acelerar el tiempo real eliminación de fondo, los casos de uso continúan creciendo día a día.

Siga leyendo para saber qué enfoque puede tomar cuando se trata de usar IA en el procesamiento de video.

Los fundamentos del procesamiento de video en tiempo real

Empecemos con lo básico. El procesamiento de video en tiempo real es una tecnología esencial en los sistemas de vigilancia que utilizan reconocimiento facial y de objetos. También es el proceso de referencia que impulsa el software de inspección visual de IA en el sector industrial.

Entonces, ¿cómo funciona el procesamiento de video? El procesamiento de video implica una serie de pasos, que incluyen la decodificación, el cálculo y la codificación. Esto es lo que necesita saber:

  • Descodificación: El proceso requerido para convertir un video de un archivo comprimido a su formato original.
  • Cálculo: Una operación específica realizada en un cuadro de video sin procesar.
  • Codificación: El proceso de reconvertir el marco procesado a su estado comprimido original.

Ahora, el objetivo de cualquier tarea de procesamiento de video es completar estos pasos de la manera más rápida y precisa posible. Las formas más fáciles de lograr esto incluyen: trabajar en paralelo y optimizar la velocidad del algoritmo. ¿En lenguaje sencillo? Debe aprovechar la división de archivos y la arquitectura de canalización.

¿Qué es la división de archivos de video?

La división de archivos de video permite que los algoritmos funcionen simultáneamente, lo que les permite usar modelos más lentos y precisos. Esto se logra dividiendo los videos en partes separadas que luego se procesan al mismo tiempo.

Puede pensar en la división de video como una forma de generación de archivos virtuales en lugar de generación de subarchivos. 

A pesar de esto, la división de archivos de video no es la mejor opción para el procesamiento de video en tiempo real. ¿Por qué exactamente? Este proceso hace que le resulte difícil pausar, reanudar y rebobinar un archivo mientras está siendo procesado.

¿Qué es la arquitectura de tuberías?

La otra opción es la arquitectura de tubería. Este proceso funciona para dividir y paralelizar las tareas que se realizan durante el procesamiento, en lugar de dividir el video por completo.

Aquí hay un ejemplo rápido de cómo se ve la arquitectura de tubería en la práctica y cómo se puede usar en un sistema de videovigilancia para detectar y desenfocar rostros en tiempo real.

En este ejemplo, la canalización ha dividido las tareas en decodificación, detección de rostros, desenfoque de rostros y codificación. Y si desea mejorar la velocidad de la canalización, puede usar la canalización técnicas de aprendizaje profundo.

Explicación de la decodificación y la codificación

¿Qué pasa con la decodificación y la codificación? Hay dos formas de completar estos procesos: software y hardware.

Es posible que ya esté familiarizado con el concepto de aceleración de hardware. Este proceso es posible gracias a los decodificadores y codificadores instalados en las últimas tarjetas gráficas NVIDIA, así como a los núcleos CUDA.

Entonces, ¿qué opciones tiene disponibles cuando se trata de aceleración de hardware para los procesos de codificación y decodificación? Estas son algunas de las opciones más populares:

  • Compile OpenCV con soporte CUDA: La compilación de OpenCV con CUDA optimiza tanto la decodificación como cualquier cálculo de canalización que utilice OpenCV. Tenga en cuenta que deberá escribirlos en C++ ya que el contenedor de Python no admite esto. Pero en situaciones que requieren decodificación y cálculos numéricos con una GPU sin copiar desde la memoria de la CPU, sigue siendo una de las mejores opciones disponibles.
  • Compile FFmpeg o GStreamer con soporte de códecs NVDEC/NVENC: Otra opción es usar el codificador y decodificador NVIDIA integrado que se incluye con las instalaciones personalizadas de FFmpeg y Gstreamer. Sin embargo, sugerimos usar FFmpeg si es posible, ya que requiere menos mantenimiento. Además, la mayoría de las bibliotecas funcionan con FFmpeg, lo que significa que aumentará automáticamente el rendimiento de la biblioteca al reemplazarla.
  • Use el marco de procesamiento de video de NVIDIA: La opción final es usar un envoltorio de Python para decodificar el cuadro directamente en un tensor PyTorch en la GPU. Esta opción elimina la copia adicional de la CPU a la GPU.

Detección de rostros y desenfoque

Los modelos de detección de objetos (SSD o RetinaFace) son una opción popular para completar la detección de rostros. Estas soluciones funcionan para ubicar el rostro humano en un marco. Y en base a nuestra experiencia, tendemos a preferir los modelos de detección de objetos Caffe Face tracking y TensorFlow, ya que proporcionaron los mejores resultados. Además, ambos están disponibles usando la biblioteca OpenCV. módulo dnn.

Entonces, ¿qué sigue después de que se detecta una cara? A continuación, el Python y OpenCVEl sistema basado en género cuadros delimitadores y confianza de detección. Finalmente, se aplica un algoritmo de desenfoque a las áreas recortadas.

¿Cómo puede crear un software de procesamiento de video en vivo impulsado por IA?

No es ningún secreto que el procesamiento de video, los códecs que lo alimentan y tanto el hardware como el software requeridos son de naturaleza bastante técnica.

Aún así, eso no significa que no pueda usar estas herramientas para crear su propio software de procesamiento de video en vivo. 

Aquí hay un breve desglose de lo que debe hacer:

  1. Comience ajustando su red neuronal preentrenada para completar las tareas requeridas.
  2. Configure su infraestructura en la nube para manejar el procesamiento de video y escalar según sea necesario.
  3. Cree un abogado de software para condensar el proceso e integrar casos de uso específicos, como aplicaciones móviles y paneles de administración o web.

Desarrollar un MVP para un software de procesamiento de video similar puede llevar hasta cuatro meses utilizando una red neuronal preentrenada y capas de aplicación simples. Sin embargo, el alcance y el cronograma dependen de los detalles de cada proyecto. En la mayoría de los casos, conviene comenzar con el desarrollo de una prueba de concepto para explorar los detalles del proyecto y encontrar el flujo óptimo.

Maksym está interesado en obtener nuevos conocimientos y experiencia en ciencia de datos y aprendizaje automático. Está particularmente interesado en las tecnologías basadas en Deep Learning y su aplicación a casos de uso empresarial.