13.3.1.1. La CLI openmv

Instalar el paquete añade un ejecutable openmv que abre un visor de pygame conectado a una cámara por USB. Sin argumentos más allá del puerto serie, ejecuta un pequeño script de prueba integrado, transmite de vuelta el búfer de fotogramas (frame buffer) resultante y lo muestra escalado y anotado con la velocidad de fotogramas actual:

openmv --port /dev/ttyACM0

La ruta del puerto depende de la plataforma anfitriona. En Linux, /dev/ttyACMx para USB CDC y /dev/ttyUSBx para un puente USB-a-UART. En macOS, /dev/tty.usbmodem... o /dev/cu.usbmodem.... En Windows, COMx.

El visor es la forma más rápida de confirmar que el paquete está instalado, que la cámara es accesible y que el protocolo funciona. También es un arnés de demostración útil durante el desarrollo de scripts: sustituye el script de prueba integrado por cualquier archivo MicroPython con --script y observa el resultado sin salir de la terminal.

Esc, Ctrl+C en la terminal o cerrar la ventana del visor salen de forma limpia.

13.3.1.1.1. Ejecutar un script personalizado

--script apunta la CLI a un archivo de código fuente MicroPython en disco. El archivo se sube a la cámara, se ejecuta en lugar del script de prueba integrado, y cualquier fotograma que produzca se transmite de vuelta al visor:

openmv --port /dev/ttyACM0 --script my_script.py

Todo lo que el script imprima en stdout se refleja en la terminal anfitriona en tiempo real. Pasa --quiet para suprimirlo, o --debug para un registro detallado del protocolo.

13.3.1.1.2. Previsualizar un canal personalizado

--channel NAME sondea un canal de datos personalizado registrado por el script en ejecución del lado de la cámara e imprime los primeros diez bytes de cada actualización en la terminal:

openmv --port /dev/ttyACM0 --channel ticks

El script de prueba integrado que se ejecuta cuando no se proporciona --script registra un canal ticks que devuelve el tiempo de actividad en milisegundos de la cámara, de modo que --channel ticks demuestra la superficie de canal bidireccional que Canales personalizados cubre en detalle, sin que tengas que escribir ningún código en el anfitrión ni en la cámara.

13.3.1.1.3. Modo de benchmark

--bench sustituye el script de prueba estándar por un benchmark de rendimiento de compresión JPEG:

openmv --port /dev/ttyACM0 --bench

La cámara captura un fotograma RGB565 QVGA, lo comprime a JPEG y luego vacía el mismo búfer comprimido en un bucle cerrado. El visor informa de la tasa bruta de datos USB en lugar de un fotograma decodificado en vivo, de modo que el número en pantalla es el límite superior que el enlace puede sostener hacia ese anfitrión. Útil para comparar cámaras o anfitriones sin la variabilidad de cambiar lo que realmente se captura.

13.3.1.1.4. Perfilado

La CLI puede superponer datos del perfilador en vivo sobre los fotogramas transmitidos. La superposición solo es útil cuando la cámara ejecuta una compilación de firmware con PROFILE_ENABLE=1 y el canal profile registrado; en el firmware de fábrica los controles de perfilado no tienen efecto.

  • --firmware PATH – carga el ELF del firmware que la cámara está ejecutando para que la superposición pueda resolver las direcciones de función de los registros del perfil en nombres legibles. Sin esto, la superposición muestra direcciones en bruto.

Tres atajos de teclado en el visor controlan el perfilador:

Tecla

Acción

P

Recorre la superposición del perfilador: desactivada, rendimiento, eventos.

M

Alterna el modo del perfilador entre inclusivo y exclusivo. El cronometraje inclusivo imputa el tiempo del invocado al invocador; el cronometraje exclusivo no.

R

Reinicia los contadores del perfilador.

13.3.1.1.5. Indicadores de ajuste del protocolo

Los indicadores siguientes reflejan los parámetros del constructor de openmv.Camera. Los valores por defecto funcionan en todas las cámaras distribuidas; anúlalos solo al depurar una compilación de firmware personalizada o al simular condiciones de enlace adversas.

  • --baudrate N – por defecto 921600 (el valor mágico que conmuta el USB al protocolo OpenMV). Anúlalo solo en enlaces UART.

  • --timeout SEC – tiempo de espera por operación en segundos (por defecto 1.0).

  • --max-retry N – reintentos antes de declarar el enlace roto (por defecto 3).

  • --max-payload N – tamaño máximo de carga útil en bytes (por defecto 4096). La cámara negocia a la baja si no puede manejar tanto.

  • --crc BOOL – habilita la validación CRC en cada paquete (por defecto true).

  • --seq BOOL – habilita la validación de número de secuencia (por defecto true).

  • --ack BOOL – habilita el acuse de recibo por paquete (por defecto true).

  • --events BOOL – habilita las notificaciones de eventos desde la cámara (por defecto true).

  • --drop-rate FLOAT – tasa de simulación de descarte de paquetes en [0.0, 1.0] (por defecto 0.0). Solo para pruebas.

Una perilla de ajuste específica de la CLI:

  • --poll MS – tasa de sondeo del bucle principal del visor, en milisegundos (por defecto 4).

13.3.1.1.6. Indicadores diversos

Dos indicadores ajustan cómo el visor presenta el flujo sin cambiar el comportamiento del lado de la cámara:

  • --scale N – factor de zoom de visualización (por defecto 4). Útil cuando los fotogramas QVGA son demasiado pequeños para leerse en una pantalla 4K.

  • --raw – solicita que la cámara envíe los búferes de píxeles sin comprimir en lugar de comprimidos en JPEG. Útil en cámaras sin soporte de JPEG por hardware; Transmisión de fotogramas cubre las contrapartidas.

13.3.1.1.7. Qué está haciendo el visor

La CLI es en sí misma un programa de openmv.Camera. Se conecta, llama a stop() para borrar cualquier script en ejecución, sube el script con exec(), habilita la transmisión con streaming(), y luego entra en bucle llamando a read_frame() (para actualizar la pantalla), read_stdout() (para reflejar las impresiones del script) y read_status() (para vigilar la actividad de todos los demás canales registrados). El código fuente está en cli.py y es una referencia funcional de una aplicación que controla una cámara de extremo a extremo.