v2.7.0

v2.7.0 moderniza la API de ganancia automática / exposición automática / balance de blancos del módulo sensor a unidades físicas (dB / microsegundos), renueva la correlación de fase find_displacement() (añadiendo rotación/escala) y añade get_similarity() (SSIM), chrominvar() / illuminvar(), búferes de fotogramas adicionales y una biblioteca MQTT. Es una versión con muchos cambios incompatibles — lee los cambios incompatibles a continuación.

Destacados

  • API de sensor modernaset_auto_gain() / set_auto_exposure() / set_auto_whitebal() ahora usan dB / microsegundos, con los correspondientes get_gain_db() / get_exposure_us() / get_rgb_gain_db().

  • Correlación de fasefind_displacement() reelaborado con rotación / escala y find_rotscale() / linpolar() / logpolar().

  • SSIM — similitud estructural image.get_similarity().

  • Búferes de fotogramas adicionalessensor.alloc_extra_fb() / dealloc_extra_fb().

  • MQTT — una nueva biblioteca MQTT.

  • Incompatible: la API de ganancia/exposición/balance de blancos del sensor, find_displacement() / los framesizes de FFT, find_number(), las herramientas de firmware WINC y el z_rotation() de AprilTag cambiaron todos — consulta los cambios incompatibles.

Nuevas funciones

  • Sensor — se añadieron sensor.get_gain_db(), sensor.get_exposure_us(), sensor.get_rgb_gain_db(), una palabra clave gain_db_ceiling en set_auto_gain(), soporte de hmirror / vflip para el MT9V034, y sensor.alloc_extra_fb() / sensor.dealloc_extra_fb() para búferes de fotogramas adicionales en RAM.

  • Image — se añadieron remove_shadows(), min() / max() (diferenciación de fotogramas), get_similarity() (SSIM) con un ejemplo de similitud estructural, chrominvar() / illuminvar(), find_rotscale(), linpolar() / logpolar(), las palabras clave threshold / offset / invert en los filtros adaptativos mean() / mode() / median() / midpoint(), len() / indexación en el objeto keypoints, y un descriptor .match() en el objeto de coincidencia de keypoints.

  • Bibliotecas / red — se añadió una biblioteca MQTT (con un ejemplo de MQTT por WiFi) y un modo network.WINC.MODE_BSP para programar el firmware WINC a través de la UART de depuración.

  • Ejemplos — se añadieron los scripts de ejemplo de bajo consumo deep_sleep.py / stop_mode.py, de flujo óptico avanzado y polar lineal/logarítmico; el firmware ahora analiza uart.ini al arrancar para habilitar una UART de REPL.

Otros cambios y mejoras

  • get_regression() ganó las palabras clave area_threshold / pixels_threshold y una regresión robusta más rápida (para seguimiento de líneas / carreras); get_pixel() ahora admite imágenes Bayer; se añadieron los cimientos para STM32H7 (cabeceras CMSIS / HAL / gestor de arranque (bootloader) — la placa H7 todavía no es utilizable); se actualizó el firmware WINC1500 incluido (19.4.4 / 19.5.2).

Correcciones de errores

Procesamiento de imágenes:

  • Se corrigió el error de fuera de límites de la búsqueda en diamante de find_template(), la corrupción de logpolar / linpolar y que illuminvar() se descontrolara con valores de color cercanos a cero.

Sensor y sistema:

  • Se corrigieron errores del control automático de ganancia, se restauró el tamaño de MAIN_FB en snapshot() (de modo que copy_to_fb a una resolución distinta, el redimensionado del FB y el pooling de flujo óptico vuelven a funcionar), el tiempo de espera de gethostbyname del WINC, el clear-status de pydfu en el gestor de arranque (bootloader) del H7, y los modos de bajo consumo stop/standby.

Hardware y soporte de placas

  • STM32H7 — cimientos (CMSIS / HAL / gestor de arranque (bootloader)); la placa OpenMV H7 todavía no es utilizable en esta versión.

  • WINC1500 — firmware incluido actualizado.

Cambios incompatibles en la API

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

Cada cambio está etiquetado según su impacto:

  • major — afecta a la mayoría de los scripts que usaban la función; tendrás que portar el código.

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

  • behavior — misma API, resultados distintos; revisa de nuevo los scripts ajustados.

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

sensor.set_auto_gain() reelaborado a dB (major)

sensor.set_auto_gain() ya no acepta la palabra clave entera value= ni devuelve True / False. Usa sensor.set_auto_gain(False, gain_db=...) (un valor float en dB), léelo de vuelta con el nuevo sensor.get_gain_db(), y envuelve la llamada en try / except ya que ahora el fallo lanza ValueError.

Commits: b906c5f19

sensor.set_auto_exposure() reelaborado a microsegundos (major)

sensor.set_auto_exposure() ya no acepta la palabra clave entera value= ni devuelve True / False. Usa sensor.set_auto_exposure(False, exposure_us=...), léelo de vuelta con el nuevo sensor.get_exposure_us(), y maneja el ValueError que se lanza en caso de fallo.

Commits: 7be0a7a18

find_displacement() / los framesizes de FFT renovados (major)

Se renovó la correlación de fase. image.find_displacement() ahora devuelve un objeto de desplazamiento (con x_translation() / y_translation() — antes x_offset / y_offset — más rotation() / scale() y las nuevas palabras clave logpolar / fix_rotation_scale); se eliminó el objeto rot-scale independiente y se añadió find_rotscale(). Las constantes de framesize de FFT se renombraron/eliminaron: sensor.B40x30 se eliminó por completo, y sensor.B64x32 / B64x64 se renombraron a mayúsculas sensor.B64X32 / B64X64 (con las nuevas B128X64 / B128X128).

Commits: c78f91b42, 213396d09

sensor.set_auto_whitebal() reelaborado a dB (minor)

sensor.set_auto_whitebal() reemplazó su palabra clave entera value=[r, g, b] por rgb_gain_db=[r, g, b] (float en dB) y ahora devuelve None (lanzando ValueError en caso de fallo) en lugar de True / False. Usa el nuevo sensor.get_rgb_gain_db() para leer de vuelta las ganancias.

Commits: 30ecbdc4f

set_hmirror() / set_vflip() devuelven None (minor)

sensor.set_hmirror() y sensor.set_vflip() ahora devuelven None y lanzan ValueError en caso de fallo en lugar de devolver un estado True / False. Elimina cualquier código que se ramifique según su valor de retorno.

Commits: aeb023804

Las herramientas de firmware WINC requieren una ruta de archivo (minor)

Las herramientas de firmware de network.WINC cambiaron: wlan.fw_dump() / wlan.fw_update() ahora reciben un argumento obligatorio de ruta del archivo de firmware y el WINC se abre en un modo de programación (network.WINC(mode=...)). Actualiza las llamadas sin argumentos para que pasen una ruta (p. ej. wlan.fw_update("/winc_19_5_2.bin")).

Commits: fcc3b0b9c

image.find_number() requiere una ROI de 28x28 (behavior)

image.find_number() (LeNet) ahora requiere una ROI de exactamente 28x28 que quepa dentro de la imagen y, de lo contrario, lanza un error (en lugar de ejecutarse sobre una ROI arbitraria/de imagen completa). Pasa una roi=(x, y, 28, 28) explícita.

Commits: 4d09a13f3

El signo de z_rotation() de AprilTag invertido (behavior)

El z_rotation() de AprilTag (y el rotation() relacionado) ahora usa una convención de coordenadas dextrógira, por lo que el ángulo devuelto está negado respecto a las versiones anteriores. Los scripts que dependan del signo antiguo deben invertir el valor o ajustar su cálculo de ángulos.

Commits: 7673aaf74

Lista de comprobación de migración

Para un port limpio a la v2.7.0 el trabajo habitual es:

  1. Portar set_auto_gain() a gain_db= + get_gain_db() y manejar ValueError (la reescritura de la ganancia automática).

  2. Portar set_auto_exposure() a exposure_us= + get_exposure_us() (la reescritura de la exposición automática).

  3. Actualizar find_displacement() al objeto de desplazamiento y renombrar las constantes de framesize de FFT (la renovación de find_displacement).

  4. Portar set_auto_whitebal() a rgb_gain_db= + get_rgb_gain_db() (la reescritura del balance de blancos) y dejar de comprobar el retorno de set_hmirror() / set_vflip() (el cambio de mirror/flip).

  5. Pasar una ruta de firmware a las herramientas fw_* del WINC (el cambio de las herramientas WINC).

  6. Pasar una roi de 28x28 a find_number() (el cambio de find_number) y ajustar el cálculo de ángulos de AprilTag por el signo invertido de z_rotation() (el cambio de z_rotation).

Todos los demás scripts se ejecutan sin cambios.