v3.6.1¶
v3.6.1 est une version majeure. Elle introduit le module imu (LSM6DS3), une suite de nouvelles API d’accès du module sensor avec une rotation automatique pilotée par l’IMU, la correction de perspective à 4 points rotation_corr(), et apporte la prise en charge de l”Arduino Portenta H7 avec les caméras HIMAX HM01B0 et OV7690. Plusieurs API sensor / image ont changé et TensorFlow a été abandonné sur le M7 — consultez les changements incompatibles ci-dessous.
Points forts¶
imu— accéléromètre / gyroscope / température / roulis / tangage sur le LSM6DS3 (OpenMV 4 / Portenta).Accesseurs du capteur + rotation automatique —
get_pixformat()/get_framesize()/get_hmirror()/get_vflip()/get_windowing(),set_transpose()/set_auto_rotation(), et rotation des captures pilotée par l’IMU.Correction de perspective —
rotation_corr()reçoit les mots-clésfovetcorners(4 points).Nouveau matériel — caméras Arduino Portenta H7, HIMAX HM01B0 et OV7690.
Incompatibilité :
set_pixformat()/set_framesize()renvoient désormaisNone,sensor.set_framerate()a été supprimé, TensorFlow a été abandonné sur le M7, etlens_corr()/linpolar()exigent désormais des dimensions paires — voir les changements incompatibles.
Nouvelles fonctionnalités¶
imu— un nouveau module IMU :imu.acceleration_mg(),imu.angular_rate_mdps(),imu.temperature_c(),imu.roll(),imu.pitch(), etimu.sleep()(LSM6DS3 sur OpenMV 4 / Portenta).Accesseurs du capteur — ajout de
sensor.get_pixformat(),get_framesize(),get_hmirror(),get_vflip(),get_windowing(),set_transpose()/get_transpose(), etset_auto_rotation()/get_auto_rotation().Rotation automatique —
sensor.snapshot()utilise l’IMU pour retourner / mettre en miroir / transposer les trames lorsque la rotation automatique est activée.rotation_corr()— ajout des mots-clésfovetcorners(perspective à 4 points), avec des exemples de correction de perspective.lcd.init()— ajout d’un argument nommébgr.collections.deque— activé dans la build MicroPython.Ajout des constantes d’identifiant
sensor.OV7690etsensor.HM01B0ainsi que d’un exemple de filtre d’image de type numpy aveculab.
Autres changements et améliorations¶
Optimisation significative des filtres d’image (médian / mode / moyenne / …), de
find_circles()et de la correction d’objectif ;alloc_extra_fbpeut désormais allouer n’importe quel nombre d’octets ; le modèle de détection de personnes a été reconstruit avec une nouvelle opération d’average-pool.
Corrections de bugs¶
Caméra et capteurs :
Correction de
sleep()sur l’OV2640 (utilise désormais le registre standby COM2 au lieu de la broche power-down), de la configuration de la broche FSYNC, des polarités HSYNC/VSYNC et de l’adresse/du balayage I2C du HM01B0, du GPIO power-down du capteur et de la broche de reset de la caméra du Portenta, et désactivation de la rotation automatique lorsque le tangage de l’IMU est proche de 90°/270°.
Imagerie et système :
Correction d’un bug de vérification des limites d’un filtre d’image, d’un hardfault lors de la désactivation du cache D, du démarrage sur les cartes sans carte SD, d’un bug
load_to_fbdetf.load(), du dépassement de pile de la détection de personnes (pile du H7 portée à ≥12 Ko), et des décalages de descripteur USB pour le mode haute vitesse sur l’OpenMV 4 Plus.
Matériel et prise en charge des cartes¶
Arduino Portenta H7 — mise en service initiale de la carte (configuration horloge/OSC/HSE du STM32H747, en-têtes CMSIS, ADC, SDRAM, PID USB Arduino).
HIMAX HM01B0 — nouveau pilote de caméra monochrome (Bayer, horloge à oscillateur externe).
OV7690 — nouveau pilote de caméra.
IMU LSM6DS3 — OpenMV 4 / Portenta.
Changements d’API incompatibles¶
Ruptures d’API visibles par l’utilisateur entre v3.6.0 et v3.6.1. Portée : modules C Python dans modules/ et bibliothèques Python dans scripts/libraries/.
Chaque changement est marqué selon son impact :
minor — API restreinte ; n’affecte que les scripts qui l’utilisaient.
behavior — 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 souhaitez simplement porter votre code, passez à la liste de contrôle de migration à la fin. Chaque hash de commit renvoie vers son diff sur GitHub.
sensor.set_framerate() supprimé (minor)¶
Le stub sans effet sensor.set_framerate() a été supprimé ; l’appeler lève désormais AttributeError. Supprimez l’appel et contrôlez la cadence des trames via la framesize/l’exposition à la place. (Un set_framerate() fonctionnel est réintroduit dans la v4.0.2.)
Commits : 705e98f91
TensorFlow abandonné sur l’OpenMV Cam M7 (minor)¶
TensorFlow (le module tf) a été désactivé sur l’OpenMV Cam M7 / OpenMV 3 (il n’y tient plus). import tf échoue sur le M7 — utilisez une caméra de classe H7 pour TensorFlow. (tf est réactivé sur le F7 dans la v3.6.3.)
Commits : 2ae875077
set_pixformat() / set_framesize() renvoient None (behavior)¶
sensor.set_pixformat() et sensor.set_framesize() renvoient désormais None au lieu de True, et un format de pixel non pris en charge lève désormais une ValueError au lieu d’une assertion. Le code qui vérifiait la valeur de retour (par ex. if sensor.set_pixformat(...):) doit cesser de le faire, et le code qui interceptait AssertionError pour les formats non pris en charge doit intercepter ValueError.
Commits : f314ac4e7
lens_corr() / linpolar() / logpolar() exigent des dimensions paires (behavior)¶
image.lens_corr() et image.linpolar() / image.logpolar() exigent désormais une largeur et une hauteur d’image paires et lèvent une erreur sur des dimensions impaires. Recadrez ou redimensionnez l’image en dimensions paires avant d’appeler ces méthodes.
Liste de contrôle de migration¶
Pour un portage propre vers la v3.6.1, le travail typique est :
Supprimer les appels à
sensor.set_framerate()(la suppression de set_framerate).Déplacer les charges de travail TensorFlow hors de l’OpenMV Cam M7 (le changement TensorFlow sur le M7).
Cesser de s’appuyer sur la valeur de retour de
set_pixformat()/set_framesize()et intercepterValueErrorpour les formats de pixel non pris en charge (le changement de valeur de retour).Garantir des dimensions d’image paires avant
lens_corr()/linpolar()/logpolar()(l’exigence de dimensions paires).
Tous les autres scripts s’exécutent sans modification.