Transmitir un flujo de video a través de un microcontrolador

2

Estoy trabajando en un proyecto que actualmente funciona bien, pero este año queremos expandirlo mediante la recopilación de datos, independientemente de sus funciones actuales. Hemos configurado una aplicación de iPad para controlar un Arduino a través de Bluetooth. El siguiente paso es transmitir video a través de Bluetooth al iPad.

Con esta pregunta, me gustaría centrarme en cómo un microcontrolador puede enviar un flujo de video a través de Bluetooth. Parece que no puedo encontrar una manera de comenzar este proyecto.

¿Cómo conectas la cámara con el microcontrolador?

¿Cómo envías esa transmisión por Bluetooth?

    
pregunta Tom Prats

2 respuestas

8

Lamentablemente, en mi experiencia, lo que rápidamente encontrarás es que el video es terriblemente difícil de manipular sin una gran cantidad de energía de la CPU. Empecemos por el principio: ¿cuánto video quieres?

Hay muchas opciones aquí, pero empieza poco a poco. Digamos que, por simplicidad, quería un fotograma de 640 x 480 de video en blanco y negro de 8 bits, a 24 fotogramas por segundo.

Eso es 640 * 480 píxeles = 307,200 * 8 bits por píxel = 307,200 kilobytes por cuadro * 24 cuadros por segundo = 7,372,800 bytes por segundo o ~ 7.37 megabytes por segundo

De modo que es una línea de base para el rendimiento de datos de una cámara que genera cuadros en bruto, y eso no incluye sonido ni color. Ahora tiene algunos caminos que puede tomar: puede comenzar a codificar el flujo de video, o puede obtener una gran cantidad de ancho de banda. No conozco el rendimiento del bluetooth, por lo que no puedo ayudarte allí.

La codificación desafortunadamente toma una de tres cosas: una gran cantidad de potencia de procesamiento, hardware especializado o (posiblemente) conocimiento FPGA que yo tampoco tengo. La codificación reducirá los problemas de ancho de banda, pero a un costo bastante alto. Tendría que investigar la compresión y, por otra parte, averiguar si incluso podría obtener esto a través de su interfaz y seguir haciendo que el arduino realice un trabajo útil.

Si desea conectar una cámara a un microcontrolador, descubrirá que incluso simplemente tomar fotografías puede ser una molestia en función de cómo se entregan los cuadros. Había una cámara sparkfun que daba fotogramas jpeg pero no tenía un período fijo por el tiempo que demoraba la codificación, y luego comenzaba a escupir el fotograma codificado tan rápido como podía, y dado que los fotogramas eran demasiado grandes para caber La RAM del microcontrolador tuvo que gastar todo su tiempo en obtener el marco y escupirlo sobre cualquier interfaz que estuvieran usando para transmitir.

tl; dr: debe establecer lo que necesita y, probablemente, intentarlo y averiguar si usar el microcontrolador como el intermediario es la mejor opción.

¡Buena suerte! Espero que eso ayude.

    
respondido por el Kit Scuzz
9

Bluetooth es una tecnología de radio semidúplex que tiene una velocidad de datos sin procesar máxima de 1, 2 o 3 Mbps, Dependiendo del esquema de modulación específico que se esté utilizando. En la práctica, una aplicación puede obtener un máximo de 200 KB / s de rendimiento de datos.

Incluso si reduce sus requisitos de video a un cuarto de VGA (320 × 240) a 10 fps con 8 bits / píxel (768 KB / s), aún deberá comprimir los datos sobre la marcha en al menos 4 : 1 para transmitirlo en tiempo real a través de Bluetooth.

Dicho esto, si esto sigue siendo algo que desea seguir, recomendaría mirar los chips DSP como el microcontrolador que seleccione. Solo como un ejemplo, el Blackfin de Analog Devices ( ADSP-BF561 ) es particularmente muy adecuado para el procesamiento de video en tiempo real. El correspondiente EZ-KIT es una manera fácil de comenzar con el desarrollo.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas