v3.9.0¶
La v3.9.0 est une version majeure. Elle ajoute le port nRF avec l”Arduino Nano 33 BLE Sense (caméra, module audio PDM, ulab, pilotes de capteurs figés), apporte les capteurs thermiques FLIR Lepton ainsi que MLX90641 / MLX90621 et un module fir largement remanié, des ioctls d”autofocus OV5640, et le nouveau type de streaming image.ImageIO. L’ancien module CMSIS-NN nn et les anciennes classes ImageReader / ImageWriter ont été supprimés — consultez les changements incompatibles ci-dessous.
Points forts¶
Arduino Nano 33 BLE Sense — nouveau port nRF52840 avec caméra, un module
audioPDM,ulabet des pilotes de capteurs figés.Thermique — prise en charge des FLIR Lepton, MLX90641 et MLX90621 avec un module
firremanié (palettes, miroir, mise à l’échelle, radiométrie, FFC).Autofocus OV5640 — nouveaux ioctls
sensor.IOCTL_*_AUTO_FOCUS.image.ImageIO— un type de flux d’image unifié (mémoire ou fichier ; read/write/seek/size/close) remplaçantImageReader/ImageWriter.Incompatible : le module CMSIS-NN
nnetimage.ImageReader/image.ImageWriteront été supprimés, et le comportement defind_lines()/fira changé — voir les changements incompatibles.
Nouvelles fonctionnalités¶
Port nRF / Arduino Nano 33 BLE Sense — nouveau port nRF52840 et prise en charge de la carte, avec un nouveau module
audio(audio.init(),audio.start_streaming(),audio.stop_streaming()),ulabactivé, et les pilotes de capteurs figésapds9960/lps22h/lsm9ds1/hts221.image.ImageIO— un nouveau type de flux d’image prenant en charge à la fois les flux en mémoire et en fichier avecread()/write()/seek()/size()/close(), ainsi que des exemples ImageIO de lecture/écriture/mémoire.FLIR Lepton — ajout de la prise en charge
FIR_LEPTONavecfir.radiometric(),fir.trigger_ffc()etfir.register_vsync_cb().Capteurs thermiques — ajout de la prise en charge du MLX90641 (
FIR_MLX90641) et du thermopile MLX90621 (pilotes officiels Melexis).Palettes / orientation de
fir— ajout des constantesfir.PALETTE_RAINBOW/PALETTE_IRONBOW/GRAYSCALE/RGB565, etfir.read_ir()accepte désormaishmirror/vflip/transpose.Autofocus OV5640 — ajout de
sensor.IOCTL_TRIGGER_AUTO_FOCUS/IOCTL_PAUSE_AUTO_FOCUS/IOCTL_RESET_AUTO_FOCUS/IOCTL_WAIT_ON_AUTO_FOCUS(OpenMV 2/3/4/4 Plus/PT/Portenta).Réorganisation des exemples Arduino en répertoires par carte.
Autres changements et améliorations¶
Passage aux messages d’erreur MicroPython compressés (chaînes d’exception plus courtes) ; l’argument
typedefir.init()détecte désormais automatiquement via un balayage du bus I2C lorsqu’il est omis ; l’exceptionxallocindique désormais le nombre d’octets demandés ; l’UART 8 a été activé sur le Portenta ; les exemples FIR ont été consolidés enthermal_camera.py/thermal_overlay.py/thermal_overlay_lcd.py. Pour tenir dans la mémoire flash,image.get_similarity()et la recherche sélective ont été désactivés dans la version OpenMV 4, et la bibliothèque image peut désormais être compilée sans système de fichiers (pour les cartes sans système de fichiers).
Corrections de bogues¶
Caméra et capteurs :
Correction du calcul de la PCLK de l’OV5640, ajout des gestionnaires d’IRQ I2C manquants (corrigeant les blocages de transfert I2C), refonte de la lecture/écriture I2C du cambus pour la fiabilité, possibilité de sélectionner le bus I2C du Lepton, déplacement des broches de récupération de bus du cambus vers la configuration par carte, nouvelle tentative du balayage du cambus une fois avant échec, et mise en fonctionnement de l’OpenMV PT (Lepton + caméra partageant l’I2C).
Thermique :
Correction du calcul de la valeur maximale dans
get_ir()/draw_ir()defiret dansimage.get_similarity()(FLT_MIN→-FLT_MAX), de la gestion 12→16 bits de l’AMG8833, et de la précision du MLX90621 (pilote officiel Melexis).
Affichage, audio et système :
Déplacement des transferts du LCD SPI STM32 vers les fonctions de rappel HAL SPI (fiabilité de l’affichage), correction de
audio.init()du Nano 33 (oscillateur HF + ratio PDM pour que le microphone fonctionne), de l’état du minuteur H7 avec le nouveau HAL, dugc_collectnRF et de l’init/deinit précoce de la carte, et arrêt de l’affichage du message parasite « uh oh, no preference for overlapping detection » pendantfind_apriltags()/find_rects().
Matériel et prise en charge des cartes¶
Arduino Nano 33 BLE Sense — nouvelle carte nRF52840 (caméra, audio PDM,
ulab, pilotes de capteurs figés).Capteurs thermiques FLIR Lepton, MLX90641 et MLX90621.
Autofocus OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.
Portenta — UART 8 activé.
Changements d’API incompatibles¶
Ruptures d’API visibles par l’utilisateur entre la v3.8.0 et la v3.9.0. Portée : modules C Python dans modules/ et bibliothèques Python dans scripts/libraries/.
Chaque changement est étiqueté selon son impact :
majeur — affecte la plupart des scripts qui utilisaient la fonctionnalité ; vous devrez porter le code.
mineur — API restreinte ; n’affecte que les scripts qui l’utilisaient.
comportement — même API, résultats différents ; revérifiez les scripts calibrés.
Les changements sont regroupés par impact dans cet ordre. Si vous voulez simplement porter votre code, passez à la liste de contrôle de migration à la fin. Chaque hachage de commit renvoie à son diff sur GitHub.
Module CMSIS-NN nn supprimé (majeur)¶
Le module CMSIS-NN nn a été supprimé, y compris nn.load(), net.forward(), net.search() et l’utilitaire nn_class. L’inférence des modèles passe au module TensorFlow Lite (tf). Les scripts qui chargeaient des modèles .network avec nn doivent être portés vers tf avec un modèle TensorFlow Lite.
Commits : fbc767b36
ImageReader / ImageWriter remplacés par image.ImageIO (majeur)¶
image.ImageReader / image.ImageWriter et leurs méthodes next_frame() / add_frame() ont été supprimés et remplacés par le nouveau type image.ImageIO, qui prend en charge à la fois les flux en mémoire et en fichier via read() / write() / seek() / size() / close(). Le code utilisant les anciennes classes reader/writer doit être porté vers image.ImageIO (voir les exemples renommés imageio_read.py / imageio_write.py).
Commits : 783a78754
Mot-clé scale de fir.draw_ir() supprimé (mineur)¶
fir.draw_ir() a été réécrit par-dessus le nouveau pipeline de dessin d’image. Le mot-clé scale=(min, max) a été supprimé, et les arguments hint, x_scale, y_scale, roi et les décalages positionnels x/y ont été ajoutés. Les scripts qui passaient scale=(min, max) à fir.draw_ir() doivent le supprimer et utiliser les nouveaux arguments.
Commits : 0a29103b1
Approximation de find_lines() (comportement)¶
image.find_lines() approxime désormais la magnitude du gradient par (abs(gx) + abs(gy)) / 2 et ignore les magnitudes inférieures à 126. C’est plus rapide mais cela change l’ensemble des lignes détectées et les valeurs de l’accumulateur, donc revérifiez et recalibrez threshold / theta_margin / rho_margin.
Commits : 902ae3c98
fir.snapshot() remanié (comportement)¶
fir.snapshot() a été considérablement remanié avec une nouvelle API à mots-clés (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), et les exemples intégrés ont été réécrits. Le comportement précédent positionnel/pixformat uniquement a changé ; portez les scripts FIR vers la nouvelle forme à mots-clés (voir les exemples mis à jour du shield thermopile).
Commits : 53f2248b8
fir.init() lève une exception en cas d’échec (comportement)¶
fir.init() lève désormais une exception (et se dé-initialise proprement) lorsque le capteur thermique n’est pas détecté, au lieu de continuer silencieusement. Encadrez fir.init() d’un try / except (ou assurez-vous que le capteur est connecté) là où vous comptiez auparavant sur l’absence de levée d’exception.
Commits : 4b2f972f3
Liste de contrôle de migration¶
Pour un portage propre vers la v3.9.0, le travail habituel est le suivant :
Portez l’inférence des modèles CMSIS-NN
nnvers le module TensorFlow Litetf(la suppression de nn).Remplacez
image.ImageReader/image.ImageWriterparimage.ImageIO(le changement ImageIO).Supprimez le mot-clé
scale=(min, max)defir.draw_ir()et utilisez les nouveaux arguments (le changement de draw_ir).Recalibrez les paramètres de
find_lines()par rapport à la métrique de magnitude approximative (le changement de find_lines).Portez les scripts FIR vers la nouvelle API à mots-clés de
fir.snapshot()(le changement de fir.snapshot) et gérez la levée d’exception defir.init()en cas de capteur absent (le changement de fir.init).
Tous les autres scripts fonctionnent sans modification.