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 und find_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 sowie Net.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).

  • Bildverarbeitungimage.find_circles() erhielt die Schlüsselwörter r_min / r_max / r_step (schnellere Hough-Transformation), find_keypoints() und das Haar-basierte find_features() akzeptieren nun RGB-Bilder, und image.compress() / die JPEG-Kodierung unterstützen nun binäre (Bitmap-)Bilder.

  • Bootboot.py lä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 / xalloc Out-of-Memory-Fehlermeldungen; unterdrückte nn-printf-Ausgaben während des Netzwerk-Ladens; das Repository neu organisiert (Beispiele → scripts/, Werkzeuge → tools/, Haar-Kaskaden → ml/). Das nn-Modul ist auf der OpenMV 2 nicht verfügbar (unzureichender Flash).

Fehlerbehebungen

Bildverarbeitung:

  • fast_atan2f für x≤0 korrigiert (zuvor immer 0 — überprüfen Sie Blob-/Linien-/Keypoint-Winkel erneut), die Speicherbehandlung von find_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 Makro TO_GS_PIXEL (integral / morph), das Bitmap-/JPEG-Streaming für Graustufen-Einzelbilder (bpp==0), das pop_front der Keypoint-/Blob-Liste und die Ergebnisse von match_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

find_apriltags() auf 64K Pixel begrenzt (behavior)

image.find_apriltags() wirft nun eine Ausnahme, wenn das Bild (oder die ROI) 64K Pixel überschreitet, und gibt für Bilder kleiner als 4x4 eine leere Liste zurück. Verkleinern Sie große Bilder (verwenden Sie eine kleinere framesize oder übergeben Sie eine explizite roi), bevor Sie find_apriltags() aufrufen.

Commits: bd77afbc0

Migrations-Checkliste

Für eine saubere Portierung auf v3.0.0 ist die typische Arbeit:

  1. Ersetzen Sie image.find_number() / image.classify_object() durch das nn-Modul (die nn-Migration).

  2. Schließen Sie sensor.sleep() / sensor.reset() in try / except ein, anstatt einen booleschen Rückgabewert zu prüfen (die sensor.sleep-Änderung).

  3. Verarbeiten Sie die echten Byte-Anzahlen aus den WINC-Socket-Methoden send / recv (die WINC-Socket-Änderung).

  4. Verwenden Sie das von image.binary() zurückgegebene Bild, anstatt eine In-Place-Veränderung zu erwarten (die binary-Änderung).

  5. Verkleinern Sie Bilder vor find_apriltags(), um unter 64K Pixel zu bleiben (die find_apriltags-Begrenzung).

Alle anderen Skripte laufen unverändert.