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 moderna —
set_auto_gain()/set_auto_exposure()/set_auto_whitebal()ahora usan dB / microsegundos, con los correspondientesget_gain_db()/get_exposure_us()/get_rgb_gain_db().Correlación de fase —
find_displacement()reelaborado con rotación / escala yfind_rotscale()/linpolar()/logpolar().SSIM — similitud estructural
image.get_similarity().Búferes de fotogramas adicionales —
sensor.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 elz_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 clavegain_db_ceilingenset_auto_gain(), soporte dehmirror/vflippara el MT9V034, ysensor.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 adaptativosmean()/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_BSPpara 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 analizauart.inial arrancar para habilitar una UART de REPL.
Otros cambios y mejoras¶
get_regression()ganó las palabras clavearea_threshold/pixels_thresholdy 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 delogpolar/linpolary queilluminvar()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_FBensnapshot()(de modo quecopy_to_fba una resolución distinta, el redimensionado del FB y el pooling de flujo óptico vuelven a funcionar), el tiempo de espera degethostbynamedel WINC, el clear-status depydfuen 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).
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:
Portar
set_auto_gain()again_db=+get_gain_db()y manejarValueError(la reescritura de la ganancia automática).Portar
set_auto_exposure()aexposure_us=+get_exposure_us()(la reescritura de la exposición automática).Actualizar
find_displacement()al objeto de desplazamiento y renombrar las constantes de framesize de FFT (la renovación de find_displacement).Portar
set_auto_whitebal()argb_gain_db=+get_rgb_gain_db()(la reescritura del balance de blancos) y dejar de comprobar el retorno deset_hmirror()/set_vflip()(el cambio de mirror/flip).Pasar una ruta de firmware a las herramientas
fw_*del WINC (el cambio de las herramientas WINC).Pasar una
roide 28x28 afind_number()(el cambio de find_number) y ajustar el cálculo de ángulos de AprilTag por el signo invertido dez_rotation()(el cambio de z_rotation).
Todos los demás scripts se ejecutan sin cambios.