v2.1.0¶
v2.1.0 ist ein umfangreiches API-Modernisierungs-Release. Es ersetzt den FREAK-Schlüsselpunkt-Deskriptor durch ORB, überarbeitet find_blobs() / Histogramme / Statistiken zu objektbasierten APIs, benennt die Funktionen für automatische Belichtung/Verstärkung/Weißabgleich des sensor-Moduls um, fügt QR-Code-Erkennung und OV7725-Objektivkorrektur hinzu und nimmt das erste OpenMV Cam M7-Board in Betrieb. Viele APIs haben sich geändert — lesen Sie die nachstehenden Breaking Changes.
Highlights¶
ORB-Schlüsselpunkte — der FREAK-Deskriptor wurde durch ORB ersetzt (
find_keypoints()/match_descriptor()überarbeitet).Objekt-APIs —
find_blobs(),get_histogram(),get_statistics()geben jetzt Objekte mit benannten Zugriffsmethoden zurück.QR-Codes — Erkennung mit
image.find_qrcodes()hinzugefügt.OpenMV Cam M7 — erste Board-Unterstützung.
Sensor —
set_auto_whitebal()/set_auto_gain()/set_auto_exposure()(umbenannt) undset_lens_correction().Breaking: die Schlüsselpunkt-/Deskriptor-, Blob-/Histogramm-/Statistik-, Sensor-Automatikfunktions- und mehrere andere APIs haben sich geändert — siehe die Breaking Changes.
Neue Funktionen¶
OpenMV Cam M7 — erste Unterstützung für das OpenMV 3 (M7)-Board hinzugefügt.
QR-Codes —
image.find_qrcodes()mit einemqrcodes.py-Beispiel hinzugefügt.ORB-Schlüsselpunkte — neues ORB-Deskriptorsystem:
find_keypoints()mit einemcorner_detector-Argument (CORNER_FAST/CORNER_AGAST),max_keypoints/scale_factor;match_descriptor()mit einemfilter_outliers-Schlüsselwort und einer Rotationsschätzung; Speichern/Laden von Schlüsselpunkten.Objekt-APIs —
image.get_histogram()/get_statistics()/get_percentile()geben Histogramm-/Statistikobjekte zurück;find_blobs()gibt Blob-Objekte zurück (rect()/cx()/cy()/code()/area()/pixels()) mitarea_threshold/pixels_threshold/merge/margin/invertundx_stride/y_stride.Sensor —
sensor.set_lens_correction(enable, radi, coef)für die Objektiv-Vignettierungskorrektur des OV7725 hinzugefügt,sensor.set_windowing()akzeptiert jetzt auch ein(w, h)-Tupel (automatisch zentriert), sowieimage.Image(..., copy_to_fb=True)/load_image(copy_to_fb=True).Beispielskripte für Farbverfolgung, Arduino-SPI/I2C-Slave, Schlüsselpunkte und Histogramme/Statistiken hinzugefügt.
Weitere Änderungen und Verbesserungen¶
Die IDE kann jetzt ein laufendes
main.pyunterbrechen; schnellerefind_blobs()/find_qrcodes()/get_statistics(); ORB verwendet eine Popcount-Hamming-Distanz; die Objektivkorrektur verbraucht weniger RAM; eine Linux-udev-Regel verhindert, dass der ModemManager den seriellen Port belegt.
Fehlerbehebungen¶
Kamera und Bildgebung:
Das DMA-Cache-Clean/Invalidate des M7 korrigiert (beschädigte Einzelbilder), eine fehlerhafte zusätzliche Zeile am Ende jedes Einzelbildes, die JPEG-Framebuffer-Überlaufgrenzen, das Freigeben des Framebuffers bei
compress()-Fehlschlag, die ORB-Genauigkeit / ROI / Behandlung leerer Mengen sowie die Geometrie vonload_image(copy_to_fb=True).
System:
Die F7-ADC-Unterstützung, einen OV7725-Registernamen und das Bootloader/USB-Timing korrigiert, WFI beim Warten auf Schnappschüsse verwendet und das MJPEG-Streamer-Beispiel mit Timeouts pro Client nicht-blockierend gemacht.
Hardware- und Board-Unterstützung¶
OpenMV Cam M7 (OpenMV 3) — erste Board-Unterstützung.
OV7725 — Unterstützung der Objektivkorrektur (Vignettierung).
Breaking API-Änderungen¶
Für Benutzer sichtbare API-Brüche zwischen v2.0.0 und v2.1.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 — schmale API; betrifft nur Skripte, die sie verwendet haben.
behavior — gleiche API, andere Ergebnisse; abgestimmte Skripte erneut prüfen.
Die Ä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.
FREAK durch ORB ersetzt; Deskriptor-API überarbeitet (major)¶
Der FREAK-Schlüsselpunkt-Deskriptor wurde entfernt und durch ORB ersetzt: image.FREAK existiert nicht mehr (verwenden Sie image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() nehmen kein führendes Deskriptortyp-Argument mehr entgegen (es wird aus dem Objekt abgeleitet), match_descriptor() gibt jetzt ein 8-elementiges Tupel (cx, cy, x, y, w, h, match_count, rotation) zurück (das letzte Element ist ein roher Zähler, kein Prozentsatz), und draw_keypoints() erfordert ein Schlüsselpunkt-Objekt anstelle einer rohen (x, y, angle)-Liste. find_keypoints() erhielt corner_detector / max_keypoints / scale_factor mit geänderten Standardwerten.
Sensor-Automatikfunktionen umbenannt (major)¶
sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() wurden in sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() umbenannt (die alten Namen wurden entfernt). Jede erhielt ein optionales value=-Schlüsselwort, um statt Automatik einen manuellen Wert zu setzen.
Commits: 1b22a2961
Histogramm / Statistiken zu Objekt-APIs überarbeitet (major)¶
Die Histogramm-/Statistik-Schnittstelle wurde zu objektbasierten image.get_histogram() / get_statistics() / get_percentile() überarbeitet, die Histogramm-/Statistikobjekte zurückgeben. Die alten flachen Histogramm-/Statistikergebnisse und die Methoden bin_count / l_bin_count / a_bin_count / b_bin_count wurden entfernt (verwenden Sie len(histogram.bins()) usw.).
find_features() scale umbenannt (major)¶
image.find_features() (Haar) benannte sein scale=-Schlüsselwort in scale_factor= um. Aktualisieren Sie find_features(cascade, scale=...)-Aufrufe auf scale_factor=....
Commits: 96e4f770c
find_blobs() gibt Objekte zurück; find_markers() entfernt (minor)¶
image.find_blobs() gibt jetzt Blob-Objekte mit benannten Zugriffsmethoden zurück (Indexzugriff funktioniert aus Gründen der Abwärtskompatibilität weiterhin), und image.find_markers() wurde entfernt — verwenden Sie stattdessen find_blobs(..., merge=True, margin=...). Der erweiterte Callback zum Filtern von Farb-Blobs wird nicht mehr unterstützt.
Commits: af15ec6eb
img.copy_to_fb() ersetzt (minor)¶
Die Methode img.copy_to_fb() wurde durch ein copy_to_fb=-Schlüsselwort bei image.Image / load_image() ersetzt. Verwenden Sie image.Image(path, copy_to_fb=True), um große Bilder direkt in den Framebuffer zu laden.
Commits: 1645ab94b
compress() lehnt Qualität außerhalb des Bereichs ab (behavior)¶
image.compress() / compressed() lösen jetzt einen Fehler aus, wenn quality außerhalb von 1–100 liegt, anstatt stillschweigend zu begrenzen. Begrenzen Sie quality vor dem Aufruf auf 1–100. Davon getrennt wurde der JPEG-Puffer der OpenMV 3 von 64 KB auf 23000 Byte reduziert, sodass große Einzelbilder jetzt einen Out-of-Memory-Fehler auslösen können — senken Sie die JPEG-Qualität oder Bildgröße.
lens_corr()-Zoom ist jetzt funktionsfähig (behavior)¶
image.lens_corr() wendet jetzt tatsächlich sein zoom-Argument an (es wurde zuvor zwar geparst, war aber wirkungslos), sodass sich die Ausgabe für Skripte unterscheidet, die einen vom Standard abweichenden Zoom übergaben. Prüfen Sie die lens_corr()-Abstimmung erneut.
Commits: d6b49adef
Migrations-Checkliste¶
Für eine saubere Portierung auf v2.1.0 ist typischerweise Folgendes zu tun:
Ersetzen Sie
image.FREAKdurchimage.ORB, entfernen Sie das Deskriptortyp-Argument und aktualisieren Sie das Tupel-Entpacken vonmatch_descriptor()/draw_keypoints()auf das Schlüsselpunkt-Objekt (die ORB-Überarbeitung).Benennen Sie
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()in dieset_auto_*-Formen um (die Umbenennung der Automatikfunktionen).Verschieben Sie Histogramm-/Statistik-Code zu den Objektmethoden (die Histogramm-/Statistik-Überarbeitung).
Benennen Sie
find_features()scale=inscale_factor=um (die find_features-Umbenennung).Verwenden Sie Blob-Objekt-Zugriffsmethoden und ersetzen Sie
find_markers()durchfind_blobs(merge=True, ...)(die find_blobs-Änderung); ersetzen Sieimg.copy_to_fb()durch dascopy_to_fb=-Schlüsselwort (die copy_to_fb-Änderung).Begrenzen Sie die
compress()-Qualität auf 1–100 und prüfen Sie die JPEG-Größen auf der OpenMV 3 erneut (die compress-Änderung); stimmen Sie denlens_corr()-Zoom erneut ab (die lens_corr-Änderung).
Alle anderen Skripte laufen unverändert.