Savant, un framework para el análisis de video
Los sistemas de vigilancia y reconocimiento no es algo novedoso ni mucho menos que sea de los últimos tiempos, ya que estos sistemas han sido utilizados durante una gran cantidad de años y han ido evolucionando junto con las mejoras de los desarrollos tanto en hardware como en software.
Hace un par de años compartí en el blog un poco sobre OpenCV, una biblioteca libre de visión artificial multiplataforma (puedes consultar los detalles del artículo en el siguiente enlace), que en su momento me parecio sumamente interesante porque podía implementarse sobre una Raspberry Pi y en ese entonces tenía la manía de estar probando una gran cantidad de proyectos y sistemas en mi RPi.
La razón de hacer mención de esto y tratando de no salir del tema de la publicación de hoy, es que muchos piensan que la implementación de un sistema de este tipo puede ser sumamente costoso o incluso muy complicado. Lo que en realidad no lo es hasta cierto punto, ya que se puede uno apoyar de proyectos de código abierto, pero sí se requiere de ciertos conocimientos y sobre todo paciencia.
Es por eso que el día de hoy vamos a hablar sobre un proyecto de este tipo y que personalmente me parece muy bueno y potente. El proyecto del que vamos a hablar es Savant, el cual es un framework escrito en Python y que hace que NVIDIA DeepStream sea más fácil de usar para los ingenieros de aprendizaje automático
Savant es un marco de muy alto nivel sobre DeepStream, que oculta todos los aspectos internos de Gstreamer del desarrollador y proporciona herramientas prácticas para implementar aplicaciones de IA de transmisión en la vida real. Utiliza el modelo estándar de Nvidia PeopleNet para detectar personas y sus rostros y sobre todo en lugares donde se aplican normas de privacidad el framework permite el rastreo y desenfoque de los rostros.
De las características que se destacan de Savant está por ejemplo la inferencia increíblemente rápida, ya que se basa en Nvidia DeepStream y ofrece el rendimiento en el hardware de Nvidia que compatible con aceleradores de centros de datos, placas profesionales, de escritorio y NVIDIA Jetson.
Otra de las características es que cuenta con soporte de integración OpenCV CUDA con los cuales se pueden aplicar filtros OpenCV CUDA y trabajar con rásteres GpuMat de manera eficiente sin descargar marcos pesados a la RAM de la CPU.
Ademas de ello, cuenta con una API de transmisión que permite Savant funcione como un servidor de inferencia a través de 0MQ y Apache AVRO. Con ello los datos de transmisión se entregan al servidor y se consumen desde él con adaptadores.
De las demás características que se destacan de Savant:
- Soporte de Python y ML.
- El marco está disponible como contenedores Docker para tiempos de ejecución x86 y Nvidia Jetson.
- Funciona en Edge y Core
- Operaciones de baja latencia y capacidad, savant admite operaciones de baja latencia beneficiosas
- Adaptadores para acceder a varias fuentes de medios como RTSP o archivos de video
- Permite construir pipelines para entornos donde el procesamiento con reconocimiento de rotación es crucial.
Sobre la implementación del proyecto, deben saber que tanto Savant como sus adaptadores se entregan como imágenes de Docker. Por lo que para implementar la pipeline, toma la imagen base, agrega modelos de IA y un código personalizado con dependencias adicionales, luego crea la imagen resultante. Algunas pipelines que no requieren dependencias adicionales se pueden implementar simplemente asignando directorios con modelos y funciones de usuario en la imagen de la ventana acoplable.
Por la parte de la configuración del entorno Savant se requiere de contar con algunas dependencias y herramientas ya instaladas, ya que es sumamente necesario que se satisfagan las dependencias de DeepStream.
Las dependencias son:
- git
- git-lfs
- curl
- docker
- controladores nvidia
- Nvidia Container Toolkit
Dado que el proceso de implementación del entorno requiere de bastante, te invito a que si tienes interés, consultes el manual de Savant en el siguiente enlace.