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
csikameramodul. Egy osztályalapúcsi.CSIAPI több egyidejű kamera támogatásával, amelyet az örököltsensormodul 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
crcmodul — hardveresen gyorsított CRC-16 / CRC-32.A MicroPython 1.26.0-ra frissült.
Töréses: a
buzzermodult és afirmodul 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
csikameramodul — egy osztályalapúcsi.CSIobjektum 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ívprint()/ repr kimenettel. Az örököltsensormodul mellett vezettük be (nem közvetlen helyettesítő).crc—crc.crc16()éscrc.crc32(), hardveresen gyorsítva szoftveres tartalékkal, az OpenMV N6-on és AE3-on.A
image.Image.draw_image()kapott egytransform=kulcsszót (egy 2D-s lebegőpontosndarraymá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ód —
csi.IOCTL_GENX320_SET_MODEacsi.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.Modelkapott egypostprocess=kulcsszót (az utófeldolgozó mostantól automatikusan lefut apredict()belsejében, akár visszahívás nélkül is); aml.postprocessinggyártói alcsomagokba lett átszervezve —ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo) ésml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — a régi snake_case nevek aliasként megmaradnak; bekerült aml.utils.draw_keypoints()és aml.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
SPIDisplayvezérlők felülbírálhatják az init parancsaikat; az SPI kijelző konstruktora kapotthmirror/vflipkulcsszavakat.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
pyopenmvprofilozá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/
transposemostantó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; aNormalizationmostantó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; aYoloV2tö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
tofmodullal é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
crcmodul é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.
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.
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.
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.
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.
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.
Migrációs ellenőrzőlista#
A v4.8.0-ra való tiszta átültetéshez a tipikus teendők:
Ha a FLIR Leptont a
firmodulon 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).Cseréld le bármely
buzzerhasználatát amachine.PWMosztályra (a buzzer eltávolítása).Távolítsd el az
omv.disable_fb()hívásokat (az omv.disable_fb() eltávolítása).A
image.ImageIOesetén: használj kisbetűs'r'/'w'értéket, és számíts arra, hogy a'w'csonkol (az ImageIO változás).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).
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).