v4.6.0

v4.6.0 es una versión principal con nuevas funciones. Lo más destacado: el módulo de la cámara se renombró de sensor a csi (con un alias sensor retrocompatible), un nuevo módulo ml.postprocessing, compatibilidad con el sensor de eventos Prophesee GenX320, el PAG7936 y las cámaras térmicas FLIR Boson, un nuevo gestor de arranque (bootloader) DFU basado en TinyUSB, aceleración por GPU Nema y MicroPython 1.24. También cambia el rango de alpha del dibujo, así que lee los cambios incompatibles a continuación.

Aspectos destacados

  • sensor ahora también es csi — el módulo de la cámara se renombró a csi; sensor permanece como un alias retrocompatible (todavía no se requiere ningún cambio de código).

  • Nuevo módulo ml.postprocessingfomo_postprocess, yolo_v2_postprocess, yolo_v5_postprocess.

  • Nuevos sensores — cámara de eventos Prophesee GenX320, PAG7936 y FLIR Boson 320/640 térmica.

  • Nuevo gestor de arranque (bootloader) DFU — un gestor de arranque DFU estándar basado en TinyUSB reemplaza al antiguo gestor de arranque CDC en todas las placas.

  • GPU Nema — gráficos 2D/vectoriales acelerados en STM32.

  • MicroPython actualizado a 1.24.0.

  • Incompatible: el rango de alpha del dibujo cambió de 0–256 a 0–255 (consulta el cambio del rango alpha).

Nuevas funciones

  • ml.postprocessing — un nuevo módulo que decodifica la salida de los modelos: un decodificador FOMO (fomo_postprocess, find_blobs + NMS, threshold configurable) y yolo_v2_postprocess / yolo_v5_postprocess (con threshold, anchors, nms_threshold, nms_sigma).

  • Visualización de cámara de eventos — nuevos métodos Image.to_evt_dark() / Image.to_evt_light() y paletas de color PALETTE_EVT_DARK / PALETTE_EVT_LIGHT.

  • Visualización de profundidad — nuevo método Image.to_depth() y una paleta de color PALETTE_DEPTH (placas con ToF habilitado).

  • Introspección del sensor — nuevo ioctl IOCTL_GET_RGB_STATS que devuelve una tupla de estadísticas de canal (R, Gb, Gr, B).

  • Presets de bias del GenX320 — nuevo ioctl IOCTL_GENX320_SET_BIASES con los presets GENX320_BIASES_DEFAULT / LOW_LIGHT / ACTIVE_MARKER / LOW_NOISE / HIGH_SPEED.

  • omv.debug_mode() — una nueva función para consultar si la interfaz de depuración USB está activa.

  • GPU Nema — integración del driver NemaGFX/NemaVG del Cortex-M55 en STM32, con corte directo (cut-through) de GPU en sitio para draw_image.

  • PAG7936 — se añadió salida de barras de color, exposición automática / ganancia automática, modo de reposo y modo MIPI.

Otros cambios y mejoras

  • MicroPython actualizado a 1.24.0; ulab actualizado a 6.7.3 (añade keepdims).

  • Script de arranque común — STM32 / i.MX RT / RP2 ahora comparten un _boot.py que crea automáticamente el sistema de archivos de la memoria flash/SD con un main.py y un README.txt predeterminados y libera las variables globales temporales de inicio.

  • Bases para STM32N6 — compatibilidad básica con STM32N6, un driver XSPI, un driver MPU común y la firma de firmware/gestor de arranque (bootloader) en STM32.

  • VM con computed-goto — habilitada en STM32 y nRF para acelerar el intérprete.

Correcciones de errores

Cámara y sensores:

  • Se corrigió el cálculo de PCLK/exposición del OV5640 (dos carriles MIPI, tabla de divisores corregida).

  • La variante Bayer-CFA del MT9V0xx ahora acepta RGB565/BAYER/GRAYSCALE y produce datos Bayer en bruto correctos en lugar de generar un error.

  • Se habilitó la corrección de sombreado de lente del PAG7936 y se corrigió el desplazamiento de la imagen HD; set_framerate() ahora está limitado por resolución.

  • Se corrigió la captura térmica del FLIR Lepton en el i.MX RT1060 (CPOL/CPHA de VoSPI corregidos), y las capturas del Lepton ahora devuelven códigos de error específicos.

  • Se corrigió el redondeo de frecuencia del GenX320.

Procesamiento de imagen:

  • Se corrigió la corrupción de memoria en to_ndarray() con imágenes en escala de grises.

  • Se corrigió la predicción de límites del debayer en la conversión Bayer→RGB/escala de grises.

  • Se corrigió transpose de draw_image() en placas sin SDRAM (búfer fragmentado).

  • Se corrigió el manejo de argumentos booleanos en Image.binary() y el flag load_to_fb de ml.Model.

Sistema:

  • Se corrigió la configuración de pines solo-RX / solo-TX de SPI en STM32 e i.MX RT.

  • Se movieron los búferes DMA de Ethernet del Portenta H7 a SRAM3 para que Ethernet funcione.

  • Se corrigió un carácter perdido en la salida de texto del canal de depuración por USB; se redondearon hacia arriba los tamaños de asignación dinámica de ML para evitar búferes de modelo demasiado pequeños.

Hardware y compatibilidad de placas

  • Sensor de visión basado en eventos Prophesee GenX320 (STM32F7 + i.MX RT1060).

  • Sensor PAG7936 (con modo MIPI).

  • Cámaras térmicas FLIR Boson 320/640 (driver IDD 4).

  • Aceleración por GPU Nema en STM32.

  • Bases del gestor de arranque (bootloader)/XSPI para STM32N6.

  • VL53L5CX — se añadió compatibilidad con el pin de habilitación de alimentación.

Cambios incompatibles en la API

Rupturas de la API visibles para el usuario entre v4.5.9 y v4.6.0. Alcance: módulos C de Python en modules/ y bibliotecas de Python en scripts/libraries/.

Cada cambio está etiquetado según su impacto:

  • mayor — la mayoría de los scripts que lo usaban necesitan modificaciones.

  • menor — API limitada; solo afecta a los scripts que la usaban.

  • comportamiento — misma API, distintos resultados; vuelve a revisar los scripts ajustados.

  • herramientas — solo afecta al flasheo / herramientas de host / disponibilidad de placas.

Los cambios se agrupan por impacto en ese orden. Si solo quieres portar tu código, salta a la lista de verificación de migración al final. Cada hash de commit enlaza a su diff en GitHub. Nota: el cambio de nombre del módulo sensorcsi en esta versión no es incompatible — sensor sigue funcionando como alias.

El rango de alpha del dibujo ahora es 0–255 (mayor)

El argumento alpha de draw_image() y de cada superposición que lo acepta (FIR, ToF, pantalla, TV, MJPEG, tablas alpha) ahora usa un rango de 0–255 en lugar de 0–256. Los scripts que pasaban 256 para opacidad total, o que calculaban alpha contra 256, deben reescalarse a 0–255.

Commit: 1f87b5bb6

Constantes ioctl del FLIR Lepton renombradas (menor)

Tres constantes ioctl del Lepton se acortaron: IOCTL_LEPTON_SET_MEASUREMENT_MODEIOCTL_LEPTON_SET_MODE, IOCTL_LEPTON_SET_MEASUREMENT_RANGEIOCTL_LEPTON_SET_RANGE, IOCTL_LEPTON_GET_FPA_TEMPERATUREIOCTL_LEPTON_GET_FPA_TEMP. Los ejemplos incluidos se actualizaron.

Commit: 12582d54d

Cambios en la API de post-procesamiento de ML (menor)

ml.postprocessing es nuevo en esta versión y su API cambió durante ella: la palabra clave del constructor score_threshold de yolo_v2_postprocess se renombró a threshold, y los resultados de post-procesamiento vacíos ahora devuelven () en lugar de []. El modelo incluido yolov5_rgb_person se renombró a yolo_v5_224_nano. ml.apps.MicroSpeech ahora reenvía cualquier **kwargs arbitrario a audio.init() en lugar de un gain_db=24 fijo.

Commits: d67bd1ad7, 979b4e8ee, b89b815b2, 6671d9df5, 5c2f4388c

AGAST es el detector de esquinas predeterminado (comportamiento)

find_keypoints() ahora usa AGAST en lugar de FAST como su detector de esquinas predeterminado en todas las placas. Los conjuntos de keypoints (y, por tanto, las coincidencias de descriptores) difieren de las versiones anteriores — vuelve a revisar las canalizaciones de keypoints ajustadas. La transmisión del búfer de fotogramas (frame buffer) del IDE también está ahora limitada a 20 Hz para reducir la carga del USB.

Commits: da6bf6910, bc4e39246

Gestor de arranque (bootloader), placas y funciones eliminadas (herramientas)

El antiguo gestor de arranque CDC fue reemplazado por un nuevo gestor de arranque DFU estándar basado en TinyUSB en todas las placas — el mecanismo de actualización del firmware cambió; actualiza tu flujo de trabajo/herramientas de flasheo en consecuencia. Se eliminaron la placa OpenMV Pro, la compilación independiente de Raspberry Pi Pico y la función de IDE remoto por WiFi-debug (wifidbg).

Commits: a03fc90d8, c2e616aae, af3ea774b, f8bca9799, 59a38a0d3, 7edeb4fbe, d58d77fa2

Lista de verificación de migración

Para un porte limpio a v4.6.0, el trabajo típico es:

  1. Reescalar cada valor alpha de dibujo/superposición del rango 0–256 a 0–255 (el cambio del rango alpha).

  2. Renombrar cualquier constante ioctl del FLIR Lepton a sus formas acortadas (el renombrado de ioctl del Lepton).

  3. Si usaste los nuevos post-procesadores de ML, cambia score_threshold por threshold, gestiona un resultado vacío () y actualiza el nombre del modelo yolo_v5_224_nano (los cambios de ML).

  4. Vuelve a revisar las canalizaciones basadas en find_keypoints() por el cambio de detector AGAST (el cambio del detector de esquinas).

  5. Actualiza tu flujo de trabajo de flasheo de firmware para el nuevo gestor de arranque (bootloader) DFU (los cambios de gestor de arranque/placas).