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 automatiqueget_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 perspectiverotation_corr() reçoit les mots-clés fov et corners (4 points).

  • Nouveau matériel — caméras Arduino Portenta H7, HIMAX HM01B0 et OV7690.

  • Incompatibilité : set_pixformat() / set_framesize() renvoient désormais None, sensor.set_framerate() a été supprimé, TensorFlow a été abandonné sur le M7, et lens_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(), et imu.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(), et set_auto_rotation() / get_auto_rotation().

  • Rotation automatiquesensor.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és fov et corners (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.OV7690 et sensor.HM01B0 ainsi que d’un exemple de filtre d’image de type numpy avec ulab.

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_fb peut 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_fb de tf.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.

Commits : b36460a36, 2b26ca17b

Liste de contrôle de migration

Pour un portage propre vers la v3.6.1, le travail typique est :

  1. Supprimer les appels à sensor.set_framerate() (la suppression de set_framerate).

  2. Déplacer les charges de travail TensorFlow hors de l’OpenMV Cam M7 (le changement TensorFlow sur le M7).

  3. Cesser de s’appuyer sur la valeur de retour de set_pixformat() / set_framesize() et intercepter ValueError pour les formats de pixel non pris en charge (le changement de valeur de retour).

  4. 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.