v2.4.0¶
v2.4.0 schreibt find_lines() als Hough-Transform-Detektor neu, fügt find_line_segments(), find_datamatrices()-Data-Matrix-Dekodierung, sensor.set_vsync_output(), Image-Slice-Lesen/-Schreiben und viele neue skalierte Framegrößen für höhere FPS hinzu. find_lines(), match_descriptor() und skip_frames() haben sich geändert — lesen Sie die nachstehenden Änderungen mit Kompatibilitätsbruch.
Höhepunkte¶
find_lines()— neu geschrieben als Hough-Transform-Liniendetektor, der Linienobjekte zurückgibt (funktioniert jetzt auf RGB565, nicht mehr nur auf Graustufen).find_line_segments()— endliche Liniensegmente erkennen.find_datamatrices()— Data-Matrix-Dekodierung.sensor.set_vsync_output()— VSYNC auf einem I/O-Pin ansteuern zur Kamerasynchronisation.Mehr Framegrößen — viele zusätzliche skalierte Auflösungen für höhere FPS.
Kompatibilitätsbruch:
find_lines(),match_descriptor()undskip_frames()haben sich geändert — siehe die Änderungen mit Kompatibilitätsbruch.
Neue Funktionen¶
image.find_line_segments()— nicht-unendliche Liniensegmente finden; Linienobjekte erhielten einen.length()-Accessor.image.find_datamatrices()— Data-Matrix-Dekodierung, mit Beispielskripten.sensor.set_vsync_output(pin)— das VSYNC-Signal auf einem GPIO-Pin ausgeben zur Kamerasynchronisation (OpenMV 2 / OpenMV 3).Image-Slices — das Image-Subscript-/Puffer-Protokoll unterstützt jetzt das Lesen und Schreiben von Slices der Bilddaten.
Viele zusätzliche Kombinationen aus skalierter Auflösung / Framegröße hinzugefügt, um höhere Bildraten zu unterstützen;
clock.fps()setzt seine Akkumulatoren jetzt alle 2 s zurück, sodass die gemeldete FPS der aktuellen Rate folgt.
Weitere Änderungen und Verbesserungen¶
Der OV7725 wird auf QVGA gefenstert, wenn die Auflösung ≤ VGA ist (weniger verworfene Einzelbilder bei hohen Aufnahmeraten), und seine PLL wurde auf 6× mit reduziertem externem Takt gesetzt (OpenMV 2 48 MHz, OpenMV 3 54 MHz), was das Sensor-Frame-Timing verändert.
Fehlerkorrekturen¶
Bildverarbeitung:
Den
compress_for_ide()-Puffergrößenfehler behoben (Start-/End-Marker), QR-Dekodierung (sowie Upstream-quirc-Zell-Bitmap-Indexierung und Korrekturen der Ausrichtungsmuster-Grenzen).
Sensor und Konnektivität:
Den OpenMV-2-Sensortakt gesenkt, um mit der höheren Sensor-PLL zusammenzuarbeiten (Kamera-Init/Sync), und WINC
socket.recvfrom()so geändert, dass die tatsächlich empfangene Größe zurückgegeben wird (Fehler bei nicht-positiver Größe statt Rückgabe eines veralteten Werts).
Hardware- und Board-Unterstützung¶
VSYNC-Ausgabe auf einem GPIO-Pin (OpenMV 2 / OpenMV 3) als Grundlage für
sensor.set_vsync_output().OpenMV 3 —
pyb.UARTUART1 aktiviert.
API-Änderungen mit Kompatibilitätsbruch¶
Für Benutzer sichtbare API-Brüche zwischen v2.3.0 und v2.4.0. Umfang: Python-C-Module in modules/ und Python-Bibliotheken in scripts/libraries/.
Jede Änderung ist mit ihrer Auswirkung gekennzeichnet:
major — betrifft die meisten Skripte, die die Funktion verwendet haben; Sie müssen Code portieren.
minor — eng begrenzte API; betrifft nur Skripte, die sie verwendet haben.
behavior — gleiche API, andere Ergebnisse; abgestimmte Skripte erneut prüfen.
Änderungen sind in dieser Reihenfolge nach Auswirkung gruppiert. Wenn Sie nur Ihren Code portieren möchten, springen Sie zur Migrations-Checkliste am Ende. Jeder Commit-Hash verlinkt auf seinen Diff auf GitHub.
find_lines() neu geschrieben als Hough-Detektor (major)¶
image.find_lines() wurde als Hough-Transform-Detektor neu geschrieben. Es gibt keine Liste von (x1, y1, x2, y2)-Tupeln mehr zurück — es gibt Linienobjekte zurück (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — und funktioniert jetzt auch auf RGB565 (nicht mehr nur auf Graustufen). Das threshold-Argument änderte sich von einem Float-Wert 0.0–1.0 zu einer ganzzahligen Summe der Kantenmagnitude, line.magnitude ist jetzt eine Ganzzahl, und neue Schlüsselwörter theta_margin / rho_margin wurden hinzugefügt. Portieren Sie Tupel-Entpackungscode auf die Linienobjekte und stimmen Sie threshold neu ab.
match_descriptor() gibt ein Match-Objekt zurück (minor)¶
image.match_descriptor() (ORB) gibt jetzt ein kptmatch-Objekt mit den Accessoren .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() zurück anstelle eines einfachen 8-Tupels. Das Objekt ist weiterhin subscriptable/sliceable, sodass die positionsbasierte Indexierung weiterhin funktioniert, aber Code, der isinstance(result, tuple) verwendete (oder Tupel-Methoden nutzte), muss die neuen Accessoren verwenden.
Commits: e960546b6
sensor.skip_frames() ist jetzt zeitbasiert (behavior)¶
sensor.skip_frames() wurde überarbeitet, um ein time=-Schlüsselwort zu akzeptieren (Standard ~300 ms), und ist jetzt standardmäßig zeitbasiert, anstatt eine feste Anzahl von Einzelbildern abzuarbeiten, und stoppt vorzeitig, sobald die Zeit abgelaufen ist. Skripte, die auf eine exakte Einzelbildanzahl angewiesen waren, sollten eine explizite Anzahl übergeben und/oder time= entsprechend setzen.
Commits: a039b5d1c
Migrations-Checkliste¶
Für eine saubere Portierung auf v2.4.0 fällt typischerweise folgende Arbeit an:
Die
find_lines()-Tupel-Entpackung auf die Linienobjekte portieren und den ganzzahligenthresholdneu abstimmen (die find_lines-Neuschreibung).Die
kptmatch-Accessoren verwenden, anstattmatch_descriptor()-Ergebnisse als Tupel zu behandeln (die match_descriptor-Änderung).Eine explizite Anzahl und/oder
time=ansensor.skip_frames()übergeben, wenn Sie auf eine feste Einzelbildanzahl angewiesen waren (die skip_frames-Änderung).
Alle anderen Skripte laufen unverändert.