v4.5.6¶
v4.5.6 es la gran versión de aprendizaje automático. El módulo C tf de TensorFlow fue reemplazado por un nuevo paquete ml agnóstico al motor y respaldado por TensorFlow Lite Micro (TFLM), la conversión de imagen→tensor se trasladó a image.to_ndarray() y las placas de doble núcleo pasaron a Open-AMP. Hay varios cambios incompatibles — léelos a continuación antes de actualizar tus scripts de ML.
Aspectos destacados¶
Nuevo paquete
ml— el antiguo módulotfse reescribió como un paquetemlagnóstico al motor (ml.Model,ml.preprocessing,ml.utils,ml.apps);tfse mantiene como alias.Backend TFLM — el obsoleto
libtffue reemplazado por TensorFlow Lite Micro basado en upstream: inferencia ~20% más rápida y bibliotecas más pequeñas.Open-AMP de doble núcleo — GIGA y Portenta H7 ahora usan Open-AMP/RPMsg para la comunicación entre núcleos M7/M4 (se eliminó el antiguo mecanismo CM4).
Bluetooth integrado — firmware Bluetooth CYW43 habilitado en Nicla Vision, Portenta H7 y GIGA.
MicroPython 1.23.0, ulab 6.5.2 (con soporte de ndarray de 4 dimensiones).
Incompatible: la API de ML cambió sustancialmente y las cascadas de Haar están deshabilitadas por defecto en la mayoría de las placas — consulta los cambios incompatibles.
Nuevas características¶
Paquete
ml—ml.Modelconpredict()(roi,callback, lista de múltiples entradas), atributos de forma/dtype/escala/punto-cero por tensor,ml.preprocessing.Normalization,ml.utils(NMS) yml.apps(un detector de palabras claveMicroSpeechen Python puro conlisten()y transmisión no bloqueantetimeout=-1, además dedraw_predictions()).Sistema de modelos integrados — los modelos listados en
models/index.txtse incrustan condicionalmente según la placa (FOMO en todas las placas de ML, modelos de audio en placas con micrófonos).image.to_ndarray(dtype, buffer=...)— convierte una imagen en un ndarray de ulab (opcionalmente in situ).Image()a partir de arrays sin procesar — los nuevos argumentos por palabra claveshape=,strides=,scale=construyen imágenes en escala de grises/RGB565 a partir de listas de píxeles sin procesar.draw_circle()con suavizado de bordes.Módulo
sslcongelado en el firmware de GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 y Pico.Audio —
audio.init()ganó un argumentosamples=(muestras PDM por canal);gain_dbahora se aplica en micrófonos DFSDM (p. ej. Nicla Vision).Protocolo de depuración — un nuevo comando
GET_STATEdevuelve las banderas de ejecución/texto/JPEG, la geometría del fotograma y el texto en un único paquete, reduciendo los viajes de ida y vuelta al host.Ejemplo vuart de Open-AMP para la comunicación entre núcleos.
Otros cambios y mejoras¶
MicroPython actualizado a 1.23.0; ulab a 6.5.2 con soporte de ndarray de 4 dimensiones.
Inferencia más rápida — el backend de ML mantiene estado/memoria persistente entre invocaciones (~20% más rápido, admite modelos de tipo LSTM).
get_similarity()se reimplementó sobre el backenddraw_image(mayor soporte de formatos/operaciones).morph()y la familia de filtrosmean()pasaron al análisis de argumentos por palabra clave;mask=ahora acepta una imagen mutable.Distribución de memoria rediseñada — regiones DMA alineadas a potencias de 2, bloques de GC reordenables, múltiples montículos; menos fragmentación temprana del montículo en placas con poca RAM; RT1060 gana montículo de GC adicional.
El WiFi (CYW43) ahora se desinicializa en el reinicio por software; la pantalla SPI-TV vuelca de la caché solo la región del framebuffer para actualizaciones más fluidas.
Correcciones de errores¶
Cámara y sensores:
Se corrigió una invalidación accidental de la caché de la CPU en la ruta del framebuffer/sensor en STM32 e i.MX RT, que podía corromper los datos de la imagen.
Se corrigieron las lecturas térmicas I2C de MLX90640/MLX90641 en placas i.MX RT (las transferencias grandes ahora se fragmentan).
Aprendizaje automático:
Se corrigió el manejo de
load_to_fbdeml.Model, el dimensionamiento delbytearrayde entrada, las comprobaciones dendimdel ndarray y la validación de formato/forma de imagen deNormalization.
Imagen / sistema:
Se añadió la constante de pista de dibujo
image.BLACK_BACKGROUNDque faltaba y una comprobación de cordura de la longitud del búfer de imagen/tensor.Se corrigieron los punteros raíz del GC de FIR y audio que podían permitir que el recolector liberara búferes en uso.
El ejemplo de Servo Shield ahora usa
SoftI2Cpara que funcione en las placas OpenMV RT.
Hardware y soporte de placas¶
Arduino GIGA — soporte de sensores HM01B0 / HM0360; doble núcleo Open-AMP.
Bluetooth — firmware BT CYW43 en Nicla Vision, Portenta H7 y GIGA.
Portenta H7 — RPMsg M7/M4 de Open-AMP.
OpenMV RT1060 — bloques adicionales de montículo de GC (más memoria para Python).
Cambios incompatibles en la API¶
Cambios incompatibles en la API visibles para el usuario entre v4.5.5 y v4.5.6. 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 reducida; solo afecta a los scripts que la usaban.
comportamiento — misma API, resultados diferentes; vuelve a comprobar los scripts ajustados.
herramientas — afecta a los mecanismos de doble núcleo / placa, no a la API de Python.
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.
Módulo tf reemplazado por el paquete ml (mayor)¶
El módulo C tf de TensorFlow se reescribió como un paquete ml agnóstico al motor (tf se mantiene como alias retrocompatible, pero el código nuevo debería usar ml). Se eliminaron las funciones a nivel de módulo tf.load, tf.load_builtin_model y los métodos detect()/segment()/de clasificación — construye un ml.Model y llama a predict(). ml.Model(path) ahora devuelve solo el modelo (no una tupla (labels, model)); las etiquetas son un atributo model.labels. predict() ahora devuelve ndarrays de ulab (no tuplas de float), admite modelos de múltiples entradas (pasa una lista) y NMS se trasladó a ml.utils; la normalización de entrada se trasladó a ml.preprocessing.Normalization. El antiguo ml.py es ahora ml.apps.
Commits: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837
image.unpack() eliminado — usa to_ndarray() (mayor)¶
El efímero image.unpack() fue eliminado; convierte una imagen en un tensor con image.to_ndarray(dtype, buffer=...) en su lugar, y aplica la normalización de escala/media/desviación estándar con ml.preprocessing.Normalization en vez de la antigua ruta integrada de escalado de imagen.
Argumento scale de array sin procesar de Image() (menor)¶
Al construir una Image a partir de un array de píxeles sin procesar, el argumento scale ahora toma un rango (min, max) en lugar de (scale, add).
Commit: 7b79fb4c7
Cascadas de Haar deshabilitadas por defecto en la mayoría de las placas (comportamiento)¶
Para liberar espacio en la memoria flash, la detección de rostros mediante cascadas de Haar (find_features() / image.HaarCascade()) ahora está deshabilitada por defecto en Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO y OpenMV Pure Thermal. Los scripts que usan cascadas de Haar en esas placas deben recompilar el firmware con la característica habilitada.
Commit: 6ce27c910
Interrupción de scripts y escalado de tensores (comportamiento)¶
El depurador USB ahora interrumpe un script en ejecución mediante la función de aborto de la VM de MicroPython en lugar de un salto PendSV forzado (más limpio, pero el punto de interrupción difiere). El escalado de entrada SCALE_S128_127 se corrigió para mapear 0–255 a −128–127 sin una ganancia errónea — los modelos que dependen del antiguo escalado (incorrecto) producirán resultados diferentes.
Coprocesador CM4 reemplazado por Open-AMP (herramientas)¶
El mecanismo obsoleto de firmware del coprocesador CM4 en GIGA / Nicla Vision / Portenta H7 fue eliminado y reemplazado por Open-AMP/RPMsg. El código de doble núcleo debe migrarse al modelo de Open-AMP (se proporciona un ejemplo vuart).
Lista de comprobación de migración¶
Para una migración limpia a v4.5.6 el trabajo habitual es:
Portar el código de ML a
ml: construyeml.Model(path), llama apredict(), leemodel.labels, espera salidasndarrayy mueve la normalización aml.preprocessing.Normalizationy NMS aml.utils(el cambio del paquete ml).Reemplaza
image.unpack()porimage.to_ndarray()(la eliminación de unpack).Actualiza cualquier argumento
scalede array sin procesar deImage()a un rango(min, max)(el cambio de escala de Image).Si usas cascadas de Haar en una placa afectada, recompila con la característica habilitada (el cambio de las cascadas de Haar).
Vuelve a validar los modelos que dependían de
SCALE_S128_127(el cambio de escalado).Mueve el código de doble núcleo a Open-AMP (el cambio de CM4).