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

Por Maksym Tatarants, ingeniero de ciencia de datos 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 por computadorreconocimiento de objetos, aprendizaje automático y aprendizaje profundo para mejorar este proceso.

Ya sea que use visión por computadora y NLP en la edición y generación de video, reconocimiento de objetos en etiquetado automático de contenido de video tareas, aprendizaje automático para agilizar Análisis de video con IAo aprendizaje profundo para acelerar el tiempo real eliminación de fondolos casos de uso siguen 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:

  • Decodificación: el proceso requerido para convertir un video de un archivo comprimido a su formato original.
  • Computación: 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 dificulta pausar, reanudar y rebobinar un archivo mientras se procesa.

¿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 compatibilidad con 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 decodificador y codificador integrado de NVIDIA 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 NVIDIA Video Processing Framework: 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. modulo dnn.

Entonces, ¿qué sigue después de que se detecta una cara? A continuación, el Python y OpenCV-basado en el sistema revelará cuadros delimitadores y confianza en la 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:

  • Comience ajustando su red neuronal preentrenada para completar las tareas requeridas.
  • Configure su infraestructura en la nube para manejar el procesamiento de video y escalar según sea necesario.
  • 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.
  • El desarrollo de 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, tiene sentido comenzar con el desarrollo de la Prueba de concepto para explorar los detalles del proyecto y encontrar un flujo óptimo.

    Deja un comentario