v2.7.0

v2.7.0 modernise l’API d’auto-gain / auto-exposition / balance des blancs du sensor vers des unités physiques (dB / microsecondes), refond la corrélation de phase find_displacement() (en ajoutant rotation/échelle), et ajoute get_similarity() (SSIM), chrominvar() / illuminvar(), des tampons d’image supplémentaires et une bibliothèque MQTT. C’est une importante version avec des changements incompatibles — lisez les changements incompatibles ci-dessous.

Points forts

  • API capteur moderneset_auto_gain() / set_auto_exposure() / set_auto_whitebal() utilisent désormais des dB / microsecondes, avec les correspondants get_gain_db() / get_exposure_us() / get_rgb_gain_db().

  • Corrélation de phasefind_displacement() retravaillé avec rotation / échelle et find_rotscale() / linpolar() / logpolar().

  • SSIM — similarité structurelle image.get_similarity().

  • Tampons d’image supplémentairessensor.alloc_extra_fb() / dealloc_extra_fb().

  • MQTT — une nouvelle bibliothèque MQTT.

  • Incompatible : l’API de gain/exposition/balance des blancs du capteur, find_displacement() / les tailles de trame FFT, find_number(), les outils de micrologiciel WINC et le z_rotation() des AprilTag ont tous changé — voir les changements incompatibles.

Nouvelles fonctionnalités

  • Capteur — ajout de sensor.get_gain_db(), sensor.get_exposure_us(), sensor.get_rgb_gain_db(), d’un mot-clé gain_db_ceiling sur set_auto_gain(), de la prise en charge hmirror / vflip du MT9V034, et de sensor.alloc_extra_fb() / sensor.dealloc_extra_fb() pour des tampons d’image supplémentaires en RAM.

  • Image — ajout de remove_shadows(), min() / max() (différence de trames), get_similarity() (SSIM) avec un exemple de similarité structurelle, chrominvar() / illuminvar(), find_rotscale(), linpolar() / logpolar(), des mots-clés threshold / offset / invert sur les filtres adaptatifs mean() / mode() / median() / midpoint(), len() / l’indexation sur l’objet keypoints, et un accesseur .match() sur l’objet de correspondance de points clés.

  • Bibliothèques / réseau — ajout d’une bibliothèque MQTT (avec un exemple WiFi MQTT) et d’un mode network.WINC.MODE_BSP pour programmer le micrologiciel WINC via l’UART de débogage.

  • Exemples — ajout de scripts d’exemple basse consommation deep_sleep.py / stop_mode.py, de flux optique avancé, et de scripts polaires linéaires/logarithmiques ; le micrologiciel analyse désormais uart.ini au démarrage pour activer un UART REPL.

Autres changements et améliorations

  • get_regression() a gagné les mots-clés area_threshold / pixels_threshold et une régression robuste plus rapide (pour le suivi de ligne / la course) ; get_pixel() prend désormais en charge les images Bayer ; ajout des bases STM32H7 (en-têtes CMSIS / HAL / programme d’amorçage — la carte H7 n’est pas encore utilisable) ; mise à jour du micrologiciel WINC1500 intégré (19.4.4 / 19.5.2).

Corrections de bogues

Imagerie :

  • Correction du bogue de dépassement de limites de la recherche en losange de find_template(), de la corruption de logpolar / linpolar, et de illuminvar() qui s’emballait sur des valeurs de couleur proches de zéro.

Capteur et système :

  • Correction de bogues du contrôle automatique de gain, restauration de la taille MAIN_FB lors de snapshot() (afin que copy_to_fb à une résolution différente, le redimensionnement du FB et le pooling de flux optique fonctionnent à nouveau), du délai d’attente gethostbyname du WINC, de l’effacement de l’état pydfu sur le programme d’amorçage H7, et des modes basse consommation stop/standby.

Matériel et prise en charge des cartes

  • STM32H7 — bases (CMSIS / HAL / programme d’amorçage) ; la carte OpenMV H7 n’est pas encore utilisable dans cette version.

  • WINC1500 — mise à jour du micrologiciel intégré.

Changements d’API incompatibles

Ruptures d’API visibles par l’utilisateur entre v2.6.0 et v2.7.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 votre code.

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

  • comportement — 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 voulez simplement porter votre code, passez à la liste de contrôle de migration à la fin. Chaque hachage de commit renvoie à son diff sur GitHub.

sensor.set_auto_gain() retravaillé en dB (majeur)

sensor.set_auto_gain() n’accepte plus le mot-clé entier value= et ne renvoie plus True / False. Utilisez sensor.set_auto_gain(False, gain_db=...) (une valeur flottante en dB), relisez-la avec le nouveau sensor.get_gain_db(), et encadrez l’appel d’un try / except puisqu’un échec lève désormais ValueError.

Commits : b906c5f19

sensor.set_auto_exposure() retravaillé en microsecondes (majeur)

sensor.set_auto_exposure() n’accepte plus le mot-clé entier value= et ne renvoie plus True / False. Utilisez sensor.set_auto_exposure(False, exposure_us=...), relisez-la avec le nouveau sensor.get_exposure_us(), et gérez le ValueError levé en cas d’échec.

Commits : 7be0a7a18

find_displacement() / les tailles de trame FFT refondus (majeur)

La corrélation de phase a été refondue. image.find_displacement() renvoie désormais un objet de déplacement (avec x_translation() / y_translation() — anciennement x_offset / y_offset — plus rotation() / scale() et de nouveaux mots-clés logpolar / fix_rotation_scale) ; l’objet rot-scale séparé a été supprimé et find_rotscale() ajouté. Les constantes de taille de trame FFT ont été renommées/supprimées : sensor.B40x30 a été entièrement supprimé, et sensor.B64x32 / B64x64 ont été renommés en majuscules sensor.B64X32 / B64X64 (avec les nouveaux B128X64 / B128X128).

Commits : c78f91b42, 213396d09

sensor.set_auto_whitebal() retravaillé en dB (mineur)

sensor.set_auto_whitebal() a remplacé son mot-clé entier value=[r, g, b] par rgb_gain_db=[r, g, b] (dB flottant) et renvoie désormais None (levant ValueError en cas d’échec) au lieu de True / False. Utilisez le nouveau sensor.get_rgb_gain_db() pour relire les gains.

Commits : 30ecbdc4f

set_hmirror() / set_vflip() renvoient None (mineur)

sensor.set_hmirror() et sensor.set_vflip() renvoient désormais None et lèvent ValueError en cas d’échec au lieu de renvoyer un état True / False. Supprimez tout code qui se ramifie sur leur valeur de retour.

Commits : aeb023804

Les outils de micrologiciel WINC exigent un chemin de fichier (mineur)

L’outillage de micrologiciel de network.WINC a changé : wlan.fw_dump() / wlan.fw_update() prennent désormais un argument obligatoire de chemin de fichier de micrologiciel et le WINC est ouvert dans un mode de programmation (network.WINC(mode=...)). Mettez à jour les appels sans argument pour passer un chemin (par ex. wlan.fw_update("/winc_19_5_2.bin")).

Commits : fcc3b0b9c

image.find_number() exige une ROI 28x28 (comportement)

image.find_number() (LeNet) exige désormais une ROI exactement 28x28 qui tient à l’intérieur de l’image et lève une erreur sinon (au lieu de s’exécuter sur une ROI arbitraire/sur l’image entière). Passez une roi=(x, y, 28, 28) explicite.

Commits : 4d09a13f3

Le signe de z_rotation() des AprilTag inversé (comportement)

Le z_rotation() des AprilTag (et le rotation() associé) utilise désormais une convention de coordonnées droitière, de sorte que l’angle renvoyé est négatif par rapport aux versions précédentes. Les scripts qui dépendent de l’ancien signe doivent inverser la valeur ou ajuster leur calcul d’angle.

Commits : 7673aaf74

Liste de contrôle de migration

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

  1. Porter set_auto_gain() vers gain_db= + get_gain_db() et gérer ValueError (la refonte de l’auto-gain).

  2. Porter set_auto_exposure() vers exposure_us= + get_exposure_us() (la refonte de l’auto-exposition).

  3. Mettre à jour find_displacement() vers l’objet de déplacement et renommer les constantes de taille de trame FFT (la refonte de find_displacement).

  4. Porter set_auto_whitebal() vers rgb_gain_db= + get_rgb_gain_db() (la refonte de la balance des blancs) et cesser de vérifier le retour de set_hmirror() / set_vflip() (le changement de mirror/flip).

  5. Passer un chemin de micrologiciel aux outils fw_* du WINC (le changement des outils WINC).

  6. Passer une roi 28x28 à find_number() (le changement de find_number) et ajuster le calcul d’angle des AprilTag pour le signe inversé de z_rotation() (le changement de z_rotation).

Tous les autres scripts fonctionnent sans modification.