v3.7.0

v3.7.0 es una versión importante. Añade el módulo audio (micrófono PDM de la Portenta H7) con una nueva API no bloqueante basada en función de retorno (callback), el módulo de reconocimiento de voz de TensorFlow micro_speech, un controlador de LCD RGB paralelo completamente nuevo (con salida HDMI y pantalla táctil FT5X06), un método image.flush() con constantes de formato de píxel, y una canalización de escalado de image.draw_image() reescrita. Se eliminaron varias bibliotecas auxiliares heredadas y métodos de imagen, y cambió la aritmética de yuv_to_* — lee los cambios que rompen la compatibilidad a continuación.

Aspectos destacados

  • módulo audio — captura del micrófono PDM integrado de la Portenta H7 con una API no bloqueante start_streaming(callback).

  • micro_speech — un módulo de reconocimiento de voz micro de TensorFlow.

  • Nuevo controlador LCD — soporte de pantalla RGB paralela, salida HDMI (TFP410) y pantalla táctil FT5X06.

  • image.draw_image() — reescrito con una canalización completa de escalado/alfa/paleta (x_scale / y_scale / hint / color_palette …).

  • image.flush() más constantes de formato de píxel (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • Cambio que rompe la compatibilidad: se eliminaron bibliotecas auxiliares aritméticas heredadas y varios métodos de imagen, se reelaboraron las API de draw_image() / LCD, y yuv_to_* ya no resta 128 — consulta los cambios que rompen la compatibilidad.

Nuevas características

  • audio — un nuevo módulo audio para la Portenta H7 para la captura del micrófono PDM: audio.init(), audio.start_streaming(callback) no bloqueante, y audio.stop_streaming() (la frecuencia se especifica en Hz).

  • micro_speech — un nuevo módulo con una clase MicroSpeech, audio_callback() y micro_speech() para el reconocimiento de voz de TensorFlow; listen() usa un promedio de ventana deslizante y acepta una palabra clave filter para restringir los resultados a una lista de etiquetas.

  • LCD — un nuevo controlador LCD con soporte de pantalla RGB paralela, tipos LCD_NONE / LCD_SHIELD / LCD_DISPLAY, muchas constantes de framesize, triple_buffer / framesize / refresh / bgr / deinit, un display ampliado, salida HDMI a través del TFP410, y soporte de pantalla táctil FT5X06.

  • image.flush() — se añadió un método image.flush() y constantes de formato de píxel (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — reescrito con una nueva canalización de escalado: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette y hint, además de las constantes image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST y nuevos ejemplos de mezcla alfa / tabla de colores / escalado.

  • ImageReader.next_frame() obtuvo una palabra clave pause para deshabilitar el retardo de reproducción en tiempo real.

  • Se añadieron ejemplos de audio para la Portenta (audio_fft.py, micro_speech.py) y un ejemplo de ExtInt para despertar desde el modo de parada.

Otros cambios y mejoras

  • Los ejemplos integrados se reorganizaron bajo scripts/examples/Arduino/; el framebuffer ahora se actualiza al instante tras cargar/crear imágenes con copy_to_fb=True (sin necesidad de un flush manual); el heap de la Portenta se redujo ligeramente para acomodar más estado estático de controladores.

Corrección de errores

Cámara e imagen:

  • Se corrigió el intercambio de rojo/azul (orden de bytes RGB565) en las imágenes capturadas, el redondeo del dibujado DMA2D para que coincida con el resto del código de dibujo, la corrupción de fb_alloc en asignaciones recursivas (find_blobs()), y se condicionaron top_hat() / black_hat() a que tanto las operaciones binarias como las aritméticas estén habilitadas.

Pantalla y audio:

  • Se corrigió la salida del shield LCD y el modo de audio mono de 1 canal de la Portenta.

Portenta:

  • Se solucionó de forma provisional un problema de Ethernet/SDRAM (poner rst_eth en alto) y se corrigió la configuración de temporización de la SDRAM.

Hardware y soporte de placas

  • Arduino Portenta H7 — captura de audio del micrófono PDM integrado (SAI / PDM2PCM).

  • LCD — nuevo controlador de pantalla RGB paralela (LTDC habilitado en la compilación del H7), salida HDMI a través del TFP410, y soporte de LCD con pantalla táctil FT5X06.

Cambios que rompen la API

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

Cada cambio está etiquetado con su impacto:

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

  • behavior — 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 comprobación de migración al final. Cada hash de commit enlaza con su diff en GitHub.

Eliminadas las bibliotecas auxiliares aritméticas heredadas (minor)

Las bibliotecas auxiliares mtx, rv, ulinalg, umatrix y vec se eliminaron de scripts/libraries en favor de ulab. Los scripts que import cualquiera de estas fallarán y deben portarse a ulab.

Commits: 1f7da9272

Eliminados remove_shadows() / chrominvar() / illuminvar() (minor)

image.remove_shadows(), image.chrominvar() e image.illuminvar() se eliminaron sin reemplazo. Los scripts que llaman a estos métodos deben eliminar las llamadas.

Commits: 3173c2bb3

Reelaborada la firma de image.draw_image() (minor)

image.draw_image() se reescribió sobre una nueva canalización de escalado. Los antiguos argumentos posicionales alpha / scale único y el orden posicional anterior ya no se aplican; usa la nueva forma con palabras clave (x_scale= / y_scale= o x_size= / y_size=, alpha=, color_palette=, hint= …).

Commits: 3439f8824

Reescritura del módulo LCD (minor)

El módulo lcd se reescribió para el nuevo controlador de pantalla. lcd.init() ahora toma un type de pantalla (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) y nuevos argumentos de palabra clave, y la superficie de constantes / API se reorganizó sustancialmente. Los antiguos scripts solo de shield en su mayoría siguen funcionando, pero los valores predeterminados y el comportamiento cambiaron — revisa los scripts de LCD frente a la nueva API de type / framesize.

Commits: 185538207

yuv_to_* ya no resta 128 (behavior)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() ahora tratan el elemento Y de la tupla como un valor sin signo de 0–255 en lugar de restar 128. Los llamadores deben pasar Y sin el sesgo previo de −128 para obtener los mismos colores que antes.

Commits: dcf141192

Lista de comprobación de migración

Para un porte limpio a v3.7.0 el trabajo típico es:

  1. Portar el uso de mtx / rv / ulinalg / umatrix / vec a ulab (la eliminación de las bibliotecas aritméticas).

  2. Eliminar las llamadas a image.remove_shadows() / chrominvar() / illuminvar() (los métodos de imagen eliminados).

  3. Actualizar las llamadas a image.draw_image() a la nueva firma con palabras clave (la reelaboración de draw_image).

  4. Revisar los scripts de LCD frente a la nueva API de type / framesize de lcd (la reescritura del LCD).

  5. Eliminar el sesgo de −128 al pasar Y a yuv_to_* (el cambio de yuv_to_*).

Todos los demás scripts se ejecutan sin modificaciones.