v3.0.0¶
v3.0.0 ist die große v2 → v3-Version. Sie führt die OpenMV Cam M7 (STM32F7) und das neue nn CMSIS-NN-Modul für neuronale Netze ein (das die alten fest codierten Methoden find_number() / classify_object() ersetzt), fügt Unterstützung für die MT9V034 Global-Shutter- und FLIR Lepton-Sensoren sowie die sensor.WVGA-Framegrößen hinzu und aktualisiert den Kern auf MicroPython 1.9.4. Mehrere Verhaltensweisen von image / sensor / WiFi haben sich geändert — lesen Sie die nachfolgenden Breaking Changes.
Höhepunkte¶
OpenMV Cam M7 — neues STM32F7-Board.
nn-Modul — CMSIS-NN-Inferenz:nn.load(),Net.forward(),Net.search(), mit einem Modell-Konverter und Beispielen.Neue Sensoren — MT9V034 Global-Shutter (FSIN-getriggert) und FLIR Lepton.
MicroPython 1.9.4 Kern-Update.
Breaking: die fest codierten
image.find_number()/image.classify_object()wurden entfernt,sensor.sleep()wirft nun eine Ausnahme, WINC-Sockets geben echte Byte-Anzahlen zurück,image.binary()gibt ein neues Bild zurück undfind_apriltags()ist auf 64K Pixel begrenzt — siehe die Breaking Changes.
Neue Funktionen¶
nn— ein neues CMSIS-NN-Modul für neuronale Netze:nn.load(path),Net.forward(img, roi=, softmax=, dry_run=)(gibt Floats von 0.0–1.0 zurück),Net.search()für mehrskalige/positionsbasierte Erkennung sowieNet.test(), dazu ein CMSIS-NN-Modell-Konverter (nn_convert.py/nn_quantizer.py), mitgelieferte CIFAR-10- / LeNet- / Smile-Modelle und NN- / NN-Search-Beispielskripte.Sensoren — MT9V034 Global-Shutter-Unterstützung (FSIN-getriggerter Schnappschuss) auf der OpenMV 4, ein aktualisierter FLIR Lepton-Treiber mit Lepton-Snapshot und die neuen Framegrößen
sensor.WVGA(720x480) /sensor.WVGA2(752x480).Bildverarbeitung —
image.find_circles()erhielt die Schlüsselwörterr_min/r_max/r_step(schnellere Hough-Transformation),find_keypoints()und das Haar-basiertefind_features()akzeptieren nun RGB-Bilder, undimage.compress()/ die JPEG-Kodierung unterstützen nun binäre (Bitmap-)Bilder.Boot —
boot.pyläuft nun vor der USB-Initialisierung, sodass es den USB-Modus überschreiben kann (z. B. HID).Beispiele — kleine/hochauflösende AprilTag-Beispiele, ein I2C-LIDAR-Lite-V3-Beispiel und Datensatz-Werkzeuge (
augment_images.py/make_patches.py) hinzugefügt.
Weitere Änderungen und Verbesserungen¶
Das mitgelieferte MicroPython auf 1.9.4 aktualisiert (mit einem Rückbau der pyexec-Parse/Compile/Exec und einem PendSV-Fix); klarere
fb_alloc/xallocOut-of-Memory-Fehlermeldungen; unterdrücktenn-printf-Ausgaben während des Netzwerk-Ladens; das Repository neu organisiert (Beispiele →scripts/, Werkzeuge →tools/, Haar-Kaskaden →ml/). Dasnn-Modul ist auf der OpenMV 2 nicht verfügbar (unzureichender Flash).
Fehlerbehebungen¶
Bildverarbeitung:
fast_atan2ffür x≤0 korrigiert (zuvor immer 0 — überprüfen Sie Blob-/Linien-/Keypoint-Winkel erneut), die Speicherbehandlung vonfind_apriltags()(verlorene Inhalte und ein fehlerhaftes realloc bei OOM), die Zeilenzeiger pro bpp für Binär-/Bitmap-Bilder (beschädigte Binärergebnisse),find_edges(EDGE_CANNY)mit einer ROI, das MakroTO_GS_PIXEL(integral / morph), das Bitmap-/JPEG-Streaming für Graustufen-Einzelbilder (bpp==0), daspop_frontder Keypoint-/Blob-Liste und die Ergebnisse vonmatch_descriptor.
System und Kamera:
Die USB-HID-Schnittstellen-/Endpunkt-Nummern korrigiert, das dynamische Ändern der XCLK-Frequenz zur Laufzeit,
Net.forward(), das nun die korrekte Anzahl an Ausgaben zurückgibt, sowie einen Hardfault beim Unterbrechen des Skript-Parsings behoben.
Hardware- und Board-Unterstützung¶
OpenMV Cam M7 (STM32F7) — neues Board.
MT9V034 Global-Shutter-Sensor (OpenMV 4, FSIN-getriggert).
FLIR Lepton — aktualisierter Treiber mit Snapshot-Unterstützung.
Breaking API-Änderungen¶
Für Benutzer sichtbare API-Brüche zwischen v2.9.0 und v3.0.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; überprüfen Sie abgestimmte Skripte erneut.
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.
image.find_number() / image.classify_object() entfernt (major)¶
Die fest codierten Methoden image.find_number() (LeNet) und image.classify_object() (CMSIS CNN) wurden zugunsten des neuen nn-Moduls entfernt. Ersetzen Sie sie durch net = nn.load('/model.network'); out = net.forward(img).
Commits: d151f7e38
sensor.sleep() / sensor.reset() werfen bei Fehler eine Ausnahme (minor)¶
sensor.sleep() und sensor.reset() werfen nun bei einem Fehler eine Ausnahme, anstatt True / False zurückzugeben. Code, der den booleschen Rückgabewert von sensor.sleep() geprüft hat, muss den Aufruf stattdessen in try / except einschließen.
Commits: 7d16d008f
WINC-Sockets geben die echte Byte-Anzahl zurück (behavior)¶
Die WINC1500-Socket-Methoden send / recv / sendto / recvfrom gaben zuvor immer 0 zurück; sie geben nun die tatsächliche Anzahl der übertragenen Bytes zurück. Code, der von einem Rückgabewert 0 ausgegangen ist (oder darauf in einer Schleife wartete/blockierte), muss die echten Anzahlen verarbeiten.
Commits: a07fb2f60
image.binary() gibt ein neues Bild zurück (behavior)¶
image.binary() erhielt die Schlüsselwörter to_bitmap / copy und gibt nun ein neues Bildobjekt zurück, anstatt das Quellbild an Ort und Stelle zurückzugeben/zu verändern. Code, der sich darauf verlassen hat, dass binary() das Originalbild verändert, sollte das zurückgegebene Objekt verwenden (und copy=True für ein nicht-in-place-Verhalten übergeben).
Commits: 8a44f0cd9
Migrations-Checkliste¶
Für eine saubere Portierung auf v3.0.0 ist die typische Arbeit:
Ersetzen Sie
image.find_number()/image.classify_object()durch dasnn-Modul (die nn-Migration).Schließen Sie
sensor.sleep()/sensor.reset()intry/exceptein, anstatt einen booleschen Rückgabewert zu prüfen (die sensor.sleep-Änderung).Verarbeiten Sie die echten Byte-Anzahlen aus den WINC-Socket-Methoden
send/recv(die WINC-Socket-Änderung).Verwenden Sie das von
image.binary()zurückgegebene Bild, anstatt eine In-Place-Veränderung zu erwarten (die binary-Änderung).Verkleinern Sie Bilder vor
find_apriltags(), um unter 64K Pixel zu bleiben (die find_apriltags-Begrenzung).
Alle anderen Skripte laufen unverändert.