v4.7.0

v4.7.0 je velké vydání s novými funkcemi. Hlavní novinky: nová deska OpenMV AE3 (Alif Ensemble, Cortex-M55 + Ethos-U55 NPU) s dvoujádrovým programovacím modelem openamp, souborový systém ROMFS (/rom) pouze pro čtení s přibalenými modely a kaskádami, podpora VL53L8CX 8x8 time-of-flight, nové post-processory YOLOv8 / YOLO-LC a MicroPython 1.25. Vydání také mění způsob načítání vestavěných modelů a Haar kaskád, takže si přečtěte níže uvedené zásadní změny.

Hlavní novinky

  • Deska OpenMV AE3 — deska Alif Ensemble (Cortex-M55 + Ethos-U55 NPU) s kompletním portem, bootloaderem a ROMFS.

  • Dvoujádrový modul openamp — přesun práce na druhé jádro Alif přes RPMsg (dekorátor @async_remote, Endpoint/ EndpointIO).

  • ROMFS — souborový systém /rom pouze pro čtení s vestavěnými TFLite modely a Haar kaskádami, plus nový hostitelský builder tools/mkromfs.py.

  • VL53L8CX podpora 8x8 vícezónového time-of-flight senzoru.

  • Nové ML post-processoryyolo_v8_postprocess a yolo_lc_postprocess.

  • MicroPython aktualizován na 1.25.0.

  • Zásadní změna: vestavěné modely a Haar kaskády se nyní načítají z /rom podle cesty (viz změna ml.Model a změna Haar kaskád).

Nové funkce

  • OpenMV AE3 — nová deska Alif Ensemble (aplikační jádro Cortex-M55 + Ethos-U55 NPU), s portem, bootloaderem, konfigurací desky, RGB LED a podporou ROMFS.

  • openamp — nový modul pro RPC model dvoujádrového Alif (Open-AMP / RPMsg): Endpoint, EndpointIO, new_service_callback a dekorátor @async_remote pro přesun marshalovaných funkcí na druhé jádro. Jádra HE/HP dodávají výchozí spouštěč úloh _boot.py založený na asyncio.

  • audio — port Alif přidává modul audio (PDM mikrofon) se streamovacím API založeným na callbacku (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) na AE3.

  • ROMFS — souborový systém /rom pouze pro čtení s vestavěnými prostředky (TFLite modely, Haar kaskády, …) balenými podle desky, nový hostitelský nástroj tools/mkromfs.py (tflite, tflite+vela, Haar kaskáda, text, binární) a pomocník scripts/libraries/romfs.py vystavující ls_romfs().

  • ML post-processing — nové třídy yolo_v8_postprocess (YOLOv8) a yolo_lc_postprocess (odlehčená varianta tiny-YOLOv2 s výchozími kotvami optimalizovanými pro embedded), z nichž každá přijímá threshold, nms_threshold a nms_sigma.

  • Anti-flicker GenX320 — nový ioctl IOCTL_GENX320_SET_AFK pro povolení a konfiguraci anti-flicker filtru událostního senzoru (min/max frekvence blikání v Hz), s příkladem genx320_grayscale_set_afk.py.

  • VL53L8CX — podpora 8x8 vícezónového time-of-flight senzoru prostřednictvím modulu tof (automaticky detekováno, 8x8 při 15 Hz).

Další změny a vylepšení

  • MicroPython aktualizován na 1.25.0 (porty STM32 a i.MX RT), s přidaným upstream portem Alif a odebranými dřívějšími BT-HCI ovladači z portů STM32 / i.MX RT.

  • GenX320 — nová sekvence ISSD zdvojnásobuje vnitřní hodiny pixelů (24 → 48 MHz) pro vyšší snímkovou frekvenci.

  • STM32N6 / ST Edge AI — základy pro nasazení modelů Neural-ART na STM32N6 (nástroje ST Edge AI a podpora ROMFS).

  • PAG7936 — nyní je nastavena bitová rychlost CSI PHY, což zlepšuje provoz tohoto senzoru.

Opravy chyb

Kamera a senzory:

  • Opravena IMU přes I2C — desky zapojující IMU LSM6DSx na I2C se nyní správně inicializují a čtou (cesta I2C dříve používala vadnou cestu čtení a nesprávné konstanty).

  • Inicializace FLIR Boson nyní opakuje pokus až 10krát u starších senzorů (< IDD 4.x), jejichž nabootování trvá ~10 s, a při resetu se obnovují tovární výchozí nastavení, takže externě načtená nastavení nemohou narušit video výstup.

  • Opraveno, že psee_ehc_activate_override u GenX320 zapisoval nesprávnou (nulovou) dobu akumulace.

  • Na deskách STM32 bez hardwaru FastMode+ je nyní požadavek na fast mode I2C správně ošetřen místo tichého chybného nakonfigurování sběrnice.

Strojové učení:

  • Opraveno shromažďování ohraničujících rámečků a zpracování np.nonzero v post-processorech YOLOv2 / YOLOv5, což zlepšuje spolehlivost detekce.

Podpora hardwaru a desek

  • OpenMV AE3 — nová deska Alif Ensemble (Cortex-M55 + Ethos-U55 NPU).

  • VL53L8CX — 8x8 vícezónový time-of-flight senzor; ToF senzor desky AE3 byl přepnut z VL53L5CX na VL53L8CX.

  • STM32N6 — základy pro nasazení modelů ST Edge AI (Neural-ART).

Zásadní změny API

Uživatelsky viditelné změny API mezi v4.6.20 a v4.7.0. Rozsah: Python C-moduly v modules/ a Python knihovny v scripts/libraries/.

Každá změna je označena svým dopadem:

  • major — většina skriptů, které ji používaly, vyžaduje úpravy.

  • minor — úzké API; ovlivňuje pouze skripty, které je používaly.

  • behavior — stejné API, jiné výsledky; znovu zkontrolujte vyladěné skripty.

Změny jsou seskupeny podle dopadu v tomto pořadí. Pokud chcete jen přenést svůj kód, přejděte na kontrolní seznam migrace na konci pro stručný seznam úkolů. Každý hash commitu odkazuje na svůj diff na GitHubu.

Vestavěné modely se načítají podle cesty, ne podle názvu (major)

ml.Model již nenačítá vestavěný model z holého řetězce s názvem. Modely se nyní načítají ze souborového systému / ROMFS podle cesty:

model = ml.Model("/rom/person_detect.tflite")   # was: ml.Model("person_detect")

Atribut model.labels na straně C byl odebrán; štítky nyní načítá Python wrapper ml.Model z přidruženého souboru <model>.txt (None, pokud chybí). Všechny přiložené příklady a ml/apps.py byly aktualizovány na cesty /rom/*.tflite.

Commity: 978fa436c, 3f55d956c, 416bc4613

Haar kaskády se načítají z ROMFS (minor)

image.HaarCascade() nyní načítá vestavěné kaskády přes VFS / ROMFS. Výchozí soubor kaskády pro čelní obličej byl přejmenován z haarcascade_frontalface_default.xml na haarcascade_frontalface.xml a selhání načtení nyní vyvolá RuntimeError („Failed to load Haar cascade“) místo OSError.

Commit: 9de1220d8

Sémantika tof.reset() / tof.deinit() (behavior)

V modulu tof byla reset() dříve aliasem init() a neexistoval žádný skutečný deinit. tof.reset() nyní provádí skutečný reset senzoru a tof.deinit() senzor řádně vypíná (s podporou vypnutí VL53L5CX). Kód, který spoléhal na to, že reset() znovu inicializuje senzor, by měl být znovu zkontrolován.

Commity: 20d6b53f8, c743cab6a

Omezení časování a událostního režimu GenX320 (behavior)

Nová sekvence ISSD u GenX320 mění časovou základnu senzoru: argumenty snímkové frekvence a expozice jsou nyní vyjádřeny v jednotkách 1 MHz místo škálování podle hodin a zatemnění HSYNC se dynamicky přizpůsobuje požadované snímkové frekvenci. Skripty, které měly napevno zakódované hodnoty časování GenX320, je musí znovu vyladit. Snímání v událostním režimu nyní vyvolá chybu při povolení transpozice obrazu (v této konfiguraci není podporována).

Commity: 660a783d6, 7a718c6af

Kontrolní seznam migrace

Pro čistý přechod na v4.7.0 je typická práce následující:

  1. Změňte načítání vestavěného modelu z řetězce s názvem na cestu /rom/<name>.tflite a poskytněte štítky prostřednictvím přidruženého souboru <name>.txt (změna ml.Model).

  2. Aktualizujte haarcascade_frontalface_default.xml na haarcascade_frontalface.xml a zachytávejte RuntimeError (nikoli OSError) při selhání načtení kaskády (změna Haar kaskád).

  3. Odeberte kód, který spoléhal na to, že tof.reset() znovu inicializuje senzor (změna tof).

  4. Znovu vylaďte všechny napevno zakódované hodnoty snímkové frekvence / expozice GenX320 na jednotky 1 MHz a nepovolujte transpozici v událostním režimu (změna GenX320).