Obtener 1000 FPS de la cámara Raspberry Pi

La cámara Raspberry Pi se ha convertido en un estándar de facto para los proyectos de muchos fabricantes, haciendo cosas como el reconocimiento de objetos y la transmisión remota. Sin embargo, el módulo de cámara usado Sony IMX219 es capaz de mucho más, y [Gaurav Singh] comenzó a desbloquear sus capacidades.

Después de investigar la hoja de datos del IMX219, quedó claro que podía funcionar con anchos de banda más altos cuando se configuraba para utilizar las cuatro rutas MIPI-CSI. En el módulo Raspberry Pi, solo se utilizan dos rutas MIPI, lo que limita la velocidad de fotogramas de la cámara. En lugar de, [Gaurav] desarrolló un módulo de explosión IMX219 personalizado que permite conectar la cámara a una FPGA utilizando los cuatro carriles para un mayor rendimiento.

Con esto, fue posible usar la cámara a velocidades de cuadro de hasta 1,000 fps. Esto se logró conectando el IMX219 directamente a FPGA y luego a una interfaz USB 3.0 a una computadora host, en lugar de usar la interfaz Raspberry Pi original. Si bien 1,000 fps solo están disponibles con una resolución baja de 640 x 80, también es posible disparar a 60 fps a 1080p, e incluso a 15 fps a 3280 x 2464.

Aunque probablemente esté fuera del ámbito de acción necesario para el usuario medio, [Gaurav] demuestra inteligentemente que la habilidad a menudo permanece sobre la mesa si realmente la necesitas. Los recursos están disponibles en Github para aquellos que quieran profundizar. También hemos visto a otros usar técnicas avanzadas para aumentar la velocidad de fotogramas del IMX219. Video después del descanso.

  • Hummmmmmmmm dice:

    (Capturar cámara réflex digital, desplazarse por los ajustes) 30 s, 20 s, 10 s, 5 s, 3 s, 1 s, 5 fps, 10 fps, 15 fps, 30 fps, 60, 100, 500, 1000, 2000, 3000, 4000, 5000. A Buen proyecto, aunque tal vez podría hacer algo similar con una de mis cámaras más antiguas.

    • Hermann Stamm-Wilbrandt dice:

      Por favor, vea mis otros comentarios al respecto de que no se necesita hardware adicional más que la cámara Raspberry v2 para capturar películas a 1000 fps. Y luego muéstrame una cámara DSLR que pueda capturar 1000 fps por ese precio.

    • Dave dice:

      ¡Velocidad de exposición! = Velocidad de fotogramas

      • Hermann Stamm-Wilbrandt dice:

        Exactamente, mientras que 1007 fps permite un poco menos de 1 ms de tiempo de exposición, a veces se necesita un tiempo de exposición de 12 µs para capturar objetos nítidos rápidos, consulte:
        https://la-tecnologia.com/2020/03/11/getting-1000-fps-out-of-the-raspberry-pi-camera/#comment-6226967
        E incluso eso muestra un enorme efecto de persiana enrollable aunque captura solo 75 filas.

  • ziew dice:

    Esta es la idea. Suponiendo que una conexión de banda ancha es constante, puede obtener fps más altos utilizando solo una fracción de los datos del sensor.

  • Gitano dice:

    Neg. 640 × 80 correcto. La lista de resoluciones probadas y pares de velocidad de fotogramas del github:

    3280 × 2464 15FPS
    1920 × 1080 60FPS
    1920 × 1080 30FPS
    1280 × 720 120FPS
    1280 × 720 60FPS
    1280 × 720 30FPS
    640 × 480 200FPS
    640 × 480 30FPS
    640 × 128 682FPS
    640 × 80 1000FPS

    • Hermann Stamm-Wilbrandt dice:

      Se pueden lograr 640 × 75 @ 1007fps sin hardware adicional.
      La fórmula para una frase de marco v2 que determiné es "76034 / altura + 67", ver diagrama
      (... 640 × 240 @ 383fps ... 640 × 176 @ 508fps ... 640 × 128 @ 667fps ... 640 × 75 @ 1007fps):
      https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=212518&p=1310445#p1320034

  • dt dice:

    Bien hecho. Buen proyecto e implementación.

  • Hermann Stamm-Wilbrandt dice:

    Puede capturar 640 × 75 @ 1007fps SIN hardware adicional, solo con una cámara v2 conectada a una interfaz Raspberry Pi CSI-2 y muchas otras velocidades de cuadro para cuadros más grandes, p. Ej. 640 × 224 a 410 fps:
    https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=212518&p=1310445#p1320034

    Puede encontrar muchos ejemplos capturados en mi galería de frambuesa:
    https://github.com/Hermann-SW/Raspberry_camera_gallery#raspberry-camera-gallery

    Para las personas que piensan que 640 × 75 no es útil, este fue el primer video a 1007 fps que hice de un cierre clásico de trampa para ratas. El cierre dura 1/100 de segundo en total, pero con una captura de 640 × 75 @ 1007 fps, verá 11 cuadros, primero la última barra de trampa del mouse inédita, la última cerrada (reproducida a 1 fps):
    https://stamm-wilbrandt.de/en/forum/mt.1000fps.75.gif

    • Gaurav Singh dice:

      El hardware de Raspberry PI será muy limitado, cuánto tiempo se puede grabar, con esta configuración de FPGA y USB3, puede grabar continuamente a 1000FPS durante horas y horas.

      • Hermann Stamm-Wilbrandt dice:

        Así es.
        Con 30 años.
        Eso es más que suficiente para, por ejemplo, atrapar trampas para ratones cerradas u otras cosas que se mueven rápidamente.
        Estoy de acuerdo en que su solución es buena cuando necesita capturar minutos u horas a 1000 fps.

        ¿Cuál es el precio que debe pagar para construir su solución?

        ¿Se puede personalizar su solución para capturar también el tráfico MIPI de la cámara v1 ov5647?
        Solo puede obtener 640 × 64 @ 665 fps de eso.
        Pero puede convertir una cámara v1 en una captura de obturador externo global (simplemente estableciendo algunos registros):
        https://github.com/Hermann-SW/Raspberry_v1_camera_global_external_shutter#introduction

        Esto evitaría el efecto extremo que siempre tiene una cámara v2, p. Ej. En este video (la barra de cierre debe ser vertical):
        https://raw.githubusercontent.com/Hermann-SW/Raspberry_camera_gallery/master/res/mt.1007fps.10000lm.12us.anim.gif

      • Greenaum dice:

        Sí, pero las Raspberry Pis son baratas, fáciles y están en todas partes. Eso probablemente beneficiará a más personas.

        • Gaurav Singh dice:

          La solución sugerida aquí también es relativamente económica en comparación con la parte del curso de implementación de FPGA. Lattice Machxo3 es realmente una FPGA general bastante barata. En comparación con lo que ofrecen los proveedores de FPGA para una solución de imagen, es más pequeño.
          En cuanto al trabajo de Hermann, es excepcional poder lograr tal desempeño en el propio IP. Pero la limitación Raspberry PI en sí también limita las aplicaciones. Comparar esta solución con Raspberry PI no iría en la dirección correcta.
          Es una clase de solución completamente diferente.
          Abre la puerta al uso de muchos otros sensores de imagen de alta función para su uso en proyectos de código abierto.

      • rasz_pl dice:

        ¿cómo será limitado? 640 × 75 @ 1007fps tiene una tasa de bits más baja que 1920 × 1080 @ 30

        • Hermann Stamm-Wilbrandt dice:

          Hola, si me puedes decir, estaría muy agradecido.
          Sin embargo, la velocidad máxima de fotogramas siempre fue de 1007 fps.
          Parece que me faltan algunas configuraciones de registro en ese caso.
          Determiné esta fórmula para la frase de marco v2: 76034 / altura + 67
          Esto es bastante alto para altitud = 96: 76034/96 + 67 = 859, mientras que la velocidad de fotogramas real es de 841 fps.
          Realmente me gustaría capturar 640 × 64 @ 1255fps de acuerdo con esa fórmula (o mejor 640x128_s @ 1255fps capturando solo cada dos líneas y luego duplicando cada línea en el posprocesamiento):
          https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=212518&p=1310445#p1320034

          Una aplicación que haría que la solución FPGA presentada aquí no fuera necesaria incluso durante una captura larga, es el procesamiento de cuadros en tiempo real en un robot de movimiento rápido. De esa forma, no es necesario conservar los marcos. Nunca lo intenté, pero enviar cuadros a través de la WLAN rápida Pi3B + / Pi4B a otra computadora similar a este enfoque FPGA permitiría la misma captura de longitud arbitraria de 640 × 75 @ 1007 fps:
          $ echo "640 * 75 * 10/8 * 1007/1024 ^ 2" | bc -q
          57
          PS
          Pi4B Wifi puede hacer [email protected] y 114Mbps @ 5GHz Wifi.

          • Gaurav Singh dice:

            He visto una velocidad de fotogramas de hasta ~ 1500 FPS con una frecuencia de salida máxima de MIPI, todo el máximo de ADC pll alrededor de 640 × 80, ahora debido al módulo fpga del reformador de salida de memoria y canalización Esta solución FPGA está limitada debido a la frecuencia GPX de FX3. Si cualquier FX3 pudiera ser superior a 32bit 100Mhz, o implementaría FIFO en un reformador de salida, ciertamente puede alcanzar al menos 1500FPS

  • BadJujuBee dice:

    640 x 80 es probablemente una relación de aspecto perfecta para el mejor uso de una muestra de 1000 fps, que es la detección de movimiento en un marco para su robot diot que puede capturar cosas que se le arrojan 🙂

    • Hermann Stamm-Wilbrandt dice:

      Sin la solución basada en hardware adicional mencionada en mis otras publicaciones, puede obtener incluso el doble de FoV que 640 × 75 capturado a 1007 fps, el modo se llama 640x150_s. Solo se capturan cada dos líneas (por lo tanto, solo 75 líneas), de 160 líneas. En el posprocesamiento, cada línea se duplica y obtiene 640 × 150 fotogramas a 1007 fps. Aquí hay un video de 640x150_s @ 1007fps de una barra de trampa de mouse clásica que se cierra. Debido a la alta velocidad de una barra, el tiempo de exposición de la cámara es de 12 µs (!) Y se necesitaba una luz focal brillante de 5000 lm para compensar esto. Pero al final, la barra de movimiento rápido (con una persiana enrollable extrema) se ve muy nítida:
      https://raw.githubusercontent.com/Hermann-SW/Raspberry_camera_gallery/master/res/mt.1007fps.10000lm.12us.anim.gif

  • tekkieneet dice:

    Probablemente sea 640 × 80: menos hojas de cálculo para cambiar menos líneas de escaneo y muchos menos datos para transmitir. 640 × 80 le ofrece un formato de imagen amplio. Probablemente sería útil grabar / analizar un proyectil de alta velocidad, o una vista de gran angular frente a su robot, etc.

    • sqelch dice:

      Ya veo, muy ordenado.

    • Greenaum dice:

      Probablemente no sea muy útil y puede tener la misma relación de aspecto, solo baja resolución y píxeles altos. Depende de las líneas que envíe. Y el formato de imagen podría cambiarse por lente, en teoría.

      El 640 probablemente esté fijo porque es el bloque de píxeles más pequeño que el chip de la cámara puede leer al mismo tiempo. De lo contrario, 320 × 160 sería mucho más sensato.

  • Paulvdh dice:

    Una búsqueda rápida del Chronos.
    Hace 1080p a 1000 fps
    También puede hacer 1920 × 8 a 100000 fps. que es aproximadamente la misma banda ancha.

    Obtener 1000 fps de una cámara EUR20 (o eso creo) es bastante impresionante.
    Y, por supuesto, no equivale a una cámara de 2500 dólares como la Chronos.
    Lo más probable es que me consiga algunas de estas divertidas cámaras y luego Chronos o equivalente.

    • Greenaum dice:

      Correcto, entonces dices que una cámara que cuesta 125 veces más puede funcionar mejor. Útil.

    • rasz_pl dice:

      también puedes ganar ~ $ 1K 1,136 × 384 @ 1000fps con Sony RX10 II / III

  • Alex dice:

    Anterior alta velocidad con cámara pi ...

    https://la-tecnologia.com/2019/08/10/660-fps-raspberry-pi-video-captures-the-moment-in-extreme-slo-mo/

  • Marat dice:

    ¿Por qué necesitamos 1000 fps cuando rpi no puede manejar opencv ni siquiera para 60 fps?

    • Gaurav Singh dice:

      Este proyecto apunta a una clase de solución completamente diferente.
      Una solución con FPGA difiere de Raspberry PI. El objetivo del proyecto era poder usar una cámara MIPI CSI-2 inicialmente con FPGA y luego implementar una solución inteligente en FPGA para hacer algo útil con ella.
      Como han señalado otros, tiene alguna aplicación en la visión robótica de forma rápida.

  • Greg dice:

    Pero sería terrible para la espectroscopia.

  • Dsiege dice:

    640 x 80? Quieres decir, como, 640 x 480
    ¿Y por qué diablos querrías 1000 FPS cuando el ojo ya no puede distinguir más de 30? Es un hermoso espectáculo en un videojuego que mira una crisis humana con 100 FPS, donde se vería igual si funcionara con 50, así que POR QUÉ ?

    • Gaurav Singh dice:

      En realidad, 640 × 80 @ 1000FPS, la aplicación de dicha cámara sería grabar un video lento, un escáner rápido, una visión robótica.

    • rasz_pl dice:

      ¿De qué diablos estás hablando? Un ojo no puede ver más allá de los 24 fps, por lo que Cinema y PAL usan ~ esta frecuencia. Un Comité del Sistema Nacional de Televisión te lavó el cerebro y su plan derrochador en refrigerios de 30 fotogramas. Todo el mundo sabe que esos 6 fotogramas adicionales se asignan para entregas subliminales.

  • Jorge resbaladizo dice:

    ¡Buen artículo! ¿Crees que sería posible usar 2 (o más) cámaras en la misma FPGA?
    Si de alguna manera la FPGA pudiera activarlos en secuencia, es posible que pueda duplicar la velocidad de fotogramas (virtual)

    • Hermann Stamm-Wilbrandt dice:

      Buena idea.
      Gaurav, ¿es posible un doble / triple / cuádruple de 1000 fps?
      ¿O hay una limitación en la banda ancha de un bus USB3?
      Si es así, ¿podría lograrse esto a través de múltiples conexiones USB?

      • Gaurav Singh dice:

        USB FX3 puede hacer 32 bits a 100Mhz, lo que se traduce en 400 MB de bits por segundo, un poco más que sincronizar un FX3 GPIF hasta alrededor de 112 MHz traerá 448 Mb-segundos. Esta banda ancha teóricamente se traduce en 640 × 80 hasta ~ 4000 FPS. FX3 es un chip bastante bueno que encontré que entrega más a menudo de lo que dice. Un controlador USB en FX3 puede realizar lo que permite USB 3.0, pero un puerto paralelo de 32 bits (GPIF) lo limita como se mencionó anteriormente a 32 bits a 100 MHz.
        Cypress ofrece Other FX3 como controlador CX3, CX3 es específicamente para la cámara MIPI CSI. CX3 puede activar la banda ancha USB 3.0 completa. Pero uno tiene que implementar un programa personalizado en el lado de la computadora para obtener datos visuales RAW, ya que CX3 no tiene lógica para hacer ningún Debayer o para conversión de UVC, RGB a YUV. (UVC no admite RAW ni RGB)

        Una idea con la cámara dual puede ser posible, el PLL incorporado en la cámara puede causar problemas y desviar los cuadros, pero teóricamente FPGA puede rastrear los cuadros y corregirlos si es necesario. Se necesitaría un FPGA un poco más grande, Lattice MachXO3 es un FPGA relativamente pequeño si uno está buscando recursos cruciales de alta velocidad. El diseño de múltiples cámaras LUT / Gate -wise se adaptará a MachXO3, pero debido a los recursos limitados del reloj, causará problemas para hacer cualquier cosa rápidamente.

        Ciertamente, es posible una gran cantidad de diseño USB, pero se necesitan muchas soluciones personalizadas tanto de hardware como de PC. Generalmente cuando un proyector excede lo que puede ofrecer USB, se pasa a PCIE

        El resultado más bajo para la optimización es el módulo de refromaterial de salida en FPGA. Si tuviera que hacer FIFO en reformador, podemos desmontar el reloj MIPI y la salida FPGA. que hacen posible operar un reloj MIPI más rápido que 200Mhz. Lo que finalmente hace posible obtener una velocidad de fotogramas aún más rápida, vi una frecuencia de fotogramas a 640 × 80 hasta 1500 FPS cuando operaba un reloj MIPI más rápido de 270 a 320 Mhz. El hardware en el estado actual puede evitar alcanzar una frecuencia MIPI alta. Es posible que necesite una placa FPGA personalizada con rutas CSI bien terminadas.

        Una segunda optimización volvería a estar en el mismo reformador pero un poco complicada. Almacene muchos más datos y utilice el bus FX3 de 32 bits al 100%. En teoría, uno puede usar algún otro controlador USB y obtener todo el ancho de banda que permite USB 3.0.

  • Tracy Bueller dice:

    "... a menudo queda habilidad sobre la mesa si realmente la necesitas".

    Literalmente, la razón exacta de los piratas informáticos. ¿Tienes un celular viejo que vas a tirar? Bueno, un poco ahora tengo una radio de banda base, y algunos TFT pequeños, y un puñado de sensores, botones y un pequeño paquete de energía, y así sucesivamente. Tengo un dron barato que tiene muchos sensores. que actualmente estoy transformando en un sensor ambiental de cámara. Cada MCU de 8 pines arrojada a la papelera es otra oportunidad desperdiciada. ¿Quieres frenar la marea de desechos electrónicos? Aprenda a sacar elementos de su objetivo de prisión y haga que hagan algo, ¡cualquier cosa nueva!

Victoria Prieto
Victoria Prieto

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *