v4.5.1

v4.5.1 añade sugerencias de dibujo de orientación/relación de aspecto de imagen, carga de imágenes directamente desde una ruta de archivo, un ioctl de campo de visión amplio del GC2145 y una nueva API de controlador de retroiluminación. También rehace el constructor Image(), las API de display y el análisis de argumentos de los módulos — lee los cambios incompatibles a continuación.

Aspectos destacados

  • Sugerencias de dibujodraw_image() obtuvo sugerencias de orientación (HMIRROR/VFLIP/TRANSPOSE, ROTATE_90/180/270) y de escalado de aspecto (SCALE_ASPECT_KEEP/EXPAND/IGNORE).

  • Carga de imágenes desde discodraw_image() / display.write() aceptan una cadena de ruta de archivo.

  • Control de retroiluminación — nuevas clases DACBacklight / PWMBacklight y un argumento de pantalla backlight=.

  • Incompatible: el constructor Image(), las API de display y el análisis de argumentos de los módulos cambiaron — consulta los cambios incompatibles.

Nuevas funciones

  • Sugerencias de orientación de draw_image()image.HMIRROR, image.VFLIP, image.TRANSPOSE, además de las convenientes image.ROTATE_90 / ROTATE_180 / ROTATE_270.

  • Sugerencias de aspecto de draw_image()image.SCALE_ASPECT_KEEP / SCALE_ASPECT_EXPAND / SCALE_ASPECT_IGNORE para ajustar / expandir / estirar.

  • Constantes de paletaimage.PALETTE_RAINBOW e image.PALETTE_IRONBOW (movidas al módulo image).

  • Campo de visión amplio — nuevos ioctls sensor.IOCTL_SET_FOV_WIDE / IOCTL_GET_FOV_WIDE (en el GC2145, hasta 5x de escalado del sensor).

  • Carga desde discodraw_image() y display.write() aceptan una cadena de ruta de archivo de imagen de origen, cargándola directamente desde el almacenamiento.

  • Controladores de retroiluminación — nuevas clases DACBacklight y PWMBacklight (importables desde display) y un argumento backlight= solo por palabra clave en los constructores de pantalla SPI/paralela.

Otros cambios y mejoras

  • El controlador de pantalla DSI ST7701 se trasladó a su propio módulo st7701.py (todavía importable mediante from display import *) y está congelado en Arduino Giga; el controlador IMU lsm9ds1 se congeló en el Arduino Nano 33 BLE Sense.

  • Las cámaras MT9V022 / MT9V034 (obturador global) ahora aplican corrección de ruido de fila para mejorar la calidad de imagen.

  • El volumen de almacenamiento masivo USB del i.MX RT ahora se etiqueta como un disco OpenMV.

Correcciones de errores

Cámara y sensores:

  • Se corrigió la detección de esquinas (find_keypoints() FAST/AGAST) en imágenes de más de 480 filas — el búfer por fila ahora se dimensiona según la altura de la imagen.

  • Se añadió compatibilidad con el pin FSYNC para snapshot() sincronizado con fotogramas en i.MX RT (OpenMV RT1060) y se corrigieron los pines SPI4 MOSI/MISO intercambiados en el RT1060.

Pantalla y vídeo:

  • Se corrigió el orden de los argumentos del constructor SPIDisplay (bgr, byte_swap, triple_buffer se aplicaban a los parámetros equivocados).

  • Se corrigió la corrupción de imagen del shield TV al dibujar una imagen con un rectángulo especificado y los límites de fotograma MJPEG incorrectos al grabar fotogramas escalados.

Redes:

  • El modo AP WiFi del WINC ya no impone la obsoleta restricción de solo WEP — los modos AP abierto y WPA funcionan con un manejo adecuado de PSK.

Hardware y compatibilidad de placas

  • OpenMV RT1060 — pin FSYNC y pines SPI4 corregidos.

  • Arduino GIGA — solución alternativa de fiabilidad QSPI; pantalla ST7701 congelada.

  • Arduino Nano 33 BLE Sense — controlador IMU lsm9ds1 congelado.

Cambios incompatibles en la API

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

Cada cambio está etiquetado con su impacto:

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

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

Los cambios se agrupan por impacto en ese orden. Si solo quieres portar tu código, ve directamente a la lista de verificación de migración al final. Cada hash de commit enlaza a su diff en GitHub.

Constructor Image() y API de display (minor)

El constructor image.Image se rehízo para usar argumentos por palabra clave (height, pixformat, buffer=, copy_to_fb=); ahora puede construir una imagen a partir de un bytearray/búfer existente, y se requiere un búfer para los formatos comprimidos. display.write() se rehízo: x_scale/y_scale ahora aceptan un float (relación de escala) o un int (tamaño objetivo en píxeles) y se eliminaron las palabras clave x_size/y_size separadas. El primer argumento posicional de WINC.connect() se renombró essidssid, y los resultados del escaneo WiFi del WINC cambiaron a (ssid_bytes, bssid_bytes, channel, rssi, security, N) (SSID/BSSID ahora son bytes; BSSID ya no es una cadena MAC formateada).

Commits: 6752c95ac, 161737092, 8178c237c, b6cdf8de1

Rango de retroiluminación, escalado y argumentos solo por palabra clave (behavior)

Display.backlight() ahora acepta una intensidad de 0–100 (0 = apagado, 100 = máximo) en lugar de 0–255, lanzando ValueError fuera de rango. Los valores enteros de x_scale/y_scale ahora se tratan como un factor de escala multiplicativo (igual que los floats) en lugar de una dimensión objetivo en píxeles — esto afecta a fir.snapshot()/draw_ir(), tof.snapshot()/ draw_depth(), display y el escalado de tv. El análisis de argumentos en los módulos sensor, fir, tof, tv, mjpeg, gif, imageio, tf y audio se unificó, haciendo que varias opciones anteriormente posicionales sean solo por palabra clave (los nombres, valores predeterminados y comportamiento permanecen por lo demás sin cambios).

Commits: 391ec443f, 8bd25d6cd, 477312656, 08bf62a32, a4c0f20bf, 9b411a66d, 3d679f5a6, d15fc6b8d, 555e67ecd

Lista de verificación de migración

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

  1. Actualizar la construcción de Image() a la nueva forma con palabras clave, dejar de usar x_size/y_size en display.write() y renombrar WINC.connect() essidssid (manejar las nuevas tuplas de escaneo basadas en bytes) (los cambios de constructor/display/WINC).

  2. Reescalar las llamadas a Display.backlight() a 0–100, volver a revisar cualquier uso de x_scale/y_scale con enteros y pasar las opciones de módulo anteriormente posicionales como palabras clave (los cambios de comportamiento).