v4.8.0¶
v4.8.0 es una versión importante con nuevas funciones. Lo más destacado: un nuevo módulo de cámara csi basado en clases con compatibilidad para múltiples cámaras, la placa OpenMV N6 (STM32N6) con una NPU Neural-ART, un backend de inferencia por NPU, el modo de eventos RAW de la cámara de eventos GenX320, un nuevo módulo crc, una biblioteca de posprocesamiento de ML reorganizada y MicroPython 1.26. También elimina algunas API heredadas — el módulo buzzer y el control de la FLIR Lepton del módulo fir — así que lee los cambios incompatibles más abajo.
Aspectos destacados¶
Nuevo módulo de cámara
csi. Una APIcsi.CSIbasada en clases con compatibilidad para múltiples cámaras simultáneas, presentada junto al módulo heredadosensor.OpenMV N6. La placa STM32N6, con una NPU Neural-ART, triple búfer, Soft-CSI y un módulo ToF.
Inferencia por NPU. Un backend ST Neural-ART (STAI) para la inferencia de modelos acelerada por hardware.
Modo de eventos GenX320. Salida de eventos RAW además de
draw_event_histogram()para la renderización de cámaras de eventos.Posprocesamiento de ML reorganizado — subpaquetes por proveedor (
ml.postprocessing.ultralytics,mediapipe,edgeimpulse,darknet) con nuevos detectores BlazeFace / BlazePalm / de puntos de referencia de manos y rostros.Nuevo módulo
crc** — CRC-16 / CRC-32 acelerados por hardware.MicroPython actualizado a 1.26.0.
Incompatible: se eliminaron el módulo
buzzery el control de la Lepton del módulofir(la Lepton ahora es una cámara normal). Consulta el cambio de fir/Lepton y la eliminación del buzzer.
Nuevas funciones¶
El nuevo módulo de cámara
csi** — un objetocsi.CSIbasado en clases con múltiples cámaras simultáneas (hasta tres en la N6), captura no bloqueante, tamaños de fotograma(w, h)personalizados y unprint()/ repr informativo. Se presenta junto al módulo heredadosensor(no es un reemplazo directo).crc—crc.crc16()ycrc.crc32(), acelerados por hardware con una alternativa por software, en la OpenMV N6 y la AE3.image.Image.draw_image()incorporó una palabra clavetransform=(una matrizndarrayde flotantes 2D para deformaciones afines/de perspectiva, acelerada por GPU en STM32 y Alif); la misma transformación está disponible en la conversión de imágenes.draw_event_histogram()— renderiza histogramas de cámaras de eventos.Modo de eventos RAW de GenX320 —
csi.IOCTL_GENX320_SET_MODEconcsi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT,csi.IOCTL_GENX320_READ_EVENTS,csi.IOCTL_GENX320_CALIBRATE, constantes de tipo de evento y nuevos scripts de ejemplo.ML — un backend de inferencia por NPU ST Neural-ART (STAI);
ml.Modelincorporó una palabra clavepostprocess=(el posprocesador ahora se ejecuta automáticamente dentro depredict()incluso sin una función de retorno (callback));ml.postprocessingse reorganizó en subpaquetes por proveedor —ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo) yml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — los antiguos nombres en snake_case permanecen como alias; se añadieronml.utils.draw_keypoints()yml.utils.draw_skeleton(); los modelos ROMFS incluidos crecieron (BlazeFace, YOLO-LC, YOLOv8n, puntos de referencia de palmas/manos/rostros).audio— entrada de micrófono digital MDF en la STM32N6.Pantalla — un controlador OLED SSD1351 y un ejemplo; los controladores
SPIDisplaypueden anular sus comandos de inicialización; el constructor de la pantalla SPI incorporó las palabras clavehmirror/vflip.Perfilador en el dispositivo — contadores de ciclos/eventos SysTick + PMU Armv8.1-M con instrumentación a nivel de función, legibles a través del enlace de depuración (
pyopenmvincorporó compatibilidad con perfilado y símbolos ELF).Nueva compatibilidad de sensores — PixArt PS5520; FLIR BOSON en la OpenMV H7 Plus; detección automática del GenX320.
Otros cambios y mejoras¶
MicroPython actualizado a 1.26.0.
Arranque de la cámara — el reloj del sensor se desacopló del estado del CSI, la detección de la cámara durante el arranque es más rápida (primero se prueba la configuración más común) y se corrigió el reloj predeterminado del OV7725 de la OpenMV 3.
Calidad de imagen — la corrección gamma del ISP por software (Alif y STM32) y la corrección de píxeles defectuosos (STM32) están activadas de forma predeterminada; los sensores PAG7936 y PS5520 incorporaron controles de balance de blancos automático.
Rendimiento —
image.Image.to_ndarray()se acelera con SIMD Helium y el posprocesador FOMO se vectorizó con ulab.Controlador de la FLIR Lepton reescrito para recibir fotogramas de forma asíncrona en segundo plano — la rotación/
transposeahora funciona, el dibujo escala de forma bilineal y el reinicio es más rápido.Rendimiento de captura — el CSI de la i.MX RT1062 ahora usa descarga completa por DMA, y la STM32 N6 tiene un
draw_image()acelerado por GPU de hardware.
Correcciones de errores¶
Cámara y sensores:
Se corrigieron los modos RGB565 / GRAYSCALE / BAYER / YUV422 en los sensores STM32, el PAJ6100 en la OpenMV H7 / H7 Plus, el RGB565 QVGA de la OpenMV 2 y la configuración mono / RGB-YUV del CSI de la N6; la cámara de prueba por software ahora se reinicia de forma determinista.
El balance de blancos automático ya no vuelve verde la imagen con tasas de fotogramas bajas o variables (un promedio móvil de 250 ms reemplaza la muestra cada 100 fotogramas), y se corrigió el parpadeo de luminancia del PS5520.
Procesamiento de imágenes:
Se corrigió un fallo de renderización al dibujar líneas;
image.Image.flush()ahora vacía el búfer JPEG de la imagen sobre la que se invocó;Normalizationahora aplica media/desviación estándar a entradas flotantes; se corrigió la asignación de imágenes desde archivo.
Captura de cámara:
Se corrigió una corrupción grave de imagen en transferencias que no son JPEG (la interrupción de fotograma ahora se habilita solo en modo JPEG), la compatibilidad con el modo 3 de JPEG y los bloqueos por tamaño de línea de DMA y búferes pequeños en STM32; la sincronización VOSPI / Lepton es más fiable, especialmente en la N6.
Varios:
omv.board_id()devuelve el UID correcto en la RT1060;YoloV2ya no falla cuando se construye sin anclas explícitas.
Hardware y compatibilidad de placas¶
OpenMV N6 — STM32N6 con una NPU Neural-ART, triple búfer, salida SPI LCD/TV, Soft-CSI, el módulo
tofy modelos ROMFS incluidos.Arduino GIGA — salida de pantalla MIPI DSI.
Nuevos sensores — PixArt PS5520; FLIR BOSON en la OpenMV H7 Plus; detección automática del GenX320.
OpenMV Pure Thermal — la FLIR Lepton ahora es un sensor de cámara normal (secundario).
Alif AE3 — corrección gamma del ISP por software, el módulo
crcy correcciones de SPI.
Cambios incompatibles en la API¶
Cambios incompatibles en la API visibles para el usuario entre v4.7.0 y v4.8.0. Alcance: módulos C de Python en modules/ y bibliotecas de Python en scripts/libraries/.
Cada cambio está etiquetado con 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, resultados distintos; vuelve a revisar los scripts ajustados.
herramientas — solo afecta a las herramientas del host / la compilación desde el código fuente.
Los cambios se agrupan por impacto en ese orden — primero mayor, luego menor, comportamiento y herramientas. Si solo quieres portar tu código, salta a la lista de verificación de migración al final para obtener una lista de tareas condensada. Cada hash de commit enlaza con su diff en GitHub.
La FLIR Lepton se movió fuera del módulo fir (mayor)¶
La FLIR Lepton ahora se controla como un sensor de cámara normal en lugar de a través del módulo fir. El control de la Lepton se eliminó de fir: el tipo FIR_LEPTON y los métodos radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() y trigger_ffc() han desaparecido. Captura la Lepton como cualquier otra cámara (aparece como un sensor secundario en la OpenMV Pure Thermal); el ejemplo de la Pure Thermal se reescribió con la nueva API. Los sensores fir que no son Lepton (Grid-EYE, MLX, AMG8833) no cambian.
Módulo buzzer eliminado (menor)¶
El módulo buzzer se eliminó de los puertos STM32 e i.MX RT. Controla el zumbador con machine.PWM en su lugar; se añadió un ejemplo de zumbador de la Pure Thermal usando PWM.
omv.disable_fb() eliminado (menor)¶
La función omv.disable_fb() se eliminó; la transmisión del búfer de fotogramas (frame buffer) ahora se controla a través de la API de la cámara. También se eliminaron los scripts de escritorio RPC heredados que dependían de ella.
csi es nuevo — su API aún no está congelada (menor)¶
El módulo csi se introduce en v4.8.0 y su API evolucionó durante la versión: csi.fb() se eliminó, y csi.CSI.snapshot() (image=...) ahora requiere una imagen mutable y dibuja/escala el fotograma capturado en ella en lugar de hacer una copia profunda en bruto. Quienes adopten pronto el nuevo módulo deberían volver a probarlo; la API heredada sensor no se ve afectada.
Modo de transmisión de image.ImageIO y close() (menor)¶
image.ImageIO — el argumento mode ahora solo acepta minúsculas 'r' / 'w' (las mayúsculas se rechazan con un mensaje de error actualizado), y abrir con 'w' siempre trunca/recrea el archivo en lugar de conservar una transmisión existente. ImageIO.close() ahora es idempotente (cerrar una transmisión ya cerrada ya no genera una excepción) y devuelve None en lugar del objeto de transmisión.
Valor de retorno de BlazeFace / BlazePalm (menor)¶
Los posprocesadores BlazeFace y BlazePalm (nuevos en esta versión) ahora devuelven una única lista de cuadros delimitadores en lugar de la lista completa por clase — quienes la invocan indexan el resultado directamente en lugar de usar [0].
Commit: 75e16b573
La función de retorno (callback) del posprocesador de ML recibe tensores en bruto (comportamiento)¶
Una función de retorno (callback) de posprocesamiento de predict() de ml.Model ahora recibe las referencias de los tensores de salida en bruto (cuantizados) en lugar de ndarrays de flotantes preconvertidos — esto evita el agotamiento de memoria en modelos grandes. Si no se proporciona ninguna función de retorno (callback), aún se devuelve el ndarray de flotantes. Las funciones de retorno personalizadas deben descuantizar los tensores ellas mismas (los posprocesadores integrados ya lo hacen).
Commit: 84e6ee650
El reloj de la cámara se desacopló del estado del CSI (comportamiento)¶
El reloj del sensor ahora es independiente del estado del CSI. set_clock / set_frequency solo reconfigura el reloj cuando la frecuencia solicitada difiere en más de una tolerancia, y get_clk_frequency recibe un booleano para devolver la frecuencia exacta (en lugar de la nominal). El reloj predeterminado es de 24 MHz en la OpenMV N6 y la AE3, por lo que no se necesita ningún set_clock() explícito en el arranque. Los scripts que alternaban el reloj para capturas sensibles al tiempo deberían volver a revisar sus suposiciones.
Commits: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca
Protocolo de depuración USB y objetivos de firmware (herramientas)¶
Nada de esto afecta a los scripts de MicroPython. Se eliminaron comandos USBDBG obsoletos (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) y los comandos no compatibles de IDE más antiguos ahora se descartan en lugar de hacer fallar las placas TinyUSB al conectarse; se eliminó el objetivo de firmware UVC heredado de STM32. Las herramientas del host antiguas deberían actualizarse; consulta el historial del repositorio de firmware para más detalles.
Lista de verificación de migración¶
Para un porte limpio a v4.8.0 el trabajo habitual es:
Si usaste la FLIR Lepton a través de
fir, cambia a capturarla como un sensor de cámara (el cambio de fir/Lepton).Reemplaza cualquier uso de
buzzerpormachine.PWM(la eliminación del buzzer).Elimina las llamadas a
omv.disable_fb()(la eliminación de omv.disable_fb()).Para
image.ImageIO: usa minúsculas'r'/'w'y espera que'w'trunque (el cambio de ImageIO).Para las funciones de retorno (callbacks) de posprocesamiento de ML personalizadas: descuantiza tú mismo las referencias de los tensores en bruto, o confía en la ruta de flotantes predeterminada (el cambio de la función de retorno).
Vuelve a revisar cualquier script que controlara el reloj del sensor para capturas sensibles al tiempo (el cambio de reloj).