v3.7.0

v3.7.0 est une version majeure. Elle ajoute le module audio (microphone PDM du Portenta H7) avec une nouvelle API de rappel non bloquante, le module micro_speech de reconnaissance vocale TensorFlow, un tout nouveau contrôleur LCD RGB parallèle (avec sortie HDMI et écran tactile FT5X06), une méthode image.flush() accompagnée de constantes de format de pixel, et un pipeline de mise à l’échelle image.draw_image() réécrit. Plusieurs bibliothèques utilitaires héritées et méthodes d’image ont été supprimées et le calcul de yuv_to_* a changé — lisez les modifications incompatibles ci-dessous.

Points forts

  • Module audio — capture du microphone PDM embarqué du Portenta H7 avec une API non bloquante start_streaming(callback).

  • micro_speech — un module de reconnaissance vocale micro TensorFlow.

  • Nouveau contrôleur LCD — prise en charge des écrans RGB parallèles, sortie HDMI (TFP410) et écran tactile FT5X06.

  • image.draw_image() — réécrit avec un pipeline complet de mise à l’échelle/alpha/palette (x_scale / y_scale / hint / color_palette …).

  • image.flush() plus des constantes de format de pixel (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • Incompatibilité : des bibliothèques utilitaires de calcul héritées et plusieurs méthodes d’image ont été supprimées, les API draw_image() / LCD ont été remaniées, et yuv_to_* ne soustrait plus 128 — voir les modifications incompatibles.

Nouvelles fonctionnalités

  • audio — un nouveau module audio du Portenta H7 pour la capture par microphone PDM : audio.init(), audio.start_streaming(callback) non bloquant, et audio.stop_streaming() (la fréquence est spécifiée en Hz).

  • micro_speech — un nouveau module doté d’une classe MicroSpeech, de audio_callback() et de micro_speech() pour la reconnaissance vocale TensorFlow ; listen() utilise une moyenne sur fenêtre glissante et accepte un mot-clé filter pour restreindre les résultats à une liste d’étiquettes.

  • LCD — un nouveau contrôleur LCD prenant en charge les écrans RGB parallèles, les types LCD_NONE / LCD_SHIELD / LCD_DISPLAY, de nombreuses constantes de taille de trame, triple_buffer / framesize / refresh / bgr / deinit, un display enrichi, une sortie HDMI via le TFP410, et la prise en charge de l’écran tactile FT5X06.

  • image.flush() — ajout d’une méthode image.flush() et de constantes de format de pixel (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — réécrit avec un nouveau pipeline de mise à l’échelle : x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette et hint, plus les constantes image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST et de nouveaux exemples de fusion alpha / table de couleurs / mise à l’échelle.

  • ImageReader.next_frame() a gagné un mot-clé pause pour désactiver le délai de lecture en temps réel.

  • Ajout d’exemples audio pour le Portenta (audio_fft.py, micro_speech.py) et d’un exemple de réveil depuis l’arrêt par ExtInt.

Autres modifications et améliorations

  • Les exemples intégrés ont été réorganisés sous scripts/examples/Arduino/ ; le tampon d’image se met désormais à jour instantanément après le chargement/la création d’images avec copy_to_fb=True (aucun flush manuel n’est nécessaire) ; le tas du Portenta a été légèrement réduit pour accueillir davantage d’état statique de pilotes.

Corrections de bogues

Caméra et imagerie :

  • Correction de l’inversion rouge/bleu (ordre des octets RGB565) dans les images capturées, de l’arrondi du dessin DMA2D pour correspondre au reste du code de dessin, de la corruption de fb_alloc dans les allocations récursives (find_blobs()), et conditionnement de top_hat() / black_hat() à l’activation simultanée des opérations binaires et mathématiques.

Affichage et audio :

  • Correction de la sortie du shield LCD et du mode audio mono 1 canal du Portenta.

Portenta :

  • Contournement d’un problème Ethernet/SDRAM (mettre rst_eth à l’état haut) et correction de la configuration de synchronisation de la SDRAM.

Matériel et prise en charge des cartes

  • Arduino Portenta H7 — capture audio par microphone PDM embarqué (SAI / PDM2PCM).

  • LCD — nouveau contrôleur d’affichage RGB parallèle (LTDC activé dans la build H7), sortie HDMI via le TFP410, et prise en charge de l’écran tactile LCD FT5X06.

Modifications incompatibles de l’API

Ruptures d’API visibles par l’utilisateur entre la v3.6.9 et la v3.7.0. Portée : modules C Python dans modules/ et bibliothèques Python dans scripts/libraries/.

Chaque modification est étiquetée selon son impact :

  • mineur — API restreinte ; n’affecte que les scripts qui l’utilisaient.

  • comportement — même API, résultats différents ; revérifiez les scripts ajustés.

Les modifications sont regroupées par impact dans cet ordre. Si vous voulez simplement porter votre code, passez à la liste de vérification pour la migration à la fin. Chaque hachage de commit renvoie à son diff sur GitHub.

Bibliothèques utilitaires de calcul héritées supprimées (mineur)

Les bibliothèques utilitaires mtx, rv, ulinalg, umatrix et vec ont été supprimées de scripts/libraries au profit de ulab. Les scripts qui font import de l’une d’elles échoueront et doivent être portés vers ulab.

Commits : 1f7da9272

remove_shadows() / chrominvar() / illuminvar() supprimés (mineur)

image.remove_shadows(), image.chrominvar() et image.illuminvar() ont été supprimés sans remplacement. Les scripts appelant ces méthodes doivent supprimer ces appels.

Commits : 3173c2bb3

Signature de image.draw_image() remaniée (mineur)

image.draw_image() a été réécrit au-dessus d’un nouveau pipeline de mise à l’échelle. Les anciens arguments positionnels alpha / unique scale et l’ordre positionnel antérieur ne s’appliquent plus ; utilisez la nouvelle forme par mots-clés (x_scale= / y_scale= ou x_size= / y_size=, alpha=, color_palette=, hint= …).

Commits : 3439f8824

Réécriture du module LCD (mineur)

Le module lcd a été réécrit pour le nouveau contrôleur d’affichage. lcd.init() prend désormais un type d’affichage (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) et de nouveaux arguments par mots-clés, et l’ensemble des constantes / de l’API a été largement réorganisé. Les anciens scripts limités au shield fonctionnent encore pour la plupart, mais les valeurs par défaut et le comportement ont changé — passez en revue vos scripts LCD au regard de la nouvelle API type / framesize.

Commits : 185538207

yuv_to_* ne soustrait plus 128 (comportement)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() traitent désormais l’élément Y du tuple comme une valeur non signée de 0 à 255 au lieu de soustraire 128. Les appelants doivent passer Y sans le biais −128 antérieur pour obtenir les mêmes couleurs qu’auparavant.

Commits : dcf141192

Liste de vérification pour la migration

Pour un portage propre vers la v3.7.0, le travail habituel consiste à :

  1. Porter l’utilisation de mtx / rv / ulinalg / umatrix / vec vers ulab (la suppression des bibliothèques de calcul).

  2. Supprimer les appels à image.remove_shadows() / chrominvar() / illuminvar() (les méthodes d’image supprimées).

  3. Mettre à jour les appels à image.draw_image() vers la nouvelle signature par mots-clés (le remaniement de draw_image).

  4. Passer en revue les scripts LCD au regard de la nouvelle API type / framesize de lcd (la réécriture du LCD).

  5. Abandonner le biais −128 lors du passage de Y à yuv_to_* (la modification de yuv_to_*).

Tous les autres scripts fonctionnent sans changement.