v4.8.0¶
v4.8.0 est une version majeure axée sur les fonctionnalités. Au programme : un tout nouveau module de caméra csi orienté classe avec prise en charge multi-caméra, la carte OpenMV N6 (STM32N6) dotée d’un NPU Neural-ART, un moteur d’inférence NPU, le mode RAW de caméra événementielle GenX320, un nouveau module crc, une bibliothèque de post-traitement ML réorganisée, et MicroPython 1.26. Elle supprime également quelques API héritées — le module buzzer et le contrôle de la FLIR Lepton du module fir — donc lisez les changements incompatibles ci-dessous.
Points forts¶
Nouveau module de caméra
csi. Une APIcsi.CSIorientée classe prenant en charge plusieurs caméras simultanées, introduite aux côtés du modulesensorhérité.OpenMV N6. La carte STM32N6, avec un NPU Neural-ART, le triple tampon, le Soft-CSI et un module ToF.
Inférence NPU. Un moteur ST Neural-ART (STAI) pour l’inférence de modèles accélérée par matériel.
Mode événementiel GenX320. Sortie d’événements RAW plus
draw_event_histogram()pour le rendu de caméra événementielle.Post-traitement ML réorganisé — sous-paquets par fournisseur (
ml.postprocessing.ultralytics,mediapipe,edgeimpulse,darknet) avec de nouveaux détecteurs BlazeFace / BlazePalm et de points de repère des mains et du visage.Nouveau module
crc— CRC-16 / CRC-32 accéléré par matériel.MicroPython mis à jour vers 1.26.0.
Incompatible : le module
buzzeret le contrôle Lepton du modulefiront été supprimés (la Lepton est désormais une caméra ordinaire). Voir le changement fir/Lepton et la suppression du buzzer.
Nouvelles fonctionnalités¶
Le nouveau module de caméra
csi— un objetcsi.CSIorienté classe gérant plusieurs caméras simultanées (jusqu’à trois sur la N6), la capture non bloquante, des tailles de trame(w, h)personnalisées, et unprint()/ repr informatif. Il est introduit aux côtés du modulesensorhérité (et n’en est pas un remplacement direct).crc—crc.crc16()etcrc.crc32(), accélérés par matériel avec une solution de repli logicielle, sur l’OpenMV N6 et l’AE3.image.Image.draw_image()a gagné un mot-clétransform=(une matricendarrayflottante en 2-D pour les déformations affines/perspectives, accélérée par GPU sur STM32 et Alif) ; la même transformation est disponible dans la conversion d’image.draw_event_histogram()— affiche les histogrammes de caméra événementielle.Mode événementiel RAW GenX320 —
csi.IOCTL_GENX320_SET_MODEaveccsi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT,csi.IOCTL_GENX320_READ_EVENTS,csi.IOCTL_GENX320_CALIBRATE, des constantes de type d’événement, et de nouveaux scripts d’exemple.ML — un moteur d’inférence NPU ST Neural-ART (STAI) ;
ml.Modela gagné un mot-clépostprocess=(le post-processeur s’exécute désormais automatiquement à l’intérieur depredict()même sans fonction de rappel) ;ml.postprocessinga été réorganisé en sous-paquets par fournisseur —ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo), etml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — les anciens noms en snake_case demeurent comme alias ;ml.utils.draw_keypoints()etml.utils.draw_skeleton()ont été ajoutés ; les modèles ROMFS fournis se sont enrichis (BlazeFace, YOLO-LC, YOLOv8n, points de repère paume/main/visage).audio— entrée microphone numérique MDF sur le STM32N6.Affichage — un pilote OLED SSD1351 et un exemple ; les contrôleurs
SPIDisplaypeuvent remplacer leurs commandes d’initialisation ; le constructeur d’affichage SPI a gagné les mots-cléshmirror/vflip.Profileur embarqué — compteurs de cycles/événements SysTick + PMU Armv8.1-M avec instrumentation au niveau des fonctions, lisibles via la liaison de débogage (
pyopenmva gagné la prise en charge du profilage et des symboles ELF).Prise en charge de nouveaux capteurs — PixArt PS5520 ; FLIR BOSON sur l’OpenMV H7 Plus ; détection automatique du GenX320.
Autres changements et améliorations¶
MicroPython mis à jour vers 1.26.0.
Démarrage de la caméra — l’horloge du capteur a été découplée de l’état CSI, la détection de la caméra au démarrage est plus rapide (la configuration la plus courante est essayée en premier), et l’horloge par défaut de l’OV7725 de l’OpenMV 3 a été corrigée.
Qualité d’image — la correction gamma de l’ISP logiciel (Alif et STM32) et la correction des pixels défectueux (STM32) sont activées par défaut ; les capteurs PAG7936 et PS5520 ont gagné des contrôles de balance des blancs automatique.
Performance —
image.Image.to_ndarray()est accélérée avec le SIMD Helium et le post-processeur FOMO a été vectorisé avec ulab.Le pilote de la FLIR Lepton a été réécrit pour recevoir les trames de manière asynchrone en arrière-plan — la rotation/
transposefonctionne désormais, le dessin agrandit de manière bilinéaire, et la réinitialisation est plus rapide.Débit de capture — le CSI de l’i.MX RT1062 utilise désormais le déchargement DMA complet, et le STM32 N6 dispose d’un
draw_image()matériel par GPU.
Corrections de bogues¶
Caméra et capteurs :
Correction des modes RGB565 / GRAYSCALE / BAYER / YUV422 sur les capteurs STM32, du PAJ6100 sur l’OpenMV H7 / H7 Plus, du RGB565 QVGA de l’OpenMV 2, et de la configuration CSI mono / RGB-YUV de la N6 ; la caméra de test logicielle se réinitialise désormais de manière déterministe.
La balance des blancs automatique ne verdit plus l’image à des fréquences de trame faibles ou variables (une moyenne mobile de 250 ms remplace l’échantillonnage toutes les 100 trames), et le scintillement de luminance du PS5520 est corrigé.
Traitement d’image :
Correction d’un défaut de rendu de tracé de ligne ;
image.Image.flush()vide désormais le tampon JPEG de l’image sur laquelle elle a été appelée ;Normalizationapplique désormais moyenne/écart-type aux entrées flottantes ; l’allocation d’image-depuis-fichier est corrigée.
Capture caméra :
Correction d’une corruption d’image sévère sur les transferts non JPEG (l’interruption de trame n’est désormais activée qu’en mode JPEG), de la prise en charge du mode JPEG 3, et des blocages liés à la taille de ligne DMA et aux petits tampons sur STM32 ; la synchronisation VOSPI / Lepton est plus fiable, notamment sur la N6.
Divers :
omv.board_id()renvoie le bon UID sur le RT1060 ;YoloV2ne plante plus lorsqu’il est construit sans ancres explicites.
Prise en charge matérielle et des cartes¶
OpenMV N6 — STM32N6 avec un NPU Neural-ART, le triple tampon, la sortie LCD/TV SPI, le Soft-CSI, le module
tof, et des modèles ROMFS fournis.Arduino GIGA — sortie d’affichage MIPI DSI.
Nouveaux capteurs — PixArt PS5520 ; FLIR BOSON sur l’OpenMV H7 Plus ; détection automatique du GenX320.
OpenMV Pure Thermal — la FLIR Lepton est désormais un capteur de caméra ordinaire (secondaire).
Alif AE3 — correction gamma de l’ISP logiciel, le module
crc, et corrections SPI.
Changements d’API incompatibles¶
Ruptures d’API visibles par l’utilisateur entre v4.7.0 et v4.8.0. Portée : modules C Python dans modules/ et bibliothèques Python dans scripts/libraries/.
Chaque changement est étiqueté selon son impact :
majeur — la plupart des scripts qui l’utilisaient nécessitent des modifications.
mineur — API étroite ; n’affecte que les scripts qui l’utilisaient.
comportement — même API, résultats différents ; revérifiez les scripts ajustés.
outillage — n’affecte que les outils hôtes / la compilation depuis les sources.
Les changements sont regroupés par impact dans cet ordre — majeur d’abord, puis mineur, comportement et outillage. Si vous voulez simplement porter votre code, passez à la liste de contrôle de migration à la fin pour une liste de tâches condensée. Chaque hash de commit renvoie vers son diff sur GitHub.
La FLIR Lepton a quitté le module fir (majeur)¶
La FLIR Lepton est désormais pilotée comme un capteur de caméra ordinaire au lieu de passer par le module fir. Le contrôle de la Lepton a été retiré de fir : le type FIR_LEPTON et les méthodes radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() et trigger_ffc() ont disparu. Capturez la Lepton comme n’importe quelle autre caméra (elle apparaît comme un capteur secondaire sur l’OpenMV Pure Thermal) ; l’exemple Pure Thermal a été réécrit selon la nouvelle API. Les capteurs fir non Lepton (Grid-EYE, MLX, AMG8833) restent inchangés.
Module buzzer supprimé (mineur)¶
Le module buzzer a été supprimé des ports STM32 et i.MX RT. Pilotez le buzzer avec machine.PWM à la place ; un exemple de buzzer Pure Thermal utilisant le PWM a été ajouté.
omv.disable_fb() supprimé (mineur)¶
La fonction omv.disable_fb() a été supprimée ; le flux du tampon d’image est désormais contrôlé via l’API de la caméra. Les anciens scripts RPC de bureau qui en dépendaient ont également été supprimés.
csi est nouveau — son API n’est pas encore figée (mineur)¶
Le module csi est introduit dans la v4.8.0 et son API a évolué durant la version : csi.fb() a été supprimé, et csi.CSI.snapshot() (image=...) requiert désormais une image mutable et y dessine/redimensionne la trame capturée au lieu d’effectuer une copie profonde brute. Les premiers adoptants du nouveau module devraient retester ; l’API sensor héritée n’est pas affectée.
Mode flux et close() de image.ImageIO (mineur)¶
image.ImageIO — l’argument mode n’accepte désormais que les minuscules 'r' / 'w' (les majuscules sont rejetées avec un message d’erreur mis à jour), et l’ouverture avec 'w' tronque/recrée toujours le fichier au lieu de préserver un flux existant. ImageIO.close() est désormais idempotente (fermer un flux déjà fermé ne lève plus d’erreur) et renvoie None au lieu de l’objet flux.
Valeur de retour de BlazeFace / BlazePalm (mineur)¶
Les post-processeurs BlazeFace et BlazePalm (nouveaux dans cette version) renvoient désormais une seule liste de boîtes englobantes au lieu de la liste complète par classe — les appelants indexent directement le résultat plutôt que [0].
Commit : 75e16b573
La fonction de rappel de post-traitement ML reçoit les tenseurs bruts (comportement)¶
Une fonction de rappel de post-traitement de predict() de ml.Model reçoit désormais les références de tenseurs de sortie bruts (quantifiés) au lieu de ndarrays flottants préconvertis — cela évite l’épuisement de la mémoire sur les grands modèles. Si aucune fonction de rappel n’est fournie, le ndarray flottant est toujours renvoyé. Les fonctions de rappel personnalisées doivent déquantifier les tenseurs elles-mêmes (les post-processeurs intégrés le font déjà).
Commit : 84e6ee650
Horloge de la caméra découplée de l’état CSI (comportement)¶
L’horloge du capteur est désormais indépendante de l’état CSI. set_clock / set_frequency ne reconfigure l’horloge que lorsque la fréquence demandée diffère de plus d’une tolérance, et get_clk_frequency prend un booléen pour renvoyer la fréquence exacte (plutôt que nominale). L’horloge par défaut est de 24 MHz sur l’OpenMV N6 et l’AE3, donc aucun set_clock() explicite n’est nécessaire au démarrage. Les scripts qui basculaient l’horloge pour des captures sensibles au timing devraient revérifier leurs hypothèses.
Commits : 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca
Protocole de débogage USB et cibles de micrologiciel (outillage)¶
Rien de tout cela n’affecte les scripts MicroPython. Des commandes USBDBG obsolètes (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) ont été supprimées et les commandes non prises en charge provenant d’anciens IDE sont désormais vidées au lieu de faire planter les cartes TinyUSB à la connexion ; l’ancienne cible de micrologiciel UVC STM32 a été supprimée. Les anciens outils hôtes devraient se mettre à jour ; voir l’historique du dépôt du micrologiciel pour plus de détails.
Liste de contrôle de migration¶
Pour un portage propre vers la v4.8.0, le travail habituel est le suivant :
Si vous utilisiez la FLIR Lepton via
fir, passez à sa capture en tant que capteur de caméra (le changement fir/Lepton).Remplacez toute utilisation de
buzzerparmachine.PWM(la suppression du buzzer).Supprimez les appels à
omv.disable_fb()(la suppression de omv.disable_fb()).Pour
image.ImageIO: utilisez les minuscules'r'/'w'et attendez-vous à ce que'w'tronque (le changement ImageIO).Pour les fonctions de rappel de post-traitement ML personnalisées : déquantifiez vous-même les références de tenseurs bruts, ou reposez-vous sur le chemin flottant par défaut (le changement de fonction de rappel).
Revérifiez tout script qui pilotait l’horloge du capteur pour des captures sensibles au timing (le changement d’horloge).