v4.8.0

v4.8.0 je velké vydání plné nových funkcí. Mezi hlavní novinky patří: zcela nový třídně založený modul kamery csi s podporou více kamer, deska OpenMV N6 (STM32N6) s NPU Neural-ART, backend pro NPU inference, RAW režim událostí pro event kameru GenX320, nový modul crc, reorganizovaná knihovna pro ML post-processing a MicroPython 1.26. Odstraňuje také několik starších API — modul buzzer a ovládání FLIR Lepton z modulu fir — proto si přečtěte níže uvedené nekompatibilní změny.

Hlavní novinky

  • Nový modul kamery csi. Třídně založené API csi.CSI s podporou více současně běžících kamer, zavedené vedle staršího modulu sensor.

  • OpenMV N6. Deska STM32N6 s NPU Neural-ART, trojitým bufferováním, Soft-CSI a modulem ToF.

  • NPU inference. Backend ST Neural-ART (STAI) pro hardwarově akcelerovanou inference modelů.

  • Režim událostí GenX320. RAW výstup událostí spolu s draw_event_histogram() pro vykreslování z event kamery.

  • Reorganizovaný ML post-processing — subbalíčky podle dodavatelů (ml.postprocessing.ultralytics, mediapipe, edgeimpulse, darknet) s novými detektory BlazeFace / BlazePalm a detektory klíčových bodů rukou a obličeje.

  • Nový modul crc — hardwarově akcelerovaný CRC-16 / CRC-32.

  • MicroPython aktualizován na 1.26.0.

  • Nekompatibilní změna: modul buzzer a ovládání Lepton z modulu fir byly odstraněny (Lepton je nyní běžná kamera). Viz změna fir/Lepton a odstranění buzzeru.

Nové funkce

  • Nový modul kamery csi — třídně založený objekt csi.CSI s více současně běžícími kamerami (až tři na N6), neblokujícím snímáním, vlastními rozměry snímku (w, h) a informativním výpisem print() / repr. Je zaveden vedle staršího modulu sensor (nejde o přímou náhradu).

  • crccrc.crc16() a crc.crc32(), hardwarově akcelerované se softwarovou zálohou, na OpenMV N6 a AE3.

  • image.Image.draw_image() získala klíčové slovo transform= (2-D float matice ndarray pro afinní/perspektivní transformace, GPU akcelerovaná na STM32 a Alif); stejná transformace je dostupná i při konverzi obrazu.

  • draw_event_histogram() — vykreslení histogramů z event kamery.

  • RAW režim událostí GenX320csi.IOCTL_GENX320_SET_MODE s csi.GENX320_MODE_HISTO / csi.GENX320_MODE_EVENT, csi.IOCTL_GENX320_READ_EVENTS, csi.IOCTL_GENX320_CALIBRATE, konstanty typů událostí a nové ukázkové skripty.

  • ML — NPU inference backend ST Neural-ART (STAI); ml.Model získala klíčové slovo postprocess= (post-procesor nyní běží automaticky uvnitř predict() i bez callbacku); ml.postprocessing byl reorganizován do subbalíčků podle dodavatelů — ml.postprocessing.ultralytics (YoloV5, YoloV8), ml.postprocessing.darknet (YoloV2, YoloLC), ml.postprocessing.edgeimpulse (Fomo) a ml.postprocessing.mediapipe (BlazeFace, BlazePalm, HandLandmarks, FaceLandmarks) — staré názvy ve snake_case zůstávají jako aliasy; byly přidány ml.utils.draw_keypoints() a ml.utils.draw_skeleton(); přibyly přibalené modely v ROMFS (BlazeFace, YOLO-LC, YOLOv8n, klíčové body dlaně/ruky/obličeje).

  • audio — vstup z digitálního mikrofonu MDF na STM32N6.

  • Displej — ovladač OLED SSD1351 a ukázka; kontroléry SPIDisplay mohou přepsat své inicializační příkazy; konstruktor SPI displeje získal klíčová slova hmirror / vflip.

  • Profiler na zařízení — čítače cyklů/událostí SysTick + Armv8.1-M PMU s instrumentací na úrovni funkcí, čitelné přes ladicí linku (pyopenmv získal podporu profilování a ELF symbolů).

  • Podpora nových senzorů — PixArt PS5520; FLIR BOSON na OpenMV H7 Plus; automatická detekce GenX320.

Ostatní změny a vylepšení

  • MicroPython aktualizován na 1.26.0.

  • Spouštění kamery — hodiny senzoru byly odděleny od stavu CSI, detekce kamery při startu je rychlejší (nejběžnější konfigurace se zkouší jako první) a výchozí hodiny OV7725 na OpenMV 3 byly opraveny.

  • Kvalita obrazu — softwarová ISP gama korekce (Alif a STM32) a korekce vadných pixelů (STM32) jsou ve výchozím stavu zapnuty; senzory PAG7936 a PS5520 získaly ovládání automatického vyvážení bílé.

  • Výkonimage.Image.to_ndarray() je akcelerována pomocí Helium SIMD a FOMO post-procesor byl vektorizován pomocí ulab.

  • Přepsaný ovladač FLIR Lepton pro asynchronní příjem snímků na pozadí — rotace/transpose nyní funguje, kreslení provádí bilineární zvětšení a reset je rychlejší.

  • Propustnost snímání — i.MX RT1062 CSI nyní využívá plný DMA offload a STM32 N6 má hardwarově-GPU draw_image().

Opravy chyb

Kamera a senzory:

  • Opraveny režimy RGB565 / GRAYSCALE / BAYER / YUV422 napříč senzory STM32, PAJ6100 na OpenMV H7 / H7 Plus, OpenMV 2 QVGA RGB565 a konfigurace N6 CSI mono / RGB-YUV; softwarová testovací kamera se nyní resetuje deterministicky.

  • Automatické vyvážení bílé již nezbarvuje obraz dozelena při nízkých nebo proměnlivých snímkových frekvencích (klouzavý průměr za 250 ms nahrazuje vzorkování každých 100 snímků) a je opraveno kolísání jasu PS5520.

Zpracování obrazu:

  • Opravena chyba vykreslování čar; image.Image.flush() nyní vyprazdňuje JPEG buffer obrazu, na kterém byla zavolána; Normalization nyní aplikuje střední hodnotu/směrodatnou odchylku na float vstupy; opravena alokace obrazu načteného ze souboru.

Snímání kamerou:

  • Opraveno závažné poškození obrazu u přenosů jiných než JPEG (přerušení snímku je nyní povoleno pouze v JPEG režimu), podpora JPEG režimu 3 a zaseknutí kvůli velikosti DMA řádku a malému bufferu na STM32; synchronizace VOSPI / Lepton je spolehlivější, zejména na N6.

Různé:

  • omv.board_id() vrací správné UID na RT1060; YoloV2 již nehavaruje, je-li vytvořen bez explicitních kotev.

Hardware a podpora desek

  • OpenMV N6 — STM32N6 s NPU Neural-ART, trojitým bufferováním, výstupem SPI LCD/TV, Soft-CSI, modulem tof a přibalenými modely v ROMFS.

  • Arduino GIGA — výstup na displej MIPI DSI.

  • Nové senzory — PixArt PS5520; FLIR BOSON na OpenMV H7 Plus; automatická detekce GenX320.

  • OpenMV Pure Thermal — FLIR Lepton je nyní běžný (sekundární) senzor kamery.

  • Alif AE3 — softwarová ISP gama korekce, modul crc a opravy SPI.

Nekompatibilní změny API

Změny API viditelné pro uživatele mezi v4.7.0 a v4.8.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é ho používaly.

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

  • tooling — ovlivňuje pouze hostitelské nástroje / sestavování ze zdroje.

Změny jsou seskupeny podle dopadu v tomto pořadí — nejprve major, poté minor, behavior a tooling. 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.

FLIR Lepton přesunut mimo modul fir (major)

FLIR Lepton je nyní řízen jako běžný senzor kamery namísto přes modul fir. Ovládání Lepton bylo z fir odstraněno: typ FIR_LEPTON a metody radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() a trigger_ffc() jsou pryč. Snímejte Lepton jako jakoukoli jinou kameru (na OpenMV Pure Thermal se objevuje jako sekundární senzor); ukázka Pure Thermal byla přepsána do nového API. Senzory fir jiné než Lepton (Grid-EYE, MLX, AMG8833) zůstávají beze změny.

Commity: bacfb7aeb, 117710566, 592a22902, 1a614202e

Modul buzzer odstraněn (minor)

Modul buzzer byl odstraněn z portů STM32 a i.MX RT. Místo něj ovládejte bzučák pomocí machine.PWM; byla přidána ukázka bzučáku pro Pure Thermal využívající PWM.

Commity: ccb947924, 444120f2d

omv.disable_fb() odstraněno (minor)

Funkce omv.disable_fb() byla odstraněna; streamování snímkového bufferu se nyní řídí přes API kamery. Starší RPC skripty pro desktop, které se na ni spoléhaly, byly také odstraněny.

Commity: 84c3db58a, 6fe99051c

csi je nový — jeho API ještě není zmrazené (minor)

Modul csi je zaveden ve v4.8.0 a jeho API se během vydání vyvíjelo: csi.fb() bylo odstraněno a csi.CSI.snapshot() (image=...) nyní vyžaduje měnitelný obraz a zachycený snímek do něj vykreslí/zmenší namísto provedení surové hluboké kopie. Časní uživatelé nového modulu by měli znovu otestovat; starší API sensor zůstává nedotčeno.

Commity: 0bc0385eb, 8cd7a309f

Režim streamu image.ImageIO a close() (minor)

image.ImageIO — argument mode nyní přijímá pouze malá písmena 'r' / 'w' (velká písmena jsou odmítnuta s aktualizovanou chybovou zprávou) a otevření s 'w' vždy zkrátí/znovu vytvoří soubor namísto zachování existujícího streamu. ImageIO.close() je nyní idempotentní (uzavření již uzavřeného streamu již nevyvolá výjimku) a vrací None namísto objektu streamu.

Commity: 715c4cbba, 21ceec422

Návratová hodnota BlazeFace / BlazePalm (minor)

Post-procesory BlazeFace a BlazePalm (nové v tomto vydání) nyní vracejí jediný seznam ohraničujících rámečků namísto úplného seznamu po třídách — volající indexují výsledek přímo, nikoli přes [0].

Commit: 75e16b573

Callback ML post-procesoru přijímá surové tenzory (behavior)

Callback post-processu metody predict() třídy ml.Model nyní přijímá surové (kvantované) reference výstupních tenzorů namísto předem konvertovaných float ndarrayů — tím se předchází vyčerpání paměti u velkých modelů. Pokud není zadán žádný callback, stále se vrací float ndarray. Vlastní callbacky musí tenzory samy dekvantovat (vestavěné post-procesory to již dělají).

Commit: 84e6ee650

Hodiny kamery odděleny od stavu CSI (behavior)

Hodiny senzoru jsou nyní nezávislé na stavu CSI. set_clock / set_frequency překonfigurují hodiny pouze tehdy, když se požadovaná frekvence liší o více než toleranci, a get_clk_frequency přijímá boolean pro vrácení přesné (nikoli nominální) frekvence. Výchozí hodiny jsou 24 MHz na OpenMV N6 a AE3, takže při startu není potřeba žádné explicitní set_clock(). Skripty, které přepínaly hodiny pro časově citlivá snímání, by si měly znovu ověřit své předpoklady.

Commity: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca

USB ladicí protokol a cíle firmwaru (tooling)

Nic z toho neovlivňuje skripty MicroPython. Zastaralé příkazy USBDBG (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) byly odstraněny a nepodporované příkazy ze starších IDE jsou nyní zahozeny namísto pádu desek s TinyUSB při připojení; starší cíl firmwaru STM32 UVC byl odstraněn. Staré hostitelské nástroje by se měly aktualizovat; podrobnosti viz historie repozitáře firmwaru.

Commity: 90bd11e93, 657c9a632, 35182f035

Kontrolní seznam migrace

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

  1. Pokud jste používali FLIR Lepton přes fir, přejděte na jeho snímání jako senzoru kamery (změna fir/Lepton).

  2. Nahraďte jakékoli použití buzzer třídou machine.PWM (odstranění buzzeru).

  3. Odstraňte volání omv.disable_fb() (odstranění omv.disable_fb()).

  4. Pro image.ImageIO: používejte malá písmena 'r'/'w' a počítejte s tím, že 'w' zkrátí soubor (změna ImageIO).

  5. Pro vlastní callbacky ML post-processu: dekvantujte surové reference tenzorů sami, nebo se spolehněte na výchozí float cestu (změna callbacku).

  6. Znovu zkontrolujte jakýkoli skript, který ovládal hodiny senzoru pro časově citlivá snímání (změna hodin).