v4.7.0¶
v4.7.0 est une version majeure apportant de nombreuses fonctionnalités. À retenir : la nouvelle carte OpenMV AE3 (Alif Ensemble, Cortex-M55 + NPU Ethos-U55) avec un modèle de programmation bicœur openamp, un système de fichiers ROMFS en lecture seule (/rom) contenant des modèles et des cascades intégrés, la prise en charge du capteur time-of-flight VL53L8CX 8x8, de nouveaux post-traitements YOLOv8 / YOLO-LC, et MicroPython 1.25. Elle modifie également la façon dont les modèles intégrés et les cascades Haar sont chargés, alors lisez les changements incompatibles ci-dessous.
Points forts¶
Carte OpenMV AE3 — la carte Alif Ensemble (Cortex-M55 + NPU Ethos-U55), avec un portage complet, un programme d’amorçage et ROMFS.
Module
openampbicœur — déléguez du travail au second cœur Alif via RPMsg (le décorateur@async_remote,Endpoint/EndpointIO).ROMFS — un système de fichiers
/romen lecture seule contenant des modèles TFLite et des cascades Haar intégrés, ainsi qu’un nouveau constructeur hôtetools/mkromfs.py.Prise en charge du capteur time-of-flight multizone 8x8 VL53L8CX.
Nouveaux post-traitements ML —
yolo_v8_postprocessetyolo_lc_postprocess.MicroPython mis à jour vers 1.25.0.
Incompatibilité : les modèles intégrés et les cascades Haar se chargent désormais depuis
/rompar chemin (voir le changement de ml.Model et le changement de cascade Haar).
Nouvelles fonctionnalités¶
OpenMV AE3 — nouvelle carte Alif Ensemble (cœur applicatif Cortex-M55 + NPU Ethos-U55), avec portage, programme d’amorçage, configuration de carte, LED RVB et prise en charge de ROMFS.
openamp— un nouveau module pour le modèle RPC bicœur d’Alif (Open-AMP / RPMsg) :Endpoint,EndpointIO,new_service_callback, et le décorateur@async_remotepour déléguer des fonctions sérialisées au second cœur. Les cœurs HE/HP intègrent par défaut un exécuteur de tâches_boot.pybasé sur asyncio.audio— le portage Alif ajoute le module audio (microphone PDM) avec une API de diffusion basée sur des fonctions de rappel (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) sur l’AE3.ROMFS — un système de fichiers
/romen lecture seule contenant des ressources intégrées (modèles TFLite, cascades Haar, …) empaquetées par carte, un nouvel outil hôtetools/mkromfs.py(tflite, tflite+vela, cascade Haar, texte, binaire), et un assistantscripts/libraries/romfs.pyexposantls_romfs().Post-traitement ML — nouvelles classes
yolo_v8_postprocess(YOLOv8) etyolo_lc_postprocess(variante allégée de tiny-YOLOv2 avec des ancres par défaut optimisées pour l’embarqué), chacune prenantthreshold,nms_thresholdetnms_sigma.Anti-scintillement du GenX320 — un nouvel ioctl
IOCTL_GENX320_SET_AFKpour activer et configurer le filtre anti-scintillement du capteur événementiel (fréquence de scintillement min/max en Hz), avec un exemplegenx320_grayscale_set_afk.py.VL53L8CX — prise en charge du capteur time-of-flight multizone 8x8 via le module
tof(détecté automatiquement, 8x8 à 15 Hz).
Autres changements et améliorations¶
MicroPython mis à jour vers 1.25.0 (portages STM32 et i.MX RT), avec l’ajout du portage Alif amont et l’abandon des anciens pilotes BT-HCI des portages STM32 / i.MX RT.
GenX320 — une nouvelle séquence ISSD double l’horloge interne des pixels (24 → 48 MHz) pour des cadences d’images plus élevées.
STM32N6 / ST Edge AI — travaux préparatoires pour le déploiement de modèles Neural-ART sur STM32N6 (outillage ST Edge AI et prise en charge de ROMFS).
PAG7936 — le débit binaire de la CSI PHY est désormais défini, améliorant le fonctionnement de ce capteur.
Corrections de bogues¶
Caméra et capteurs :
Correction de l’IMU via I2C — les cartes câblant l’IMU LSM6DSx en I2C s’initialisent et se lisent désormais correctement (le chemin I2C utilisait auparavant un chemin de lecture défectueux et des constantes erronées).
L’initialisation du FLIR Boson effectue désormais jusqu’à 10 tentatives pour les anciens capteurs (< IDD 4.x) qui mettent environ 10 s à démarrer, et les réglages d’usine par défaut sont rétablis lors de la réinitialisation afin que des réglages chargés depuis l’extérieur ne puissent pas casser la sortie vidéo.
Correction du
psee_ehc_activate_overridedu GenX320 qui écrivait un temps d’accumulation erroné (nul).Sur les cartes STM32 dépourvues du matériel FastMode+, la demande du mode rapide I2C est désormais correctement protégée au lieu de mal configurer silencieusement le bus.
Apprentissage automatique :
Correction de la collecte des boîtes englobantes et de la gestion de
np.nonzerodans les post-traitements YOLOv2 / YOLOv5, améliorant la fiabilité de la détection.
Matériel et prise en charge des cartes¶
OpenMV AE3 — nouvelle carte Alif Ensemble (Cortex-M55 + NPU Ethos-U55).
VL53L8CX — capteur time-of-flight multizone 8x8 ; le capteur ToF de l’AE3 est passé du VL53L5CX au VL53L8CX.
STM32N6 — travaux préparatoires pour le déploiement de modèles ST Edge AI (Neural-ART).
Changements d’API incompatibles¶
Ruptures d’API visibles par l’utilisateur entre v4.6.20 et v4.7.0. Portée : les modules C Python dans modules/ et les bibliothèques Python dans scripts/libraries/.
Chaque changement est étiqueté selon son impact :
majeur — la plupart des scripts qui l’utilisaient doivent être modifiés.
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 changements sont regroupés par impact dans cet ordre. Si vous voulez simplement porter votre code, passez directement à la liste de contrôle de migration à la fin pour une liste de tâches condensée. Chaque hachage de commit renvoie à son diff sur GitHub.
Les modèles intégrés se chargent par chemin, non par nom (majeur)¶
ml.Model ne charge plus un modèle intégré à partir d’une simple chaîne de nom. Les modèles sont désormais chargés depuis le système de fichiers / ROMFS par chemin :
model = ml.Model("/rom/person_detect.tflite") # was: ml.Model("person_detect")
L’attribut model.labels côté C a été supprimé ; les étiquettes sont désormais chargées par l’enveloppe Python ml.Model à partir d’un fichier annexe <model>.txt (None s’il est absent). Tous les exemples fournis et ml/apps.py ont été mis à jour avec des chemins /rom/*.tflite.
Les cascades Haar se chargent depuis ROMFS (mineur)¶
image.HaarCascade() charge désormais les cascades intégrées via le VFS / ROMFS. Le fichier de cascade frontale de visage par défaut a été renommé de haarcascade_frontalface_default.xml en haarcascade_frontalface.xml, et un échec de chargement lève désormais RuntimeError (« Failed to load Haar cascade ») au lieu de OSError.
Commit : 9de1220d8
Sémantique de tof.reset() / tof.deinit() (comportement)¶
Dans le module tof, reset() était auparavant un alias d”init() et il n’existait pas de véritable deinit. tof.reset() effectue désormais une véritable réinitialisation du capteur et tof.deinit() arrête correctement le capteur (avec la prise en charge de l’arrêt du VL53L5CX). Le code qui comptait sur reset() pour réinitialiser le capteur doit être revérifié.
Contraintes de cadencement et de mode événementiel du GenX320 (comportement)¶
La nouvelle séquence ISSD du GenX320 modifie la base de temps du capteur : les arguments de cadence d’images et d’exposition sont désormais exprimés en unités de 1 MHz au lieu d’être mis à l’échelle selon l’horloge, et le blanking HSYNC est ajusté dynamiquement à la cadence d’images demandée. Les scripts qui codaient en dur des valeurs de cadencement du GenX320 doivent les réajuster. La capture en mode événementiel lève désormais une erreur lorsque la transposition d’image est activée (elle n’est pas prise en charge dans cette configuration).
Liste de contrôle de migration¶
Pour un portage propre vers v4.7.0, le travail habituel est :
Remplacer le chargement de modèle intégré par une chaîne de nom par un chemin
/rom/<name>.tflite, et fournir les étiquettes via un fichier annexe<name>.txt(le changement de ml.Model).Remplacer
haarcascade_frontalface_default.xmlparhaarcascade_frontalface.xmlet intercepterRuntimeError(et nonOSError) en cas d’échec de chargement de cascade (le changement de cascade Haar).Supprimer le code qui comptait sur
tof.reset()pour réinitialiser le capteur (le changement de tof).Réajuster toute valeur de cadence d’images / exposition du GenX320 codée en dur en unités de 1 MHz, et ne pas activer la transposition en mode événementiel (le changement du GenX320).