1 votos

¿Cómo reducir la tasa de datos? (OV7670 + Módulo de cámara AL422B(FIFO))

He comprado este módulo: OV7670 + Módulo de cámara AL422B(FIFO) y quiero enviar el video en vivo de la cámara por este NRF24L01 pero tengo varias preguntas.

  • ¿Es el módulo RF adecuado (NRF24L01) para este trabajo?

  • Creo que la velocidad de datos del NRF24L01 no es suficiente para la cámara. su opinión?

  • Si estás de acuerdo conmigo, en tu opinión, ¿cómo puedo resolver este problema? (en otras palabras, ¿puedo reducir el tamaño de los datos de la cámara (vídeo)?

Debo enviar el video por NRF24L01 para 1Mbps o más. además, estoy usando STM32F103RET6 para este trabajo.

3voto

drahnr Puntos 212

Suponiendo que pueda sostener la tasa de datos máxima para el nRF24L01 ( 2 megabits por segundo ), eso significa que puedes mover -en un mundo perfecto- 200 kilobytes por segundo (asumiendo que no hay sobrecarga).

Así que, teniendo en cuenta esto y el mínimo deseado de 24 fps, puedes calcular cuántos bytes necesita cada imagen: 200K / 24 = 8.53K por cuadro

Ahora no has dicho qué resolución quieres, pero la resolución máxima del ov7670 es de 640x480, y utiliza 16bits por pixel (es un poco más complicado que eso, invito a los curiosos a leer el Hoja de datos ).

Como saben nuestras calculadoras 640 * 480 * 2 = 614,400 Bytes - 72 veces ese 8,53K por cuadro. De hecho, tardaría unos 3 segundos por fotograma (6 segundos si se ejecuta a 1mbps).

Así que para responder a sus dos primeras preguntas: El nRF24L01 no está a la altura de la transmisión de vídeo en directo de 640x480.

Esto nos deja con la tercera pregunta: ¿Cómo reducir el tamaño de los datos de las cámaras?

Hay ( no mutuamente excluyentes) tres formas de hacerlo:

  1. Comprimir las imágenes
  2. Comprimir los datos
  3. Enviar imágenes más pequeñas

Desglosemos cada uno de ellos:

Comprimir las imágenes

Podría, por ejemplo, enviar las imágenes como un flujo M-JPEG. Esto facilitaría mucho la decodificación de las imágenes en el teléfono y reduciría bastante el tamaño de las imágenes enviadas.

Pero hay un problema: necesitas poder mantener toda la imagen en la memoria para poder hacer la compresión JPEG (y por tanto M-JPEG). Tu ST32F103RET6 tiene 64K de RAM (IIRC), así que no hay manera de que quepa. Y no estoy seguro de que haya un esquema de compresión con pérdidas que puedas utilizar y que no necesite toda la imagen a la vez.

Comprimir los datos

Ahora hay una serie de opciones que podrías hacer aquí: Huffman, Run Length Encoding, LWZ, etc. Desgraciadamente, ninguna de ellas va a producir una cantidad predecible de compresión. Va a depender de las imágenes que envíes.

Pero creo que es seguro decir que no vas a conseguir los 8,53K que necesitarías para 24fps.

Enviar imágenes más pequeñas

El OV7670 es bastante flexible en cuanto a resoluciones. Así que echemos un vistazo a otras resoluciones que podrías utilizar:

  • QVGA (320x240): 320 * 240 * 2 = 150K por cuadro. A esta velocidad se podría enviar algo más de 1fps
  • QQVGA (160x120): 160 * 120 * 2 = 37K por cuadro. Este es el primer tamaño de imagen que se puede almacenar completamente en la RAM
  • QQQVGA (80x60): 80 * 60 * 2 = 9.38K por cuadro. Con la compresión debería ser capaz de hacer vídeo a 24fps
  • QQQQVGA (40x30): `40 * 30 * 2 = 2,35K por cuadro. Con este tamaño (de sello de correos), ¡podrías emitir a 30fps 1mbps! Creo que esta es la resolución más baja soportada por la cámara.

QQVGA puede ser posible si se realiza una compresión JPEG con mucha pérdida, y luego se realiza también alguna compresión en el flujo de datos. Tendrás que experimentar para estar seguro.

Una posdata

Va a ser difícil encontrar una tecnología inalámbrica más rápida que el nRF24L01 (y sus similares), sin ir a wifi (por ejemplo el Módulo Adafruit CC3000 ). Con eso, un microcontrolador con MUCHA RAM, y compresión, deberías ser capaz de transmitir 24-30fps.

Alternativamente, hay chips de controladores de cámara que hacen la compresión JPEG para usted - el vc0706, por ejemplo. Con eso conectado a una cámara, y usando el enlace SPI del vc0706 deberías ser capaz de usar incluso un microcontrolador trivial para transmitir los datos.

Todavía no he encontrado un módulo de cámara con vc0706 que exponga los pines SPI, todos son serie. Puede que exista uno, pero aún no lo he encontrado. Así que si vas por este camino, puede que tengas que hacerlo tú mismo...

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X