v4.7.0¶
v4.7.0 ist ein großes Feature-Release. Die Highlights: Das neue OpenMV AE3-Board (Alif Ensemble, Cortex-M55 + Ethos-U55 NPU) mit einem Dual-Core-openamp-Programmiermodell, ein schreibgeschütztes ROMFS-Dateisystem (/rom) mit mitgelieferten Modellen und Kaskaden, VL53L8CX-8x8-Time-of-Flight-Unterstützung, neue YOLOv8- / YOLO-LC-Postprozessoren und MicroPython 1.25. Außerdem ändert sich, wie eingebaute Modelle und Haar-Kaskaden geladen werden, also lies die nachfolgenden Breaking Changes.
Highlights¶
OpenMV-AE3-Board — das Alif-Ensemble-Board (Cortex-M55 + Ethos-U55 NPU) mit vollständigem Port, Bootloader und ROMFS.
Dual-Core-
openamp-Modul — lagere Arbeit über RPMsg an den zweiten Alif-Core aus (der@async_remote-Dekorator,Endpoint/EndpointIO).ROMFS — ein schreibgeschütztes
/rom-Dateisystem mit eingebauten TFLite-Modellen und Haar-Kaskaden sowie ein neuertools/mkromfs.py-Host-Builder.VL53L8CX 8x8-Multi-Zone-Time-of-Flight-Sensor-Unterstützung.
Neue ML-Postprozessoren —
yolo_v8_postprocessundyolo_lc_postprocess.MicroPython auf 1.25.0 aktualisiert.
Breaking: Eingebaute Modelle und Haar-Kaskaden werden jetzt per Pfad aus
/romgeladen (siehe die ml.Model-Änderung und die Haar-Kaskaden-Änderung).
Neue Funktionen¶
OpenMV AE3 — neues Alif-Ensemble-Board (Cortex-M55-Anwendungskern + Ethos-U55 NPU), mit Port, Bootloader, Board-Konfiguration, RGB-LED und ROMFS-Unterstützung.
openamp— ein neues Modul für das Alif-Dual-Core-RPC-Modell (Open-AMP / RPMsg):Endpoint,EndpointIO,new_service_callbackund der@async_remote-Dekorator zum Auslagern marshallter Funktionen an den zweiten Core. Die HE-/HP-Cores liefern einen standardmäßigen asyncio-basierten_boot.py-Task-Runner mit.audio— der Alif-Port fügt das Audiomodul (PDM-Mikrofon) mit einer callback-basierten Streaming-API (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) auf dem AE3 hinzu.ROMFS — ein schreibgeschütztes
/rom-Dateisystem mit eingebauten Assets (TFLite-Modelle, Haar-Kaskaden, …), pro Board paketiert, ein neuestools/mkromfs.py-Host-Tool (tflite, tflite+vela, Haar-Kaskade, Text, Binärdatei) und einscripts/libraries/romfs.py-Helfer, derls_romfs()bereitstellt.ML-Postprocessing — neue Klassen
yolo_v8_postprocess(YOLOv8) undyolo_lc_postprocess(leichtgewichtige tiny-YOLOv2-Variante mit für Embedded optimierten Standard-Anchors), die jeweilsthreshold,nms_thresholdundnms_sigmaannehmen.GenX320-Anti-Flicker — ein neuer
IOCTL_GENX320_SET_AFK-ioctl zum Aktivieren und Konfigurieren des Anti-Flicker-Filters des Ereignissensors (min./max. Flimmerfrequenz in Hz), mit einemgenx320_grayscale_set_afk.py-Beispiel.VL53L8CX — Unterstützung für den 8x8-Multi-Zone-Time-of-Flight-Sensor über das
tof-Modul (automatisch erkannt, 8x8 bei 15 Hz).
Weitere Änderungen und Verbesserungen¶
MicroPython auf 1.25.0 aktualisiert (STM32- und i.MX-RT-Ports), mit dem hinzugefügten Upstream-Alif-Port und entfernten alten BT-HCI-Treibern aus den STM32- / i.MX-RT-Ports.
GenX320 — eine neue ISSD-Sequenz verdoppelt den internen Pixeltakt (24 → 48 MHz) für höhere Bildraten.
STM32N6 / ST Edge AI — Grundlagen für die STM32N6-Neural-ART-Modellbereitstellung (ST-Edge-AI-Tooling und ROMFS-Unterstützung).
PAG7936 — die CSI-PHY-Bitrate wird jetzt gesetzt, was den Betrieb dieses Sensors verbessert.
Fehlerbehebungen¶
Kamera und Sensoren:
Die IMU über I2C behoben — Boards, die die LSM6DSx-IMU über I2C verdrahten, initialisieren und lesen jetzt korrekt (der I2C-Pfad nutzte zuvor einen fehlerhaften Lesepfad und falsche Konstanten).
Die FLIR-Boson-Initialisierung wiederholt jetzt bis zu 10 Mal für ältere Sensoren (< IDD 4.x), die ~10 s zum Booten brauchen, und die Werkseinstellungen werden beim Reset wiederhergestellt, sodass extern geladene Einstellungen die Videoausgabe nicht beeinträchtigen können.
Behoben, dass GenX320-
psee_ehc_activate_overridedie falsche (null) Akkumulationszeit schrieb.Auf STM32-Boards ohne FastMode+-Hardware wird die Anforderung des I2C-Fast-Mode jetzt korrekt abgesichert, statt den Bus stillschweigend fehlzukonfigurieren.
Maschinelles Lernen:
Das Sammeln von Begrenzungsrahmen und die
np.nonzero-Behandlung in den YOLOv2- / YOLOv5-Postprozessoren behoben, was die Zuverlässigkeit der Erkennung verbessert.
Hardware- und Board-Unterstützung¶
OpenMV AE3 — neues Alif-Ensemble-Board (Cortex-M55 + Ethos-U55 NPU).
VL53L8CX — 8x8-Multi-Zone-Time-of-Flight-Sensor; der ToF-Sensor des AE3 wurde vom VL53L5CX auf den VL53L8CX umgestellt.
STM32N6 — Grundlagen für die ST-Edge-AI-(Neural-ART)-Modellbereitstellung.
Breaking API Changes¶
Für Benutzer sichtbare API-Brüche zwischen v4.6.20 und v4.7.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.
Die Änderungen sind in dieser Reihenfolge nach Auswirkung gruppiert. Wenn du nur deinen Code portieren möchtest, springe für eine kompakte To-do-Liste zur Migrations-Checkliste am Ende. Jeder Commit-Hash verweist auf seinen Diff auf GitHub.
Eingebaute Modelle werden per Pfad geladen, nicht per Name (major)¶
ml.Model lädt ein eingebautes Modell nicht mehr aus einem reinen Namens-String. Modelle werden jetzt per Pfad aus dem Dateisystem / ROMFS geladen:
model = ml.Model("/rom/person_detect.tflite") # was: ml.Model("person_detect")
Das C-seitige model.labels-Attribut wurde entfernt; Labels werden jetzt vom Python-ml.Model-Wrapper aus einer begleitenden <model>.txt-Datei geladen (None, falls nicht vorhanden). Alle mitgelieferten Beispiele und ml/apps.py wurden auf /rom/*.tflite-Pfade aktualisiert.
Haar-Kaskaden werden aus ROMFS geladen (minor)¶
image.HaarCascade() lädt eingebaute Kaskaden jetzt über das VFS / ROMFS. Die Standard-Frontal-Gesichtskaskaden-Datei wurde von haarcascade_frontalface_default.xml in haarcascade_frontalface.xml umbenannt, und ein Ladefehler löst jetzt einen RuntimeError („Failed to load Haar cascade“) statt eines OSError aus.
Commit: 9de1220d8
Semantik von tof.reset() / tof.deinit() (behavior)¶
Im tof-Modul war reset() zuvor ein Alias für init(), und es gab kein echtes Deinit. tof.reset() führt jetzt einen tatsächlichen Sensor-Reset durch, und tof.deinit() fährt den Sensor ordnungsgemäß herunter (mit VL53L5CX-Shutdown-Unterstützung). Code, der sich darauf verließ, dass reset() den Sensor neu initialisiert, sollte erneut überprüft werden.
GenX320-Timing- und Ereignismodus-Einschränkungen (behavior)¶
Die neue GenX320-ISSD-Sequenz ändert die Zeitbasis des Sensors: Bildraten- und Belichtungsargumente werden jetzt in 1-MHz-Einheiten ausgedrückt, statt taktskaliert zu sein, und das HSYNC-Blanking wird dynamisch an die angeforderte Bildrate angepasst. Skripte, die GenX320-Timing-Werte fest codiert haben, müssen neu abgestimmt werden. Die Ereignismodus-Erfassung löst jetzt einen Fehler aus, wenn die Bildtransposition aktiviert ist (sie wird in dieser Konfiguration nicht unterstützt).
Migrations-Checkliste¶
Für eine saubere Portierung auf v4.7.0 fallen typischerweise folgende Arbeiten an:
Ändere das Laden eingebauter Modelle von einem Namens-String auf einen
/rom/<name>.tflite-Pfad und stelle Labels über eine begleitende<name>.txt-Datei bereit (die ml.Model-Änderung).Aktualisiere
haarcascade_frontalface_default.xmlaufhaarcascade_frontalface.xmlund fange bei einem Kaskaden-Ladefehler einenRuntimeError(nichtOSError) ab (die Haar-Kaskaden-Änderung).Entferne Code, der sich darauf verließ, dass
tof.reset()den Sensor neu initialisiert (die tof-Änderung).Stimme alle fest codierten GenX320-Bildraten- / Belichtungswerte auf 1-MHz-Einheiten neu ab und aktiviere im Ereignismodus keine Transposition (die GenX320-Änderung).