v2.1.0

v2.1.0 est une version massive de modernisation de l’API. Elle remplace le descripteur de points clés FREAK par ORB, remanie find_blobs() / les histogrammes / les statistiques en API basées sur des objets, renomme les fonctions d’exposition/gain/balance des blancs automatiques du sensor, ajoute la détection de QR codes et la correction d’objectif OV7725, et met en service la carte initiale OpenMV Cam M7. De nombreuses API ont changé — lisez les changements incompatibles ci-dessous.

Points forts

  • Points clés ORB — le descripteur FREAK a été remplacé par ORB (find_keypoints() / match_descriptor() remaniés).

  • API objetsfind_blobs(), get_histogram(), get_statistics() renvoient désormais des objets avec des accesseurs nommés.

  • QR codes — ajout de la détection image.find_qrcodes().

  • OpenMV Cam M7 — prise en charge initiale de la carte.

  • Sensorset_auto_whitebal() / set_auto_gain() / set_auto_exposure() (renommées) et set_lens_correction().

  • Incompatible : le point clé/descripteur, le blob/histogramme/statistiques, les fonctions automatiques du capteur, et plusieurs autres API ont changé — voir les changements incompatibles.

Nouvelles fonctionnalités

  • OpenMV Cam M7 — ajout de la prise en charge initiale de la carte OpenMV 3 (M7).

  • QR codes — ajout de image.find_qrcodes() avec un exemple qrcodes.py.

  • Points clés ORB — nouveau système de descripteur ORB : find_keypoints() avec un argument corner_detector (CORNER_FAST / CORNER_AGAST), max_keypoints / scale_factor ; match_descriptor() avec un mot-clé filter_outliers et une estimation de rotation ; sauvegarde/chargement des points clés.

  • API objetsimage.get_histogram() / get_statistics() / get_percentile() renvoient des objets histogramme/statistiques ; find_blobs() renvoie des objets blob (rect() / cx() / cy() / code() / area() / pixels()) avec area_threshold / pixels_threshold / merge / margin / invert et x_stride / y_stride.

  • Sensor — ajout de sensor.set_lens_correction(enable, radi, coef) pour l’ombrage d’objectif de l’OV7725, sensor.set_windowing() accepte désormais aussi un tuple (w, h) (auto-centré), et image.Image(..., copy_to_fb=True) / load_image(copy_to_fb=True).

  • Ajout de scripts d’exemple de suivi de couleur, d’esclave SPI/I2C Arduino, de points clés, et d’histogramme/statistiques.

Autres changements et améliorations

  • L’IDE peut désormais interrompre un main.py en cours d’exécution ; find_blobs() / find_qrcodes() / get_statistics() plus rapides ; ORB utilise une distance de Hamming par popcount ; la correction d’objectif utilise moins de RAM ; une règle udev Linux empêche ModemManager de s’emparer du port série.

Corrections de bugs

Caméra et imagerie :

  • Correction du nettoyage/invalidation du cache DMA du M7 (trames corrompues), d’une ligne supplémentaire parasite à la fin de chaque trame, des limites de dépassement du tampon d’image JPEG, de la libération du tampon d’image en cas d’échec de compress(), de la précision / ROI / gestion d’ensemble vide d’ORB, et de la géométrie de load_image(copy_to_fb=True).

Système :

  • Correction de la prise en charge de l’ADC du F7, d’un nom de registre de l’OV7725, de la synchronisation du programme d’amorçage/USB, utilisation de WFI pendant l’attente des captures, et passage de l’exemple de diffuseur MJPEG en mode non bloquant avec des délais d’expiration par client.

Matériel et prise en charge des cartes

  • OpenMV Cam M7 (OpenMV 3) — prise en charge initiale de la carte.

  • OV7725 — prise en charge de la correction d’objectif (ombrage).

Changements d’API incompatibles

Ruptures d’API visibles par l’utilisateur entre v2.0.0 et v2.1.0. Portée : modules C Python dans modules/ et bibliothèques Python dans scripts/libraries/.

Chaque changement est étiqueté selon son impact :

  • major — affecte la plupart des scripts qui utilisaient la fonctionnalité ; vous devrez porter du code.

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

  • behavior — 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 voulez simplement porter votre code, passez à la liste de vérification de migration à la fin. Chaque hash de commit renvoie à son diff sur GitHub.

FREAK remplacé par ORB ; API de descripteur remaniée (major)

Le descripteur de points clés FREAK a été supprimé et remplacé par ORB : image.FREAK n’existe plus (utilisez image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() ne prennent plus d’argument initial de type de descripteur (il est déduit de l’objet), match_descriptor() renvoie désormais un tuple à 8 éléments (cx, cy, x, y, w, h, match_count, rotation) (le dernier élément est un décompte brut, pas un pourcentage), et draw_keypoints() exige un objet de points clés au lieu d’une liste brute (x, y, angle). find_keypoints() a gagné corner_detector / max_keypoints / scale_factor avec des valeurs par défaut modifiées.

Commits : e2d0c4840, bba8e5a9e, 6000684cb

Renommage des fonctions automatiques du capteur (major)

sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() ont été renommées en sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (les anciens noms ont été supprimés). Chacune a gagné un mot-clé optionnel value= pour définir une valeur manuelle au lieu du mode automatique.

Commits : 1b22a2961

Histogramme / statistiques remaniés en API objets (major)

La surface d’histogramme/statistiques a été remaniée en image.get_histogram() / get_statistics() / get_percentile() basés sur des objets, renvoyant des objets histogramme/statistiques. Les anciens résultats plats d’histogramme/statistiques et les méthodes bin_count / l_bin_count / a_bin_count / b_bin_count ont été supprimés (utilisez len(histogram.bins()), etc.).

Commits : 011108412, 9f37c83de

scale de find_features() renommé (major)

image.find_features() (Haar) a renommé son mot-clé scale= en scale_factor=. Mettez à jour les appels find_features(cascade, scale=...) en scale_factor=....

Commits : 96e4f770c

find_blobs() renvoie des objets ; find_markers() supprimé (minor)

image.find_blobs() renvoie désormais des objets blob avec des accesseurs nommés (l’accès par index fonctionne toujours pour la rétrocompatibilité), et image.find_markers() a été supprimé — utilisez plutôt find_blobs(..., merge=True, margin=...). La fonction de rappel de filtre avancé de blob de couleur n’est plus prise en charge.

Commits : af15ec6eb

img.copy_to_fb() remplacé (minor)

La méthode img.copy_to_fb() a été remplacée par un mot-clé copy_to_fb= sur image.Image / load_image(). Utilisez image.Image(path, copy_to_fb=True) pour charger de grandes images directement dans le tampon d’image.

Commits : 1645ab94b

compress() rejette une qualité hors plage (behavior)

image.compress() / compressed() lèvent désormais une erreur lorsque quality est en dehors de 1–100 au lieu de la limiter silencieusement. Limitez quality à 1–100 avant l’appel. Par ailleurs, le tampon JPEG de l’OpenMV 3 a été réduit de 64 Ko à 23000 octets, de sorte que les grandes trames peuvent désormais lever une erreur de mémoire insuffisante — réduisez la qualité ou la taille de trame JPEG.

Commits : 9efd7474a, 9a7c3defc

Le zoom de lens_corr() est désormais fonctionnel (behavior)

image.lens_corr() applique désormais réellement son argument zoom (il était auparavant analysé mais sans effet), de sorte que la sortie diffère pour les scripts qui passaient un zoom différent de la valeur par défaut. Revérifiez le réglage de lens_corr().

Commits : d6b49adef

Liste de vérification de migration

Pour un portage propre vers v2.1.0, le travail habituel est :

  1. Remplacer image.FREAK par image.ORB, supprimer l’argument de type de descripteur, et mettre à jour le déballage du tuple de match_descriptor() / draw_keypoints() vers l’objet de points clés (le remaniement ORB).

  2. Renommer sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() vers les formes set_auto_* (le renommage des fonctions automatiques).

  3. Déplacer le code d’histogramme/statistiques vers les méthodes objets (le remaniement histogramme/statistiques).

  4. Renommer scale= de find_features() en scale_factor= (le renommage de find_features).

  5. Utiliser les accesseurs d’objet blob et remplacer find_markers() par find_blobs(merge=True, ...) (le changement de find_blobs) ; remplacer img.copy_to_fb() par le mot-clé copy_to_fb= (le changement de copy_to_fb).

  6. Limiter la qualité de compress() à 1–100 et revérifier les tailles JPEG sur l’OpenMV 3 (le changement de compress) ; régler à nouveau le zoom de lens_corr() (le changement de lens_corr).

Tous les autres scripts s’exécutent sans modification.