v4.6.0

v4.6.0 ist ein großes Feature-Release. Die Highlights: Das Kameramodul wurde von sensor in csi umbenannt (mit einem abwärtskompatiblen sensor-Alias), ein neues ml.postprocessing-Modul, Unterstützung für den Prophesee-GenX320-Ereignissensor, PAG7936 und FLIR-Boson-Wärmebildkameras, ein neuer TinyUSB-basierter DFU-Bootloader, Nema-GPU-Beschleunigung und MicroPython 1.24. Außerdem ändert sich der alpha-Bereich beim Zeichnen, also lies die nachfolgenden Breaking Changes.

Highlights

  • sensor ist jetzt auch csi — das Kameramodul wurde in csi umbenannt; sensor bleibt als abwärtskompatibler Alias erhalten (noch keine Codeänderung erforderlich).

  • Neues ml.postprocessing-Modulfomo_postprocess, yolo_v2_postprocess, yolo_v5_postprocess.

  • Neue Sensoren — Prophesee-GenX320-Ereigniskamera, PAG7936 und FLIR Boson 320/640 Wärmebild.

  • Neuer DFU-Bootloader — ein TinyUSB-basierter Standard-DFU-Bootloader ersetzt den alten CDC-Bootloader auf allen Boards.

  • Nema-GPU — beschleunigte 2D-/Vektorgrafik auf STM32.

  • MicroPython auf 1.24.0 aktualisiert.

  • Breaking: Der alpha-Bereich beim Zeichnen wurde von 0–256 auf 0–255 geändert (siehe die Änderung des Alpha-Bereichs).

Neue Funktionen

  • ml.postprocessing — ein neues Modul zur Dekodierung von Modellausgaben: ein FOMO-Decoder (fomo_postprocess, find_blobs + NMS, konfigurierbarer threshold) sowie yolo_v2_postprocess / yolo_v5_postprocess (mit threshold, anchors, nms_threshold, nms_sigma).

  • Visualisierung von Ereigniskameras — neue Methoden Image.to_evt_dark() / Image.to_evt_light() und die Farbpaletten PALETTE_EVT_DARK / PALETTE_EVT_LIGHT.

  • Tiefenvisualisierung — neue Methode Image.to_depth() und eine PALETTE_DEPTH-Farbpalette (Boards mit ToF-Unterstützung).

  • Sensor-Introspektion — neuer IOCTL_GET_RGB_STATS-ioctl, der ein (R, Gb, Gr, B)-Tupel mit Kanalstatistiken zurückgibt.

  • GenX320-Bias-Voreinstellungen — neuer IOCTL_GENX320_SET_BIASES-ioctl mit den Voreinstellungen GENX320_BIASES_DEFAULT / LOW_LIGHT / ACTIVE_MARKER / LOW_NOISE / HIGH_SPEED.

  • omv.debug_mode() — eine neue Funktion, um abzufragen, ob die USB-Debug-Schnittstelle aktiv ist.

  • Nema-GPU — Integration des Cortex-M55-NemaGFX/NemaVG-Treibers auf STM32, mit GPU-In-Place-Cut-Through für draw_image.

  • PAG7936 — Farbbalkenausgabe, Auto-Belichtung / Auto-Verstärkung, Schlafmodus und MIPI-Modus hinzugefügt.

Weitere Änderungen und Verbesserungen

  • MicroPython auf 1.24.0 aktualisiert; ulab auf 6.7.3 aktualisiert (fügt keepdims hinzu).

  • Gemeinsames Boot-Skript — STM32 / i.MX RT / RP2 teilen sich jetzt ein _boot.py, das automatisch das Flash-/SD-Dateisystem mit einer Standard-main.py und README.txt erstellt und temporäre Startup-Globals freigibt.

  • STM32N6-Grundlagen — grundlegende STM32N6-Unterstützung, ein XSPI-Treiber, ein gemeinsamer MPU-Treiber sowie Firmware-/Bootloader-Signierung auf STM32.

  • Computed-Goto-VM — auf STM32 und nRF aktiviert für eine schnellere Interpreterausführung.

Fehlerbehebungen

Kamera und Sensoren:

  • Die OV5640-PCLK-/Belichtungsberechnung korrigiert (zwei MIPI-Lanes, korrigierte Teilertabelle).

  • Die MT9V0xx-Bayer-CFA-Variante akzeptiert jetzt RGB565/BAYER/GRAYSCALE und gibt korrekte rohe Bayer-Daten aus, statt einen Fehler zu erzeugen.

  • PAG7936-Objektivschattierungskorrektur aktiviert und HD-Bildverschiebung behoben; set_framerate() wird jetzt pro Auflösung begrenzt.

  • FLIR-Lepton-Wärmeerfassung auf dem i.MX RT1060 behoben (korrigiertes VoSPI CPOL/CPHA), und Lepton-Schnappschüsse geben jetzt spezifische Fehlercodes zurück.

  • GenX320-Frequenzrundung behoben.

Bildverarbeitung:

  • Speicherbeschädigung in to_ndarray() bei Graustufenbildern behoben.

  • Debayer-Grenzvorhersage bei der Bayer→RGB/Graustufen-Konvertierung behoben.

  • draw_image()-transpose auf Boards ohne SDRAM behoben (Chunked-Puffer).

  • Behandlung von booleschen Argumenten in Image.binary() und dem load_to_fb-Flag von ml.Model behoben.

System:

  • SPI-RX-only-/TX-only-Pin-Konfiguration auf STM32 und i.MX RT behoben.

  • Die Ethernet-DMA-Puffer des Portenta H7 in SRAM3 verschoben, damit Ethernet funktioniert.

  • Ein verlorenes Zeichen bei der Debug-Kanal-Textausgabe über USB behoben; ML-Dynamic-Allocation-Größen aufgerundet, um zu kleine Modellpuffer zu vermeiden.

Hardware- und Board-Unterstützung

  • Prophesee GenX320 ereignisbasierter Bildsensor (STM32F7 + i.MX RT1060).

  • PAG7936-Sensor (mit MIPI-Modus).

  • FLIR Boson 320/640 Wärmebildkameras (IDD-4-Treiber).

  • Nema-GPU-Beschleunigung auf STM32.

  • STM32N6 Bootloader-/XSPI-Grundlagen.

  • VL53L5CX — Unterstützung für Power-Enable-Pin hinzugefügt.

Breaking API Changes

Für Benutzer sichtbare API-Brüche zwischen v4.5.9 und v4.6.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 verwendet haben, müssen angepasst werden.

  • minor — eingeschränkte API; betrifft nur Skripte, die sie verwendet haben.

  • behavior — gleiche API, andere Ergebnisse; abgestimmte Skripte erneut überprüfen.

  • tooling — betrifft nur das Flashen / Host-Tools / Board-Verfügbarkeit.

Die Änderungen sind in dieser Reihenfolge nach Auswirkung gruppiert. Wenn du nur deinen Code portieren möchtest, springe zur Migrations-Checkliste am Ende. Jeder Commit-Hash verweist auf seinen Diff auf GitHub. Hinweis: Die Modulumbenennung sensorcsi in diesem Release ist kein Breaking Change — sensor funktioniert weiterhin als Alias.

Der alpha-Bereich beim Zeichnen ist jetzt 0–255 (major)

Das alpha-Argument von draw_image() und jedem Overlay, das eines annimmt (FIR, ToF, Display, TV, MJPEG, Alpha-Tabellen), verwendet jetzt einen Bereich von 0–255 statt 0–256. Skripte, die 256 für vollständige Deckkraft übergeben oder Alpha gegen 256 berechnet haben, müssen auf 0–255 umskaliert werden.

Commit: 1f87b5bb6

FLIR-Lepton-ioctl-Konstanten umbenannt (minor)

Drei Lepton-ioctl-Konstanten wurden gekürzt: IOCTL_LEPTON_SET_MEASUREMENT_MODEIOCTL_LEPTON_SET_MODE, IOCTL_LEPTON_SET_MEASUREMENT_RANGEIOCTL_LEPTON_SET_RANGE, IOCTL_LEPTON_GET_FPA_TEMPERATUREIOCTL_LEPTON_GET_FPA_TEMP. Die mitgelieferten Beispiele wurden aktualisiert.

Commit: 12582d54d

Umstrukturierung der ML-Postprocessing-API (minor)

ml.postprocessing ist in diesem Release neu, und seine API hat sich währenddessen verschoben: Das Konstruktor-Keyword score_threshold von yolo_v2_postprocess wurde in threshold umbenannt, und leere Postprocessing-Ergebnisse geben jetzt () statt [] zurück. Das mitgelieferte Modell yolov5_rgb_person wurde in yolo_v5_224_nano umbenannt. ml.apps.MicroSpeech leitet jetzt beliebige **kwargs an audio.init() weiter, statt eines festen gain_db=24.

Commits: d67bd1ad7, 979b4e8ee, b89b815b2, 6671d9df5, 5c2f4388c

AGAST ist der Standard-Eckendetektor (behavior)

find_keypoints() verwendet jetzt auf allen Boards AGAST statt FAST als Standard-Eckendetektor. Schlüsselpunkt-Sätze (und damit Deskriptor-Übereinstimmungen) unterscheiden sich von früheren Releases — abgestimmte Schlüsselpunkt-Pipelines erneut überprüfen. Das IDE-Framebuffer-Streaming ist außerdem jetzt auf 20 Hz begrenzt, um die USB-Last zu reduzieren.

Commits: da6bf6910, bc4e39246

Bootloader, entfernte Boards und Funktionen (tooling)

Der alte CDC-Bootloader wurde auf allen Boards durch einen neuen TinyUSB-basierten Standard-DFU-Bootloader ersetzt — der Firmware-Update-Mechanismus hat sich geändert; passe deinen Flashing-Workflow / deine Tools entsprechend an. Das OpenMV Pro-Board, der eigenständige Raspberry Pi Pico-Build und die WiFi-Debug-Funktion (wifidbg) für die Remote-IDE wurden entfernt.

Commits: a03fc90d8, c2e616aae, af3ea774b, f8bca9799, 59a38a0d3, 7edeb4fbe, d58d77fa2

Migrations-Checkliste

Für eine saubere Portierung auf v4.6.0 fallen typischerweise folgende Arbeiten an:

  1. Skaliere jeden alpha-Wert beim Zeichnen/Overlay vom Bereich 0–256 auf 0–255 um (die Änderung des Alpha-Bereichs).

  2. Benenne alle FLIR-Lepton-ioctl-Konstanten in ihre gekürzten Formen um (die Lepton-ioctl-Umbenennung).

  3. Wenn du die neuen ML-Postprozessoren verwendet hast, wechsle score_threshold zu threshold, behandle ein leeres ()-Ergebnis und aktualisiere den Modellnamen yolo_v5_224_nano (die ML-Änderungen).

  4. Überprüfe find_keypoints()-basierte Pipelines erneut hinsichtlich der AGAST-Detektor-Änderung (die Eckendetektor-Änderung).

  5. Aktualisiere deinen Firmware-Flashing-Workflow für den neuen DFU-Bootloader (die Bootloader-/Board-Änderungen).