v2.4.0¶
v2.4.0 réécrit find_lines() sous forme de détecteur par transformée de Hough, ajoute find_line_segments(), le décodage de matrices de données find_datamatrices(), sensor.set_vsync_output(), la lecture/écriture de tranches d’image et de nombreuses nouvelles tailles de trame mises à l’échelle pour un FPS plus élevé. find_lines(), match_descriptor() et skip_frames() ont changé — consultez les modifications incompatibles ci-dessous.
Points forts¶
find_lines()— réécrit sous forme de détecteur de lignes par transformée de Hough renvoyant des objets ligne (fonctionne désormais sur RGB565, et non plus seulement en niveaux de gris).find_line_segments()— détecte des segments de droite finis.find_datamatrices()— décodage de matrices de données.sensor.set_vsync_output()— pilote VSYNC sur une broche d’E/S pour la synchronisation de la caméra.Davantage de tailles de trame — de nombreuses résolutions mises à l’échelle supplémentaires pour un FPS plus élevé.
Incompatible :
find_lines(),match_descriptor()etskip_frames()ont changé — consultez les modifications incompatibles.
Nouvelles fonctionnalités¶
image.find_line_segments()— trouve des segments de droite non infinis ; les objets ligne ont reçu un accesseur.length().image.find_datamatrices()— décodage de matrices de données, avec des scripts d’exemple.sensor.set_vsync_output(pin)— sort le signal VSYNC sur une broche GPIO pour la synchronisation de la caméra (OpenMV 2 / OpenMV 3).Tranches d’image — l’indexation d’image / le protocole de tampon prennent désormais en charge la lecture et l’écriture de tranches des données d’image.
Ajout de nombreuses combinaisons supplémentaires de résolution / taille de trame mises à l’échelle pour prendre en charge des fréquences d’images plus élevées ;
clock.fps()réinitialise désormais ses accumulateurs toutes les 2 s afin que le FPS rapporté suive le débit récent.
Autres changements et améliorations¶
L’OV7725 est fenêtré en QVGA lorsque la résolution est ≤ VGA (moins de trames perdues à des cadences de capture élevées) et sa PLL a été réglée à 6× avec une horloge externe réduite (OpenMV 2 48 MHz, OpenMV 3 54 MHz), modifiant la temporisation des trames du capteur.
Corrections de bogues¶
Imagerie :
Correction de l’erreur de taille de tampon de
compress_for_ide()(marqueur de début/fin), du décodage QR (plus les corrections en amont de l’indexation du bitmap de cellules quirc et des limites du motif d’alignement).
Capteur et connectivité :
Abaissement de l’horloge du capteur de l’OpenMV 2 pour fonctionner avec la PLL de capteur plus élevée (init/sync de la caméra) et adaptation de
socket.recvfrom()du WINC pour qu’il renvoie la taille réellement reçue (en générant une erreur sur une taille non positive au lieu de renvoyer une valeur périmée).
Prise en charge du matériel et des cartes¶
Sortie VSYNC sur une broche GPIO (OpenMV 2 / OpenMV 3) sous-tendant
sensor.set_vsync_output().OpenMV 3 — activation de l’UART1 de
pyb.UART.
Modifications incompatibles de l’API¶
Ruptures d’API visibles par l’utilisateur entre la v2.3.0 et la v2.4.0. Portée : modules C Python dans modules/ et bibliothèques Python dans scripts/libraries/.
Chaque modification est étiquetée 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 modifications sont regroupées par impact dans cet ordre. Si vous souhaitez simplement porter votre code, passez directement à la liste de contrôle de migration à la fin. Chaque empreinte de commit renvoie à son diff sur GitHub.
find_lines() réécrit en détecteur de Hough (majeur)¶
image.find_lines() a été réécrit sous forme de détecteur par transformée de Hough. Il ne renvoie plus une liste de tuples (x1, y1, x2, y2) — il renvoie des objets ligne (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — et fonctionne désormais aussi sur RGB565 (et non plus seulement en niveaux de gris). L’argument threshold est passé d’un flottant 0.0–1.0 à une somme entière de magnitudes de contour, line.magnitude est désormais un entier, et de nouveaux mots-clés theta_margin / rho_margin ont été ajoutés. Portez le code de décomposition de tuples vers les objets ligne et réajustez threshold.
match_descriptor() renvoie un objet de correspondance (mineur)¶
image.match_descriptor() (ORB) renvoie désormais un objet kptmatch avec les accesseurs .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() au lieu d’un simple tuple à 8 éléments. L’objet reste indexable/découpable, donc l’indexation positionnelle continue de fonctionner, mais le code qui faisait isinstance(result, tuple) (ou utilisait des méthodes de tuple) doit utiliser les nouveaux accesseurs.
Commits : e960546b6
sensor.skip_frames() est désormais basé sur le temps (comportement)¶
sensor.skip_frames() a été retravaillé pour accepter un mot-clé time= (par défaut ~300 ms) et est désormais basé sur le temps par défaut plutôt que d’exécuter un nombre fixe de trames, s’arrêtant tôt une fois le temps écoulé. Les scripts qui s’appuyaient sur un nombre exact de trames doivent passer un nombre explicite et/ou définir time= en conséquence.
Commits : a039b5d1c
Liste de contrôle de migration¶
Pour un portage propre vers la v2.4.0, le travail typique consiste à :
Porter la décomposition de tuples de
find_lines()vers les objets ligne et réajuster lethresholdentier (la réécriture de find_lines).Utiliser les accesseurs
kptmatchau lieu de traiter les résultats dematch_descriptor()comme un tuple (la modification de match_descriptor).Passer un nombre explicite et/ou
time=àsensor.skip_frames()si vous vous appuyiez sur un nombre fixe de trames (la modification de skip_frames).
Tous les autres scripts fonctionnent sans changement.