v1.2.0¶
v1.2.0 ist ein grundlegendes, sehr umfangreiches Release, das den größten Teil der klassischen OpenMV-Bildgebungs-API ausbaut: die Zeichen-Methoden, Binär-/Morphologie-Operationen, Keypoint-Deskriptoren (FAST / FREAK / LBP), Farbkonvertierungen und image.statistics, BMP-/PPM-/JPEG-Datei-I/O, die Module lcd, mjpeg, gif und mlx (Thermo), die OV7725-Kamera sowie zahlreiche sensor-Steuerungen. Einige grundlegende sensor-Verhaltensweisen haben sich geändert — lies die nachfolgenden Breaking Changes.
Höhepunkte¶
Zeichen-API —
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints().Binär / Morphologie —
binary(),invert(),and/or/xor/...,erode()/dilate()/morph(),negate()/difference().Keypoints — FAST-/FREAK-/LBP-Deskriptoren mit
match_descriptor()/save_descriptor()/load_descriptor().OV7725-Kameraunterstützung;
image.statistics; BMP-/PPM-/JPEG-Datei-I/O.Breaking: Das Verhalten von
sensor.reset(),sensor.snapshot()undsensor.set_pixformat()hat sich geändert — siehe die Breaking Changes.
Neue Funktionen¶
Zeichnen —
image.draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints()mit Schlüsselwortargumenten (Farbe, Dicke, …) hinzugefügt.Binär / Morphologie —
image.binary(),invert(),and()/nand()/or()/nor()/xor()/xnor(),erode()/dilate()/morph(),negate()/difference(),pixels(),centroid(),orientation_radians()/orientation_degrees()sowiewidth()/height()/format()hinzugefügt.Keypoints / Deskriptoren — FAST-Keypoint-Extraktion über
find_keypoints(), ein einheitlichesmatch_descriptor()undsave_descriptor()/load_descriptor()für FREAK / LBP sowie eine Haar-/LBP-Kaskade für Profilgesichter.Farbe / Statistik —
image.statisticsund Farbkonvertierungsfunktionen (rgb_to_lab/lab_to_rgb/rgb_to_grayscale/grayscale_to_rgb).Datei-I/O — Laden und Speichern von BMP / PPM (P2/P3/P5/P6) / JPEG (einschließlich Graustufen-JPEG und 4:2:0-/4:2:2-Chroma-Subsampling).
Module — neue Module
lcd(LCD-Shield),mjpeg(Videoaufzeichnung), Farb-gif(mitGif.loop()) undmlx(Thermokamera), jeweils mit Beispielskripten.Sensor —
sensor.get_id()(+ OV9650/OV2640/OV7725-PID-Konstanten),sensor.set_special_effect()(SDE_*-Konstanten),sensor.set_image_filter()(FILTER_BW / FILTER_SKIN), die BildgrößeHQVGAundimage.set_pixel(x, y, …)hinzugefügt.WiFi — den ATWINC1500-WiFi-Treiber und die Grundlagen für das OpenMV-1/2-BSP sowie ein BLE-Beispiel hinzugefügt.
Weitere Änderungen und Verbesserungen¶
Der Framebuffer wird nun vor dem Streaming an die OpenMV IDE JPEG-komprimiert (geringere Bandbreite); die JPEG-Kompression erfolgt in place; der H/V-Zoom des OV7725 ermöglicht beliebige Skalierung; verbesserte (schnellere) Haar-Gesichtserkennung, die bei QVGA läuft.
Fehlerbehebungen¶
Bildgebung:
Behoben: die Berechnung des Integralbilds, eine Beschädigung durch den
median()-Filter, die Schwerpunktberechnung, RGB-Haut-/Schwarz-Weiß-Filter bei RGB-Eingabe sowie schnelleres Lesen/Schreiben von Graustufen-BMP/-PPM.
Sensor und System:
Behoben: die Timer von
pyb.Servo(Servo funktioniert nun), die HQVGA-Auflösung, die Zuverlässigkeit der SD-Karten-Initialisierung, die Neuinitialisierung des Speichers nach einem Soft-Reset sowie das erneute Ausführen der REPL, wenn kein Skript vorhanden ist.
Hardware- und Board-Unterstützung¶
OV7725-Kamerasensor.
LCD-Shield (
lcd-Modul),mlx-Thermokamera und Grundlagen für ATWINC1500-WiFi.
Breaking API-Änderungen¶
Für Benutzer sichtbare API-Brüche zwischen v1.1.0 und v1.2.0. Geltungsbereich: Python-C-Module in modules/ und Python-Bibliotheken in scripts/libraries/.
Alle drei Breaking Changes sind Verhaltens-Änderungen an grundlegenden sensor-Funktionen (gleiche API, anderes Verhalten) — prüfe die betroffenen Skripte erneut. Jeder Commit-Hash verlinkt auf seinen Diff auf GitHub. (Der allergrößte Teil dieses Releases ist neue API, die im Bereich v1.1→v1.2 aufgebaut wurde, und daher additiv, nicht brechend.)
sensor.reset() wendet keine Standardkonfiguration mehr an (Verhalten)¶
sensor.reset() wendet keine integrierte Standardkonfiguration mehr an (pixformat / framesize / framerate / gain / contrast / brightness / saturation). Skripte, die sich darauf verlassen haben, dass reset() einen nutzbaren Standard hinterlässt, müssen nun nach reset() explizit sensor.set_pixformat() und sensor.set_framesize() (und alle weiteren Einstellungen) aufrufen.
Commits: d1e782df3
sensor.snapshot() löst bei Timeout eine Ausnahme aus (Verhalten)¶
sensor.snapshot() löst nun RuntimeError("Sensor Timeout!!") aus, wenn der Sensor eine Zeitüberschreitung hat, anstatt unbegrenzt zu hängen. Umschließe snapshot() mit try / except RuntimeError, falls du Timeouts tolerieren musst.
Commits: e3f41d674
sensor.set_pixformat() löst bei nicht unterstütztem Format eine Ausnahme aus (Verhalten)¶
sensor.set_pixformat() löst nun eine Ausnahme aus, wenn ein nicht unterstütztes Pixelformat übergeben wird, anstatt False zurückzugeben. Code, der den False-Rückgabewert geprüft hat, muss stattdessen die Ausnahme abfangen.
Commits: e0c5822c2
Migrations-Checkliste¶
Für eine saubere Portierung auf v1.2.0 ist typischerweise Folgendes zu tun:
Setze
sensor.set_pixformat()/sensor.set_framesize()nachsensor.reset()explizit (die Reset-Änderung).Umschließe
sensor.snapshot()mittry/except RuntimeError, falls du Sensor-Timeouts tolerieren musst (die Snapshot-Änderung).Fange die Ausnahme von
sensor.set_pixformat()ab, anstatt aufFalsezu prüfen (die set_pixformat-Änderung).
Alle anderen Skripte laufen unverändert.