v4.8.0

A v4.8.0 egy jelentős funkciókat hozó kiadás. A főbb újdonságai: egy vadonatúj, osztályalapú csi kameramodul többkamerás támogatással, az OpenMV N6 (STM32N6) panel Neural-ART NPU-val, egy NPU következtetési háttérprogram, a GenX320 eseménykamera RAW eseménymódja, egy új crc modul, egy átszervezett ML utófeldolgozó könyvtár, valamint a MicroPython 1.26. Emellett eltávolít néhány örökölt API-t — a buzzer modult és a fir modul FLIR Lepton vezérlését —, ezért olvasd el az alábbi töréses változásokat.

Kiemelt újdonságok

  • Új csi kameramodul. Egy osztályalapú csi.CSI API több egyidejű kamera támogatásával, amelyet az örökölt sensor modul mellett vezettünk be.

  • OpenMV N6. Az STM32N6 panel Neural-ART NPU-val, hármas pufferezéssel, Soft-CSI-vel és egy ToF modullal.

  • NPU következtetés. Egy ST Neural-ART (STAI) háttérprogram a hardveresen gyorsított modellkövetkeztetéshez.

  • GenX320 eseménymód. RAW eseménykimenet, valamint a draw_event_histogram() az eseménykamera megjelenítéséhez.

  • Átszervezett ML utófeldolgozás — gyártói alcsomagok (ml.postprocessing.ultralytics, mediapipe, edgeimpulse, darknet) új BlazeFace / BlazePalm / kéz- és arc-tereppont-detektorokkal.

  • Új crc modul — hardveresen gyorsított CRC-16 / CRC-32.

  • A MicroPython 1.26.0-ra frissült.

  • Töréses: a buzzer modult és a fir modul Lepton vezérlését eltávolítottuk (a Lepton mostantól egy hagyományos kamera). Lásd a fir/Lepton változást és a buzzer eltávolítását.

Új funkciók

  • Az új csi kameramodul — egy osztályalapú csi.CSI objektum több egyidejű kamerával (az N6-on legfeljebb hárommal), nem blokkoló pillanatképpel, egyéni (w, h) képkockaméretekkel, valamint egy informatív print() / repr kimenettel. Az örökölt sensor modul mellett vezettük be (nem közvetlen helyettesítő).

  • crccrc.crc16() és crc.crc32(), hardveresen gyorsítva szoftveres tartalékkal, az OpenMV N6-on és AE3-on.

  • A image.Image.draw_image() kapott egy transform= kulcsszót (egy 2D-s lebegőpontos ndarray mátrix affin/perspektivikus torzításokhoz, GPU-val gyorsítva STM32-n és Alifen); ugyanez a transzformáció elérhető a képkonvertálásban is.

  • draw_event_histogram() — eseménykamera-hisztogramok megjelenítése.

  • GenX320 RAW eseménymódcsi.IOCTL_GENX320_SET_MODE a csi.GENX320_MODE_HISTO / csi.GENX320_MODE_EVENT értékekkel, csi.IOCTL_GENX320_READ_EVENTS, csi.IOCTL_GENX320_CALIBRATE, eseménytípus-konstansok és új példaszkriptek.

  • ML — egy ST Neural-ART (STAI) NPU következtetési háttérprogram; a ml.Model kapott egy postprocess= kulcsszót (az utófeldolgozó mostantól automatikusan lefut a predict() belsejében, akár visszahívás nélkül is); a ml.postprocessing gyártói alcsomagokba lett átszervezve — ml.postprocessing.ultralytics (YoloV5, YoloV8), ml.postprocessing.darknet (YoloV2, YoloLC), ml.postprocessing.edgeimpulse (Fomo) és ml.postprocessing.mediapipe (BlazeFace, BlazePalm, HandLandmarks, FaceLandmarks) — a régi snake_case nevek aliasként megmaradnak; bekerült a ml.utils.draw_keypoints() és a ml.utils.draw_skeleton(); a beépített ROMFS modellek köre bővült (BlazeFace, YOLO-LC, YOLOv8n, tenyér-/kéz-/arc-tereppontok).

  • audio — MDF digitális mikrofon bemenet az STM32N6-on.

  • Kijelző — egy SSD1351 OLED meghajtó és példa; a SPIDisplay vezérlők felülbírálhatják az init parancsaikat; az SPI kijelző konstruktora kapott hmirror / vflip kulcsszavakat.

  • Eszközön futó profiler — SysTick + Armv8.1-M PMU ciklus-/eseményszámlálók függvényszintű műszerezéssel, a hibakeresési kapcsolaton keresztül olvashatóan (a pyopenmv profilozási és ELF-szimbólum-támogatást kapott).

  • Új érzékelő-támogatás — PixArt PS5520; FLIR BOSON az OpenMV H7 Plus-on; GenX320 automatikus felismerés.

Egyéb változások és fejlesztések

  • A MicroPython 1.26.0-ra frissült.

  • Kamera indítása — az érzékelő órajele le lett választva a CSI állapotról, a kamera felismerése indításkor gyorsabb (a leggyakoribb konfigurációt próbálja először), és az OpenMV 3 OV7725 alapértelmezett órajele javítva lett.

  • Képminőség — a szoftveres ISP gamma-korrekció (Alif és STM32) és a hibás képpont korrekció (STM32) alapértelmezetten be van kapcsolva; a PAG7936 és PS5520 érzékelők automatikus fehéregyensúly-vezérlést kaptak.

  • Teljesítmény — a image.Image.to_ndarray() Helium SIMD-del gyorsítva van, a FOMO utófeldolgozó pedig ulab segítségével vektorizálva lett.

  • A FLIR Lepton meghajtó újraírva, hogy a képkockákat aszinkron módon, a háttérben fogadja — a forgatás/transpose mostantól működik, a rajzolás bilineárisan felskáláz, és a visszaállítás gyorsabb.

  • Rögzítési átviteli teljesítmény — az i.MX RT1062 CSI mostantól teljes DMA-tehermentesítést használ, az STM32 N6 pedig hardveres GPU-s draw_image() műveletet kapott.

Hibajavítások

Kamera és érzékelők:

  • Javítva lettek az RGB565 / GRAYSCALE / BAYER / YUV422 módok az STM32 érzékelőkön, a PAJ6100 az OpenMV H7 / H7 Plus-on, az OpenMV 2 QVGA RGB565, valamint az N6 CSI mono / RGB-YUV konfiguráció; a szoftveres tesztkamera mostantól determinisztikusan áll vissza.

  • Az automatikus fehéregyensúly többé nem teszi zölddé a képet alacsony vagy változó képkockasebesség mellett (egy 250 ms-os mozgóátlag váltja fel a 100 képkockánkénti mintavételezést), és a PS5520 fényerő-villódzása is javítva lett.

Képfeldolgozás:

  • Javítva lett egy vonalrajzolási megjelenítési hiba; a image.Image.flush() mostantól annak a képnek a JPEG pufferét üríti ki, amelyen meghívták; a Normalization mostantól lebegőpontos bemenetekre is alkalmazza az átlagot/szórást; a fájlból betöltött kép memóriafoglalása javítva lett.

Kamerás rögzítés:

  • Javítva lett egy súlyos képromlás a nem JPEG átviteleknél (a képkocka-megszakítás mostantól csak JPEG módban van engedélyezve), a JPEG 3-as mód támogatása, valamint a DMA sorméret- és kis-puffer-fagyások az STM32-n; a VOSPI / Lepton szinkronizáció megbízhatóbb lett, különösen az N6-on.

Vegyes:

  • Az omv.board_id() a helyes UID-t adja vissza az RT1060-on; a YoloV2 többé nem omlik össze, ha explicit horgonyok nélkül hozzák létre.

Hardver- és paneltámogatás

  • OpenMV N6 — STM32N6 Neural-ART NPU-val, hármas pufferezéssel, SPI LCD/TV kimenettel, Soft-CSI-vel, a tof modullal és beépített ROMFS modellekkel.

  • Arduino GIGA — MIPI DSI kijelzőkimenet.

  • Új érzékelők — PixArt PS5520; FLIR BOSON az OpenMV H7 Plus-on; GenX320 automatikus felismerés.

  • OpenMV Pure Thermal — a FLIR Lepton mostantól egy hagyományos (másodlagos) kamera-érzékelő.

  • Alif AE3 — szoftveres ISP gamma-korrekció, a crc modul és SPI javítások.

Töréses API-változások

A felhasználó számára látható API-törések a v4.7.0 és a v4.8.0 között. Hatókör: a modules/ mappában lévő Python C-modulok és a scripts/libraries/ mappában lévő Python könyvtárak.

Minden változás meg van jelölve a hatásával:

  • major — a legtöbb szkript, amely használta, módosítást igényel.

  • minor — szűk API; csak az azt használó szkripteket érinti.

  • behavior — azonos API, eltérő eredmények; ellenőrizd újra a finomhangolt szkripteket.

  • tooling — csak a gazda eszközöket / a forrásból fordítást érinti.

A változások ebben a sorrendben vannak hatás szerint csoportosítva — előbb a major, majd a minor, behavior és tooling. Ha csak átültetnéd a kódodat, ugorj a végén lévő migrációs ellenőrzőlistára egy tömör teendőlistáért. Minden commit-hash a GitHubon lévő diffjére mutat.

A FLIR Lepton elköltözött a fir modulból (major)

A FLIR Lepton mostantól hagyományos kamera-érzékelőként van vezérelve a fir modul helyett. A Lepton vezérlése eltávolításra került a fir modulból: a FIR_LEPTON típus, valamint a radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() és trigger_ffc() metódusok megszűntek. A Leptont bármely más kamerához hasonlóan rögzítsd (az OpenMV Pure Thermal-on másodlagos érzékelőként jelenik meg); a Pure Thermal példa át lett írva az új API-ra. A nem Lepton fir érzékelők (Grid-EYE, MLX, AMG8833) változatlanok.

Commitok: bacfb7aeb, 117710566, 592a22902, 1a614202e

A buzzer modul eltávolítva (minor)

A buzzer modul eltávolításra került az STM32 és az i.MX RT portokról. Helyette a machine.PWM osztállyal vezéreld a hangjelzőt; egy PWM-et használó Pure Thermal buzzer példa is bekerült.

Commitok: ccb947924, 444120f2d

Az omv.disable_fb() eltávolítva (minor)

Az omv.disable_fb() függvény eltávolításra került; a képkocka-puffer streamelése mostantól a kamera API-n keresztül vezérelhető. Az erre támaszkodó örökölt RPC asztali szkriptek szintén eltávolításra kerültek.

Commitok: 84c3db58a, 6fe99051c

A csi új — az API-ja még nincs befagyasztva (minor)

A csi modul a v4.8.0-ban lett bevezetve, és az API-ja a kiadás során fejlődött: a csi.fb() eltávolításra került, a csi.CSI.snapshot() (image=...) pedig mostantól egy módosítható képet igényel, és a rögzített képkockát abba rajzolja/skálázza, ahelyett, hogy nyers mélymásolatot készítene. Az új modul korai felhasználóinak újra kell tesztelniük; az örökölt sensor API-t ez nem érinti.

Commitok: 0bc0385eb, 8cd7a309f

Az image.ImageIO stream mód és a close() (minor)

image.ImageIO — a mode argumentum mostantól csak kisbetűs 'r' / 'w' értéket fogad el (a nagybetűs változat elutasításra kerül egy frissített hibaüzenettel), és a 'w' móddal való megnyitás mindig csonkolja/újra létrehozza a fájlt, ahelyett, hogy megőrizné a meglévő streamet. Az ImageIO.close() mostantól idempotens (egy már lezárt stream lezárása többé nem vált ki hibát), és None értéket ad vissza a stream objektum helyett.

Commitok: 715c4cbba, 21ceec422

A BlazeFace / BlazePalm visszatérési értéke (minor)

A BlazeFace és BlazePalm utófeldolgozók (ebben a kiadásban újak) mostantól egyetlen határoló doboz listát adnak vissza a teljes, osztályonkénti lista helyett — a hívók közvetlenül indexelik az eredményt a [0] helyett.

Commit: 75e16b573

Az ML utófeldolgozó visszahívása nyers tenzorokat kap (behavior)

Egy ml.Model predict() utófeldolgozó visszahívása mostantól a nyers (kvantált) kimeneti tenzorra mutató hivatkozásokat kapja meg az előre konvertált lebegőpontos ndarray-ok helyett — ez elkerüli a memória kimerülését nagy modelleknél. Ha nincs megadva visszahívás, a lebegőpontos ndarray továbbra is visszatér. Az egyéni visszahívásoknak maguknak kell dekvantálniuk a tenzorokat (a beépített utófeldolgozók ezt már megteszik).

Commit: 84e6ee650

A kamera órajele leválasztva a CSI állapotról (behavior)

Az érzékelő órajele mostantól független a CSI állapotától. A set_clock / set_frequency csak akkor konfigurálja újra az órajelet, ha a kért frekvencia egy toleranciánál nagyobb mértékben tér el, a get_clk_frequency pedig egy logikai értéket vesz át, hogy a pontos (a névleges helyett) frekvenciát adja vissza. Az alapértelmezett órajel 24 MHz az OpenMV N6-on és AE3-on, így indításkor nincs szükség explicit set_clock() hívásra. Azoknak a szkripteknek, amelyek az órajelet kapcsolgatták időzítés-érzékeny rögzítésekhez, érdemes újraellenőrizniük a feltételezéseiket.

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

USB hibakeresési protokoll és firmware célok (tooling)

Ez egyik sem érinti a MicroPython szkripteket. Az elavult USBDBG parancsok (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) eltávolításra kerültek, és a régebbi IDE-kből érkező nem támogatott parancsok mostantól kiürítésre kerülnek, ahelyett, hogy összeomlasztanák a TinyUSB paneleket csatlakozáskor; az örökölt STM32 UVC firmware cél eltávolításra került. A régi gazda eszközöket frissíteni kell; a részletekért lásd a firmware-tároló előzményeit.

Commitok: 90bd11e93, 657c9a632, 35182f035

Migrációs ellenőrzőlista

A v4.8.0-ra való tiszta átültetéshez a tipikus teendők:

  1. Ha a FLIR Leptont a fir modulon keresztül használtad, válts át a kameraérzékelőként való rögzítésére (a fir/Lepton változás).

  2. Cseréld le bármely buzzer használatát a machine.PWM osztályra (a buzzer eltávolítása).

  3. Távolítsd el az omv.disable_fb() hívásokat (az omv.disable_fb() eltávolítása).

  4. A image.ImageIO esetén: használj kisbetűs 'r'/'w' értéket, és számíts arra, hogy a 'w' csonkol (az ImageIO változás).

  5. Az egyéni ML utófeldolgozó visszahívásokhoz: magad dekvantáld a nyers tenzorhivatkozásokat, vagy hagyatkozz az alapértelmezett lebegőpontos útvonalra (a visszahívás változása).

  6. Ellenőrizz újra minden szkriptet, amely az érzékelő órajelét vezérelte időzítés-érzékeny rögzítésekhez (az órajel változása).