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 dessin —
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints().Binaire / morphologie —
binary(),invert(),and/or/xor/...,erode()/dilate()/morph(),negate()/difference().Points clés — descripteurs FAST / FREAK / LBP avec
match_descriptor()/save_descriptor()/load_descriptor().Nouveaux modules —
lcd,mjpeg,gif(couleur) et le module thermiquemlx.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()etsensor.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()etwidth()/height()/format().Points clés / descripteurs — extraction de points clés FAST via
find_keypoints(), unmatch_descriptor()unifié etsave_descriptor()/load_descriptor()pour FREAK / LBP, ainsi qu’une cascade Haar/LBP de profil de visage.Couleur / statistiques —
image.statisticset 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),gifcouleur (avecGif.loop()) et le module de caméra thermiquemlx, 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 trameHQVGAetimage.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 thermiquemlxet 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 à :
Définir explicitement
sensor.set_pixformat()/sensor.set_framesize()aprèssensor.reset()(le changement de reset).Encapsuler
sensor.snapshot()danstry/except RuntimeErrorsi vous devez tolérer les dépassements de délai du capteur (le changement de snapshot).Intercepter l’exception de
sensor.set_pixformat()au lieu de vérifier la valeurFalse(le changement de set_pixformat).
Tous les autres scripts fonctionnent sans modification.