v1.2.0

v1.2.0 est une version fondatrice de très grande ampleur qui met en place la majeure partie de l’API d’imagerie classique d’OpenMV : les méthodes de dessin, les opérations binaires / de morphologie, les descripteurs de points clés (FAST / FREAK / LBP), les conversions de couleur et image.statistics, les entrées/sorties de fichiers BMP / PPM / JPEG, les modules lcd, mjpeg, gif et le module thermique mlx, la caméra OV7725 et de nombreuses commandes sensor. Certains comportements fondamentaux de sensor ont changé — consultez les changements incompatibles ci-dessous.

Points forts

  • API de dessindraw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints().

  • Binaire / morphologiebinary(), invert(), and/or/xor/..., erode() / dilate() / morph(), negate() / difference().

  • Points clés — descripteurs FAST / FREAK / LBP avec match_descriptor() / save_descriptor() / load_descriptor().

  • Nouveaux moduleslcd, mjpeg, gif (couleur) et le module thermique mlx.

  • Prise en charge de la caméra OV7725 ; image.statistics ; entrées/sorties de fichiers BMP/PPM/JPEG.

  • Incompatible : le comportement de sensor.reset(), sensor.snapshot() et sensor.set_pixformat() a changé — voir les changements incompatibles.

Nouvelles fonctionnalités

  • Dessin — ajout de image.draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() avec arguments nommés (couleur, épaisseur, …).

  • Binaire / morphologie — ajout de image.binary(), invert(), and() / nand() / or() / nor() / xor() / xnor(), erode() / dilate() / morph(), negate() / difference(), pixels(), centroid(), orientation_radians() / orientation_degrees() et width() / height() / format().

  • Points clés / descripteurs — extraction de points clés FAST via find_keypoints(), un match_descriptor() unifié et save_descriptor() / load_descriptor() pour FREAK / LBP, ainsi qu’une cascade Haar/LBP de profil de visage.

  • Couleur / statistiquesimage.statistics et fonctions de conversion de couleur (rgb_to_lab / lab_to_rgb / rgb_to_grayscale / grayscale_to_rgb).

  • Entrées/sorties de fichiers — chargement et enregistrement BMP / PPM (P2/P3/P5/P6) / JPEG (y compris le JPEG en niveaux de gris et le sous-échantillonnage de chrominance 4:2:0 / 4:2:2).

  • Modules — nouveaux modules lcd (shield LCD), mjpeg (enregistrement vidéo), gif couleur (avec Gif.loop()) et le module de caméra thermique mlx, chacun accompagné de scripts d’exemple.

  • Capteur — ajout de sensor.get_id() (+ constantes PID OV9650/OV2640/OV7725), sensor.set_special_effect() (constantes SDE_*), sensor.set_image_filter() (FILTER_BW / FILTER_SKIN), la taille de trame HQVGA et image.set_pixel(x, y, …).

  • WiFi — ajout du pilote WiFi ATWINC1500 et des bases du BSP OpenMV 1/2, ainsi qu’un exemple BLE.

Autres changements et améliorations

  • Le tampon d’image est désormais compressé en JPEG avant d’être diffusé vers OpenMV IDE (bande passante réduite) ; la compression JPEG est effectuée sur place ; le zoom H/V de l’OV7725 permet une mise à l’échelle arbitraire ; détection de visages Haar améliorée (plus rapide) fonctionnant en QVGA.

Corrections de bogues

Imagerie :

  • Correction du calcul de l’image intégrale, de la corruption du filtre median(), du calcul du centroïde, des filtres peau RGB / noir et blanc sur entrée RGB, et lecture/écriture BMP/PPM en niveaux de gris plus rapide.

Capteur et système :

  • Correction des minuteurs pyb.Servo (le Servo fonctionne désormais), de la résolution HQVGA, de la fiabilité de l’initialisation de la carte SD, de la réinitialisation du stockage après un redémarrage logiciel, et de la relance du REPL en l’absence de script.

Matériel et prise en charge des cartes

  • Capteur de caméra OV7725.

  • Shield LCD (module lcd), caméra thermique mlx et bases du WiFi ATWINC1500.

Changements d’API incompatibles

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

Les trois changements incompatibles sont des changements de comportement des fonctions sensor fondamentales (même API, comportement différent) — revérifiez les scripts affectés. Chaque hachage de commit renvoie à son diff sur GitHub. (La grande majorité de cette version correspond à une nouvelle API construite dans la plage v1.1→v1.2 et est donc additive, non incompatible.)

sensor.reset() n’applique plus de configuration par défaut (comportement)

sensor.reset() n’applique plus de configuration par défaut intégrée (pixformat / framesize / framerate / gain / contraste / luminosité / saturation). Les scripts qui comptaient sur reset() pour laisser une configuration par défaut utilisable doivent désormais appeler explicitement sensor.set_pixformat() et sensor.set_framesize() (ainsi que tout autre réglage) après reset().

Commits : d1e782df3

sensor.snapshot() lève une exception en cas de dépassement de délai (comportement)

sensor.snapshot() lève désormais RuntimeError("Sensor Timeout!!") lorsque le capteur dépasse le délai au lieu de rester bloqué indéfiniment. Encapsulez snapshot() dans try / except RuntimeError si vous devez tolérer les dépassements de délai.

Commits : e3f41d674

sensor.set_pixformat() lève une exception pour un format non pris en charge (comportement)

sensor.set_pixformat() lève désormais une exception lorsqu’on lui passe un format de pixel non pris en charge au lieu de retourner False. Le code qui vérifiait la valeur de retour False doit désormais intercepter l’exception.

Commits : e0c5822c2

Liste de contrôle pour la migration

Pour un portage propre vers v1.2.0, le travail habituel consiste à :

  1. Définir explicitement sensor.set_pixformat() / sensor.set_framesize() après sensor.reset() (le changement de reset).

  2. Encapsuler sensor.snapshot() dans try / except RuntimeError si vous devez tolérer les dépassements de délai du capteur (le changement de snapshot).

  3. Intercepter l’exception de sensor.set_pixformat() au lieu de vérifier la valeur False (le changement de set_pixformat).

Tous les autres scripts fonctionnent sans modification.