Hola Para empezar, estoy desarrollando un programa para determinar los números de automóviles en un procesador barato de baja potencia como Intel ATOM Z8350. Obtuvimos resultados bastante buenos para determinar los números rusos en una imagen estática (hasta 97%) con un buen rendimiento sin el uso de redes neuronales. Lo único que queda es pequeño: trabaje con la cámara IP Fig.1.
Figura 1 Computadora Intel ATOM Z83II y cámara IP ATISFFmpeg es una biblioteca para crear aplicaciones de video o incluso utilidades de uso general que toma todo el trabajo duro del procesamiento de video, haciendo toda la decodificación, codificación, multiplexación y demultiplexación por usted.
Tarea : la cámara IP Full HD en h.264 estándar transmite transmisión RTSP. El tamaño del cuadro descomprimido es 1920x1080 píxeles, la frecuencia es de 25 cuadros por segundo. Es necesario recibir cuadros decodificados en RAM y guardar cada 25 cuadros en el disco.
En este ejemplo, decodificaremos marcos programáticamente. El objetivo es aprender a usar FFmpeg y comparar aún más los resultados obtenidos con la decodificación de hardware. Verá FFmpeg, ¡es fácil!
Instalación de FFmpeg : muchas personas sugieren construir FFmpeg para su hardware. Sugiero usar
compilaciones de zeranoe , lo que simplifica enormemente la tarea. Es muy importante que los ensambles de
zeranoe incluyan soporte para DXVA2, que nos será útil más adelante para la decodificación de hardware.
Vamos al sitio
https://ffmpeg.zeranoe.com/builds/ y descargamos 2 archivos compartidos y de desarrollo antes de elegir 32 o 64 bits. El archivo dev almacena bibliotecas (.lib) e incluye. El archivo compartido contiene los archivos .dlls necesarios que deberán reescribirse en una carpeta con su programa futuro.
Por lo tanto, cree la carpeta ffmpeg en la unidad C: \. Reescribiremos los archivos del archivo de desarrollo en él.
Conectando FFmpeg a Visual Studio 2017: creando un nuevo proyecto. Vaya a las propiedades del proyecto (Proyecto - propiedades). A continuación, C / C ++ y seleccione "Directorios adicionales para los archivos incluidos". Establezca el valor: "C: \ ffmpeg \ dev \ include;". Después de eso, vaya a los directorios de la biblioteca Linker-Additional y establezca el valor en "C: \ ffmpeg \ dev \ lib;". Eso es todo. FFmpeg está conectado a nuestro proyecto.
El primer proyecto con FFmpeg: decodificación de video por software y grabación de cada 25 cuadros en el disco. El principio de trabajar con un archivo de video en FFmpeg se presenta en el diagrama de bloques de la Fig. 2
Fig. 2 Diagrama de bloques del trabajo con un archivo de video.Aquí está el código del proyecto C ++ Porque mi cámara IP tiene IP 192.168.1.168, luego la llamada del programa:
decode.exe rtsp://192.168.1.168
Además, este ejemplo puede decodificar archivos de video, es suficiente para indicar su ubicación.
Y así, en este ejemplo, aprendimos a decodificar mediante programación los archivos de video y guardar los cuadros recibidos en el disco. Los marcos se guardan en formato .ppm. Puede usar IrfanView 64 o GIMP en Windows para abrir estos archivos.
Conclusión: la decodificación de software del flujo RTSP Full HD H.264 requiere hasta dos núcleos Intel ATOM Z8350; además, la pérdida de paquetes se produce periódicamente, debido a qué parte de los marcos se decodifican incorrectamente. Este método es más aplicable para decodificar archivos de video grabados, ya que no es necesaria la operación en tiempo real.
En el próximo artículo te diré cómo decodificar la transmisión RTSP en hardware.Archivo con el proyecto
Programa de trabajoEnlaces a materiales en FFmpeg:
1. El
tutorial sobre cómo trabajar con FFmpeg, un poco desactualizado.2.
Diversas informaciones útiles sobre FFmpeg.3.
Información sobre el uso de las diversas bibliotecas proporcionadas por FFmpeg.