v4.5.3

v4.5.3 es una versión importante: enfoque automático para el OV5640, dibujo de líneas con suavizado de bordes (anti-aliasing), un decodificador JPEG por hardware integrado en la rama principal, importantes mejoras de capacidad en el i.MX RT (RT1060) y un amplio conjunto de correcciones de cámara/ISP. Se eliminaron varios métodos de imagen poco usados y cambiaron algunas APIs de ISP/pantalla; lee los cambios incompatibles a continuación.

Aspectos destacados

  • Enfoque automático del OV5640 — habilitado en OpenMV 4 / 4 Plus / RT1060 (sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)), con un ejemplo.

  • draw_line() con suavizado de bordes (anti-aliasing) y un decodificador JPEG por hardware del STM32 integrado en la rama principal (descompresión JPEG más rápida).

  • OpenMV RT1060 incorporó ulab, operaciones de ISP, set_framerate() / set_frame_callback(), un búfer de fotogramas (frame buffer) mucho más grande y el controlador CAN.

  • Incompatible: se eliminaron Image.div() / cartoon() / mul() y cambiaron algunas APIs de ISP/pantalla; consulta los cambios incompatibles.

Nuevas funciones

  • Enfoque automático del OV5640 — el firmware de enfoque automático está habilitado en OPENMV4, OPENMV4P y OPENMV RT1060; actívalo con sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS). Se añadió un nuevo ejemplo 07-Sensor-Control/autofocus.py.

  • Dibujo de líneas con suavizado de bordesdraw_line() incorporó suavizado de bordes (anti-aliasing).

  • Controladores de pantalla SPI personalizadosSPIDisplay ahora acepta una palabra clave controller= y expone un enganche bus_write para secuencias de inicialización/comandos personalizadas.

  • Mejora de Image.ccm() — ahora acepta matrices anidadas 3x3 / 4x3 / 3x4 / 4x4 y arrays de ulab (con una fila opcional de desplazamiento por canal); se añadió un ejemplo de corrección de color.

  • Captura JPEG en i.MX RT — captura sensor.JPEG en Arduino Portenta/Nicla Vision/Giga, además de set_framerate() y set_frame_callback() en el port mimxrt.

  • Validación de modelos TFLite — los modelos ahora incluyen un hash del orden de operadores y el tamaño del conjunto de operadores.

  • WiFi — se añadieron constantes de modo de seguridad CYW43; nuevos scripts de ejemplo de control de placa para i.MX RT (Pin/ADC/CAN/I2C/PWM/SPI/UART/…).

Otros cambios y mejoras

  • MicroPython actualizado a 1.22; CMSIS actualizado a 5.9.0.

  • Decodificador JPEG por hardware del STM32 integrado en la rama principal — descompresión JPEG más rápida en el códec del chip.

  • Se optimizaron Image.invert() / negate() y las operaciones binarias/matemáticas de imagen (intrínsecos de CMSIS).

  • Las bibliotecas rpc y vl53l1x se hicieron portables (usan machine / time en lugar de pyb), por lo que funcionan en ports que no son STM32.

  • memcpy del búfer de fotogramas acelerado por DMA en OpenMV H7 / H7 Plus / Pro / Pure Thermal y Arduino Giga / Nicla Vision / Portenta H7; el STM32 ahora explora los dispositivos I2C una vez por escaneo para un arranque más rápido.

Corrección de errores

Cámara y sensores:

  • Se corrigió el XCLK de la cámara del STM32 a un ciclo de trabajo real del 50% y un error cuando la frecuencia de reloj de la cámara se establece en cero; se corrigieron el recorte+transposición Bayer, el desplazamiento de color YUV422 y set_windowing() en el port mimxrt.

  • Se corrigieron la detección del ID del chip GC2145 y hmirror/vflip en montajes rotados; se corrigieron el PAJ6100 en el RT1062 y un desbordamiento de búfer SPI del PixArt PAJ7620/PAW3902.

Procesamiento de imágenes:

  • Se corrigieron el recorte de la roi en find_rects(), el truncamiento del desplazamiento fraccionario en morph(), los valores predeterminados de contraste/brillo de image.gamma(), los desplazamientos A/B de get_threshold() en RGB565 y la decodificación JPEG de dimensiones que no son múltiplo de 8.

Sistema y bibliotecas:

  • machine.LED.value() sin argumentos ahora devuelve el estado del LED en lugar de borrarlo; se corrigieron la desinicialización de SSEL del SPI en un bus compartido, machine.deepsleep() en el RT1062, un fallo de TF ante operadores faltantes y la activación automática de la NIC WINC1500/ninaw10 al hacer connect().

Hardware y compatibilidad de placas

  • OpenMV RT1060 — se habilitaron ulab y las operaciones de ISP, búfer de fotogramas más grande (10M→20M) / fb_alloc (2M→11M), se restauró el controlador CAN y más heap.

  • Arduino GIGA — compatibilidad con la cámara GC2145, con detección automática GC2145/OV5640 (comparten una dirección I2C).

  • i.MX RT — compatibilidad con la captura sensor.JPEG.

Cambios incompatibles en la API

Cambios incompatibles en la API visibles para el usuario entre v4.5.2 y v4.5.3. Alcance: módulos C de Python en modules/ y bibliotecas de Python en scripts/libraries/.

Cada cambio está etiquetado según su impacto:

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

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

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.

Métodos de imagen eliminados (menor)

Se eliminaron Image.div(), Image.cartoon() (y su ejemplo) e Image.mul().

Commits: 7c932602e, 055a468b8, 4fe7fb63b

API del módulo de pantalla (menor)

Se eliminó el respaldo heredado del nombre de módulo udisplay; el módulo se registra únicamente como display. Los métodos dsi_write() / dsi_read() exclusivos de DSI se reemplazaron por bus_write() / bus_read(), que ahora están disponibles en todos los controladores de pantalla.

Commits: 7df6694c3, 7d1f378a0

Cambios en la API de MQTT y tf.regression (menor)

Se rediseñó el MQTTClient de la biblioteca mqtt: port ahora es obligatorio, se añadieron las nuevas palabras clave de constructor ssl_params / callback y un argumento timeout en connect(), se eliminaron los antiguos valores predeterminados ssl= / port=0 y check_msg() ahora no es bloqueante. Se reescribió tf.regression() — su firma ahora es regression(model, array) y maneja modelos 1D/2D/3D y cuantizados (int8).

Commits: d12874c63, c5ec576c1

Cambios de comportamiento de ISP / sensor (comportamiento)

Se rediseñó Image.awb() — el modo mundo-gris (gray-world, predeterminado) frente al modo parche-blanco (white-patch, max=True) ahora es explícito, y el argumento max junto con los argumentos gamma / contrast / brightness de Image.gamma() ahora son exclusivos por palabra clave (las llamadas posicionales deben actualizarse). La transposición de imagen ahora está deshabilitada para YUV422 (antes producía una salida incorrecta) y se corrigió el desplazamiento de color YUV422 para que coincida con Bayer. La ruta JPEG del STM32 ahora lanza un error ante una discordancia de geometría JPEG en lugar de producir una imagen corrupta, y el modo AP de WiFi ahora aplica un modo de seguridad predeterminado en los ports STM32 e i.MX RT.

Commits: 36d5cecbd, 00500ccde, c1eeaefd6, 333fb2b5f, 55cab8733, c7d40f6af

Lista de verificación de migración

Para un porte limpio a v4.5.3, el trabajo habitual es:

  1. Dejar de usar Image.div() / cartoon() / mul() (los métodos eliminados).

  2. Importar el módulo de pantalla como display y cambiar dsi_write/ dsi_read por bus_write/bus_read (el cambio de la API de pantalla).

  3. Actualizar la construcción de MQTTClient (port es obligatorio; ssl_params/callback) y cualquier llamada a tf.regression() (los cambios en la API de las bibliotecas).

  4. Pasar max de awb() y gamma/contrast/ brightness de gamma() como argumentos por palabra clave, y volver a revisar las suposiciones sobre YUV422/transposición y la seguridad del modo AP (los cambios de ISP/sensor).