v3.0.0

La version v3.0.0 est la version majeure v2 → v3. Elle introduit l”OpenMV Cam M7 (STM32F7) et le nouveau module de réseau de neurones nn CMSIS-NN (remplaçant les anciennes méthodes codées en dur find_number() / classify_object()), ajoute la prise en charge des capteurs MT9V034 à obturateur global et FLIR Lepton, les tailles de trame sensor.WVGA, et met à jour le cœur vers MicroPython 1.9.4. Plusieurs comportements de image / sensor / WiFi ont changé — consultez les changements incompatibles ci-dessous.

Points forts

  • OpenMV Cam M7 — nouvelle carte STM32F7.

  • Module nn — inférence CMSIS-NN : nn.load(), Net.forward(), Net.search(), avec un convertisseur de modèle et des exemples.

  • Nouveaux capteurs — MT9V034 à obturateur global (déclenché par FSIN) et FLIR Lepton.

  • Mise à jour du cœur vers MicroPython 1.9.4.

  • Incompatible : les méthodes codées en dur image.find_number() / image.classify_object() ont été supprimées, sensor.sleep() lève désormais une exception, les sockets WINC retournent le nombre réel d’octets, image.binary() retourne une nouvelle image, et find_apriltags() est plafonné à 64 Ko de pixels — voir les changements incompatibles.

Nouvelles fonctionnalités

  • nn — un nouveau module de réseau de neurones CMSIS-NN : nn.load(path), Net.forward(img, roi=, softmax=, dry_run=) (retourne des flottants de 0.0 à 1.0), Net.search() pour la détection multi-échelle/position, et Net.test(), ainsi qu’un convertisseur de modèle CMSIS-NN (nn_convert.py / nn_quantizer.py), des modèles CIFAR-10 / LeNet / smile intégrés, et des scripts d’exemple NN / NN-search.

  • Capteurs — prise en charge du MT9V034 à obturateur global (capture déclenchée par FSIN) sur l’OpenMV 4, un pilote FLIR Lepton mis à jour avec capture Lepton, et les nouvelles tailles de trame sensor.WVGA (720x480) / sensor.WVGA2 (752x480).

  • Imagerieimage.find_circles() a gagné les mots-clés r_min / r_max / r_step (Hough plus rapide), find_keypoints() et le find_features() Haar acceptent désormais les images RGB, et image.compress() / l’encodage JPEG prennent désormais en charge les images binaires (bitmap).

  • Démarrageboot.py s’exécute désormais avant l’initialisation USB afin de pouvoir remplacer le mode USB (par ex. HID).

  • Exemples — ajout d’exemples AprilTag basse/haute résolution, d’un exemple I2C LIDAR-Lite V3, et d’outils de jeu de données (augment_images.py / make_patches.py).

Autres changements et améliorations

  • Mise à jour de MicroPython intégré vers 1.9.4 (avec un retour en arrière sur l’analyse/compilation/exécution de pyexec et un correctif PendSV) ; messages d’erreur de mémoire insuffisante fb_alloc / xalloc plus clairs ; suppression du bruit printf de nn pendant le chargement du réseau ; réorganisation du dépôt (exemples → scripts/, outils → tools/, cascades Haar → ml/). Le module nn n’est pas disponible sur l’OpenMV 2 (mémoire flash insuffisante).

Corrections de bogues

Imagerie :

  • Correction de fast_atan2f pour x≤0 (auparavant toujours 0 — revérifiez les angles de blob / ligne / point clé), de la gestion mémoire de find_apriltags() (contenu perdu et un mauvais realloc en cas de mémoire insuffisante), des pointeurs de ligne binaire/bitmap par bpp (résultats binaires corrompus), de find_edges(EDGE_CANNY) avec une ROI, de la macro TO_GS_PIXEL (intégrale / morphologie), du streaming bitmap/JPEG pour les trames en niveaux de gris (bpp==0), du pop_front de la liste de points clés/blobs, et des résultats de match_descriptor.

Système et caméra :

  • Correction des numéros d’interface/d’extrémité HID USB, du changement dynamique de la fréquence XCLK à l’exécution, de Net.forward() retournant le nombre correct de sorties, et d’un hardfault lors de l’interruption de l’analyse du script.

Matériel et prise en charge des cartes

  • OpenMV Cam M7 (STM32F7) — nouvelle carte.

  • Capteur MT9V034 à obturateur global (OpenMV 4, déclenché par FSIN).

  • FLIR Lepton — pilote mis à jour avec prise en charge de la capture.

Changements d’API incompatibles

Ruptures d’API visibles par l’utilisateur entre v2.9.0 et v3.0.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 du code.

  • mineur — API restreinte ; n’affecte que les scripts qui l’utilisaient.

  • comportement — même API, résultats différents ; revérifiez les scripts réglés.

Les changements sont regroupés par impact dans cet ordre. Si vous souhaitez simplement porter votre code, passez directement à la liste de vérification pour la migration à la fin. Chaque empreinte de commit renvoie vers sa différence sur GitHub.

image.find_number() / image.classify_object() supprimées (majeur)

Les méthodes codées en dur image.find_number() (LeNet) et image.classify_object() (CMSIS CNN) ont été supprimées au profit du nouveau module nn. Remplacez-les par net = nn.load('/model.network'); out = net.forward(img).

Commits : d151f7e38

sensor.sleep() / sensor.reset() lèvent une exception en cas d’échec (mineur)

sensor.sleep() et sensor.reset() lèvent désormais une exception en cas d’échec au lieu de retourner True / False. Le code qui vérifiait le retour booléen de sensor.sleep() doit désormais entourer l’appel d’un try / except.

Commits : 7d16d008f

Les sockets WINC retournent le nombre réel d’octets (comportement)

Les méthodes de socket WINC1500 send / recv / sendto / recvfrom retournaient auparavant toujours 0 ; elles retournent désormais le nombre réel d’octets transférés. Le code qui supposait un retour 0 (ou bouclait/bloquait dessus) doit gérer les nombres réels.

Commits : a07fb2f60

image.binary() retourne une nouvelle image (comportement)

image.binary() a gagné les mots-clés to_bitmap / copy et retourne désormais un nouvel objet image au lieu de retourner/modifier l’image source sur place. Le code qui reposait sur la modification de l’image originale par binary() doit utiliser l’objet retourné (et passer copy=True pour un comportement non sur place).

Commits : 8a44f0cd9

find_apriltags() plafonné à 64 Ko de pixels (comportement)

image.find_apriltags() lève désormais une exception si l’image (ou la ROI) dépasse 64 Ko de pixels et retourne une liste vide pour les images plus petites que 4x4. Réduisez les grandes images (utilisez une framesize plus petite ou passez une roi explicite) avant d’appeler find_apriltags().

Commits : bd77afbc0

Liste de vérification pour la migration

Pour un portage propre vers la v3.0.0, le travail typique consiste à :

  1. Remplacer image.find_number() / image.classify_object() par le module nn (la migration nn).

  2. Entourer sensor.sleep() / sensor.reset() d’un try / except au lieu de vérifier un retour booléen (le changement de sensor.sleep).

  3. Gérer les nombres réels d’octets retournés par send / recv des sockets WINC (le changement de socket WINC).

  4. Utiliser l’image retournée par image.binary() au lieu de s’attendre à une modification sur place (le changement de binary).

  5. Réduire les images avant find_apriltags() pour rester sous 64 Ko de pixels (le plafond de find_apriltags).

Tous les autres scripts fonctionnent sans modification.