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, etfind_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, etNet.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).Imagerie —
image.find_circles()a gagné les mots-clésr_min/r_max/r_step(Hough plus rapide),find_keypoints()et lefind_features()Haar acceptent désormais les images RGB, etimage.compress()/ l’encodage JPEG prennent désormais en charge les images binaires (bitmap).Démarrage —
boot.pys’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/xallocplus clairs ; suppression du bruit printf dennpendant le chargement du réseau ; réorganisation du dépôt (exemples →scripts/, outils →tools/, cascades Haar →ml/). Le modulennn’est pas disponible sur l’OpenMV 2 (mémoire flash insuffisante).
Corrections de bogues¶
Imagerie :
Correction de
fast_atan2fpour x≤0 (auparavant toujours 0 — revérifiez les angles de blob / ligne / point clé), de la gestion mémoire defind_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), defind_edges(EDGE_CANNY)avec une ROI, de la macroTO_GS_PIXEL(intégrale / morphologie), du streaming bitmap/JPEG pour les trames en niveaux de gris (bpp==0), dupop_frontde la liste de points clés/blobs, et des résultats dematch_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
Liste de vérification pour la migration¶
Pour un portage propre vers la v3.0.0, le travail typique consiste à :
Remplacer
image.find_number()/image.classify_object()par le modulenn(la migration nn).Entourer
sensor.sleep()/sensor.reset()d’untry/exceptau lieu de vérifier un retour booléen (le changement de sensor.sleep).Gérer les nombres réels d’octets retournés par
send/recvdes sockets WINC (le changement de socket WINC).Utiliser l’image retournée par
image.binary()au lieu de s’attendre à une modification sur place (le changement de binary).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.