v4.8.0¶
v4.8.0 ist ein großes Feature-Release. Die Höhepunkte: ein brandneues klassenbasiertes csi-Kameramodul mit Unterstützung für mehrere Kameras, das OpenMV N6 (STM32N6) Board mit einer Neural-ART NPU, ein NPU-Inferenz-Backend, der GenX320 RAW-Event-Modus für Event-Kameras, ein neues crc-Modul, eine neu strukturierte ML-Nachbearbeitungsbibliothek und MicroPython 1.26. Außerdem werden einige veraltete APIs entfernt — das buzzer-Modul und die FLIR-Lepton-Steuerung des fir-Moduls — lies daher die folgenden Breaking Changes.
Höhepunkte¶
Neues
csi-Kameramodul. Eine klassenbasiertecsi.CSI-API mit Unterstützung für mehrere gleichzeitige Kameras, eingeführt neben dem veraltetensensor-Modul.OpenMV N6. Das STM32N6 Board mit einer Neural-ART NPU, Triple Buffering, Soft-CSI und einem ToF-Modul.
NPU-Inferenz. Ein ST Neural-ART (STAI) Backend für hardwarebeschleunigte Modell-Inferenz.
GenX320 Event-Modus. RAW-Event-Ausgabe sowie
draw_event_histogram()für das Rendering von Event-Kameras.Neu strukturierte ML-Nachbearbeitung — Hersteller-Unterpakete (
ml.postprocessing.ultralytics,mediapipe,edgeimpulse,darknet) mit neuen BlazeFace- / BlazePalm- sowie Hand- und Gesichts-Landmark-Detektoren.Neues
crc-Modul — hardwarebeschleunigtes CRC-16 / CRC-32.MicroPython auf 1.26.0 aktualisiert.
Breaking: das
buzzer-Modul und die Lepton-Steuerung desfir-Moduls wurden entfernt (das Lepton ist jetzt eine reguläre Kamera). Siehe die fir/Lepton-Änderung und die Entfernung des buzzer.
Neue Funktionen¶
Das neue
csi-Kameramodul — ein klassenbasiertescsi.CSI-Objekt mit mehreren gleichzeitigen Kameras (bis zu drei auf dem N6), nicht-blockierendem Schnappschuss, benutzerdefinierten(w, h)-Einzelbildgrößen und einer informativenprint()/ repr. Es wird neben dem veraltetensensor-Modul eingeführt (kein direkter Ersatz).crc—crc.crc16()undcrc.crc32(), hardwarebeschleunigt mit Software-Fallback, auf dem OpenMV N6 und AE3.image.Image.draw_image()hat eintransform=-Schlüsselwort erhalten (eine 2-D-Float-ndarray-Matrix für affine/perspektivische Verzerrungen, GPU-beschleunigt auf STM32 und Alif); dieselbe Transformation steht bei der Bildkonvertierung zur Verfügung.draw_event_histogram()— rendert Histogramme von Event-Kameras.GenX320 RAW-Event-Modus —
csi.IOCTL_GENX320_SET_MODEmitcsi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT,csi.IOCTL_GENX320_READ_EVENTS,csi.IOCTL_GENX320_CALIBRATE, Event-Typ-Konstanten und neue Beispielskripte.ML — ein ST Neural-ART (STAI) NPU-Inferenz-Backend;
ml.Modelhat einpostprocess=-Schlüsselwort erhalten (der Nachbearbeiter läuft jetzt automatisch innerhalb vonpredict(), auch ohne Callback);ml.postprocessingwurde in Hersteller-Unterpakete umstrukturiert —ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo) undml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — die alten snake_case-Namen bleiben als Aliase erhalten;ml.utils.draw_keypoints()undml.utils.draw_skeleton()wurden hinzugefügt; die mitgelieferten ROMFS-Modelle wurden erweitert (BlazeFace, YOLO-LC, YOLOv8n, Palm-/Hand-/Gesichts-Landmarks).audio— MDF-Digitalmikrofon-Eingang auf dem STM32N6.Display — ein SSD1351 OLED-Treiber und Beispiel;
SPIDisplay-Controller können ihre Init-Befehle überschreiben; der SPI-Display-Konstruktor hathmirror/vflip-Schlüsselwörter erhalten.On-Device-Profiler — SysTick + Armv8.1-M PMU Zyklus-/Event-Zähler mit Instrumentierung auf Funktionsebene, auslesbar über die Debug-Verbindung (
pyopenmvhat Profiling- und ELF-Symbol-Unterstützung erhalten).Neue Sensorunterstützung — PixArt PS5520; FLIR BOSON auf dem OpenMV H7 Plus; GenX320 Auto-Erkennung.
Weitere Änderungen und Verbesserungen¶
MicroPython auf 1.26.0 aktualisiert.
Kamerastart — der Sensortakt wurde vom CSI-Status entkoppelt, die Kameraerkennung beim Booten ist schneller (die häufigste Konfiguration wird zuerst versucht) und der Standardtakt des OpenMV 3 OV7725 wurde korrigiert.
Bildqualität — die Software-ISP-Gammakorrektur (Alif und STM32) und die Bad-Pixel-Korrektur (STM32) sind standardmäßig aktiviert; die Sensoren PAG7936 und PS5520 haben Auto-Weißabgleich-Steuerungen erhalten.
Leistung —
image.Image.to_ndarray()ist mit Helium SIMD beschleunigt und der FOMO-Nachbearbeiter wurde mit ulab vektorisiert.FLIR-Lepton-Treiber neu geschrieben, um Einzelbilder asynchron im Hintergrund zu empfangen — Rotation/
transposefunktioniert jetzt, das Zeichnen skaliert bilinear hoch und der Reset ist schneller.Aufnahmedurchsatz — das i.MX RT1062 CSI nutzt jetzt vollständiges DMA-Offload und das STM32 N6 verfügt über ein Hardware-GPU-
draw_image().
Fehlerbehebungen¶
Kamera und Sensoren:
RGB565- / GRAYSCALE- / BAYER- / YUV422-Modi über die STM32-Sensoren, PAJ6100 auf dem OpenMV H7 / H7 Plus, OpenMV 2 QVGA RGB565 und die N6 CSI Mono- / RGB-YUV-Konfiguration korrigiert; die Software-Testkamera setzt sich jetzt deterministisch zurück.
Der Auto-Weißabgleich färbt das Bild bei niedrigen oder variablen Bildraten nicht mehr grün (ein gleitender Durchschnitt über 250 ms ersetzt die Abtastung alle 100 Einzelbilder) und das PS5520-Luminanzflackern wurde behoben.
Bildverarbeitung:
Ein Rendering-Fehler beim Linienzeichnen wurde behoben;
image.Image.flush()leert jetzt den JPEG-Puffer des Bildes, auf dem es aufgerufen wurde;Normalizationwendet Mittelwert/Standardabweichung jetzt auf Float-Eingaben an; die Bildallokation aus Dateien wurde korrigiert.
Kameraaufnahme:
Schwerwiegende Bildkorruption bei Nicht-JPEG-Übertragungen behoben (der Einzelbild-Interrupt wird jetzt nur im JPEG-Modus aktiviert), JPEG-Modus-3-Unterstützung sowie DMA-Zeilengröße und Lockups bei kleinen Puffern auf STM32; die VOSPI- / Lepton-Synchronisation ist zuverlässiger, insbesondere auf dem N6.
Verschiedenes:
omv.board_id()gibt die korrekte UID auf dem RT1060 zurück;YoloV2stürzt nicht mehr ab, wenn es ohne explizite Anker konstruiert wird.
Hardware- und Board-Unterstützung¶
OpenMV N6 — STM32N6 mit einer Neural-ART NPU, Triple Buffering, SPI-LCD-/TV-Ausgabe, Soft-CSI, dem
tof-Modul und mitgelieferten ROMFS-Modellen.Arduino GIGA — MIPI-DSI-Display-Ausgabe.
Neue Sensoren — PixArt PS5520; FLIR BOSON auf dem OpenMV H7 Plus; GenX320 Auto-Erkennung.
OpenMV Pure Thermal — das FLIR Lepton ist jetzt ein regulärer (sekundärer) Kamerasensor.
Alif AE3 — Software-ISP-Gammakorrektur, das
crc-Modul und SPI-Fehlerbehebungen.
Breaking API-Änderungen¶
Für Benutzer sichtbare API-Änderungen zwischen v4.7.0 und v4.8.0. Umfang: Python-C-Module in modules/ und Python-Bibliotheken in scripts/libraries/.
Jede Änderung ist mit ihrer Auswirkung gekennzeichnet:
major — die meisten Skripte, die es verwendeten, müssen angepasst werden.
minor — schmale API; betrifft nur Skripte, die sie verwendeten.
behavior — gleiche API, andere Ergebnisse; überprüfe optimierte Skripte erneut.
tooling — betrifft nur Host-Tools / das Bauen aus dem Quellcode.
Die Änderungen sind in dieser Reihenfolge nach Auswirkung gruppiert — zuerst major, dann minor, behavior und tooling. Wenn du nur deinen Code portieren möchtest, springe zur Migrations-Checkliste am Ende für eine komprimierte To-do-Liste. Jeder Commit-Hash verlinkt auf seinen Diff auf GitHub.
FLIR Lepton vom fir-Modul verschoben (major)¶
Das FLIR Lepton wird jetzt als regulärer Kamerasensor angesteuert, statt über das fir-Modul. Die Lepton-Steuerung wurde aus fir entfernt: der FIR_LEPTON-Typ und die Methoden radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() und trigger_ffc() sind verschwunden. Nimm das Lepton wie jede andere Kamera auf (es erscheint als sekundärer Sensor auf dem OpenMV Pure Thermal); das Pure-Thermal-Beispiel wurde auf die neue API umgeschrieben. Die Nicht-Lepton-fir-Sensoren (Grid-EYE, MLX, AMG8833) sind unverändert.
buzzer-Modul entfernt (minor)¶
Das buzzer-Modul wurde aus den STM32- und i.MX RT-Ports entfernt. Steuere den Buzzer stattdessen mit machine.PWM; ein Pure-Thermal-Buzzer-Beispiel mit PWM wurde hinzugefügt.
omv.disable_fb() entfernt (minor)¶
Die Funktion omv.disable_fb() wurde entfernt; das Framebuffer-Streaming wird jetzt über die Kamera-API gesteuert. Die veralteten RPC-Desktop-Skripte, die darauf angewiesen waren, wurden ebenfalls entfernt.
csi ist neu — seine API ist noch nicht eingefroren (minor)¶
Das csi-Modul wird in v4.8.0 eingeführt und seine API hat sich während des Releases weiterentwickelt: csi.fb() wurde entfernt und csi.CSI.snapshot() (image=...) erfordert jetzt ein veränderbares Bild und zeichnet/skaliert das aufgenommene Einzelbild hinein, statt eine rohe Tiefenkopie zu erstellen. Frühe Anwender des neuen Moduls sollten erneut testen; die veraltete sensor-API ist nicht betroffen.
image.ImageIO Stream-Modus und close() (minor)¶
image.ImageIO — das mode-Argument akzeptiert jetzt nur noch kleingeschriebenes 'r' / 'w' (Großschreibung wird mit einer aktualisierten Fehlermeldung abgelehnt), und das Öffnen mit 'w' kürzt/erstellt die Datei jetzt immer neu, statt einen bestehenden Stream zu erhalten. ImageIO.close() ist jetzt idempotent (das Schließen eines bereits geschlossenen Streams löst keinen Fehler mehr aus) und gibt None zurück statt des Stream-Objekts.
BlazeFace- / BlazePalm-Rückgabewert (minor)¶
Die Nachbearbeiter BlazeFace und BlazePalm (neu in diesem Release) geben jetzt eine einzelne Begrenzungsrahmen-Liste zurück statt der vollständigen Liste pro Klasse — Aufrufer indizieren das Ergebnis direkt statt mit [0].
Commit: 75e16b573
ML-Nachbearbeiter-Callback erhält rohe Tensoren (behavior)¶
Ein predict()-Nachbearbeitungs-Callback von ml.Model erhält jetzt die rohen (quantisierten) Ausgabe-Tensor-Referenzen statt vorab konvertierter Float-ndarrays — dies vermeidet Speichererschöpfung bei großen Modellen. Wenn kein Callback angegeben wird, wird weiterhin das Float-ndarray zurückgegeben. Benutzerdefinierte Callbacks müssen die Tensoren selbst dequantisieren (die eingebauten Nachbearbeiter tun dies bereits).
Commit: 84e6ee650
Kameratakt vom CSI-Status entkoppelt (behavior)¶
Der Sensortakt ist jetzt unabhängig vom CSI-Status. set_clock / set_frequency konfiguriert den Takt nur dann neu, wenn die angeforderte Frequenz um mehr als eine Toleranz abweicht, und get_clk_frequency nimmt einen Boolean entgegen, um die exakte (statt der nominalen) Frequenz zurückzugeben. Der Standardtakt beträgt 24 MHz auf dem OpenMV N6 und AE3, sodass beim Booten kein explizites set_clock() erforderlich ist. Skripte, die den Takt für zeitkritische Aufnahmen umschalteten, sollten ihre Annahmen erneut überprüfen.
Commits: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca
USB-Debug-Protokoll und Firmware-Targets (tooling)¶
Nichts davon betrifft MicroPython-Skripte. Veraltete USBDBG-Befehle (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) wurden entfernt und nicht unterstützte Befehle älterer IDEs werden jetzt geleert, statt TinyUSB-Boards beim Verbinden zum Absturz zu bringen; das veraltete STM32 UVC-Firmware-Target wurde entfernt. Alte Host-Tools sollten aktualisiert werden; siehe die Historie des Firmware-Repositorys für Details.
Migrations-Checkliste¶
Für eine saubere Portierung auf v4.8.0 ist die typische Arbeit:
Wenn du das FLIR Lepton über
firverwendet hast, wechsle dazu, es als Kamerasensor aufzunehmen (die fir/Lepton-Änderung).Ersetze jede
buzzer-Verwendung durchmachine.PWM(die Entfernung des buzzer).Entferne
omv.disable_fb()-Aufrufe (die Entfernung von omv.disable_fb()).Für
image.ImageIO: verwende kleingeschriebenes'r'/'w'und erwarte, dass'w'kürzt (die ImageIO-Änderung).Für benutzerdefinierte ML-Nachbearbeitungs-Callbacks: dequantisiere die rohen Tensor-Referenzen selbst oder verlasse dich auf den standardmäßigen Float-Pfad (die Callback-Änderung).
Überprüfe jedes Skript erneut, das den Sensortakt für zeitkritische Aufnahmen ansteuerte (die Takt-Änderung).