v5.0.0¶
A v5.0.0 egy jelentős kiadás. A fő újdonságok: az újraépített OpenMV Protocol V2 host-kapcsolat, egy osztályalapú csi kamera API, amely a több kamerás kártyákra is jól skálázódik, egy futtatható szimulátor célplatform, a MoveNet egyalakos póz-becslés, a MicroPython 1.28, valamint kamera-, ML- és ToF-javítások nagy adagja. Számos visszafelé nem kompatibilis API-változást is hoz — minden, a felhasználó számára látható változás a v4.8.1 óta alább szerepel, azzal együtt, hogy pontosan hogyan kell migrálni.
Kiemelt újdonságok¶
OpenMV Protocol V2. A host/IDE kapcsolat alapjaiból lett újraépítve: keretezett, sorszámozott, CRC-vel ellenőrzött, multiplexelt csatornákkal a stdio, a stream-előnézet és a felhasználói adatok számára. Egy új
protocolmodul lehetővé teszi, hogy a szkriptek saját transzportokat és adatcsatornákat hozzanak létre. Lásd a protocol modul változásait.Osztályalapú
csikamera API. Azimport sensorhelyébe azimport csi/csi.CSIlép, natív több kamerás támogatással. Lásd a csi migrációt.Szimulátor célplatform. A firmware mostantól lefordítható és futtatható az Arm FVP / QEMU szimulátor alatt (MPS2/MPS3), beleértve az NPU, ROMFS és PSRAM emulációt is — a gépi látás és ML szkriptek hardver csatlakoztatása nélkül is futtathatók.
MoveNet póz-becslés. Egy új
MoveNetutófeldolgozó, valamint egy mellékeltmovenet_singlepose_192.tflitemodell az OpenMV AE3 és N6 kártyákon.MicroPython 1.28 és ulab 6.12.0, ST Edge AI 4.0 eszközkészlet, valamint a külső csomaggá tett OpenMV SDK (lásd a build- / eszközkészlet-változásokat).
Új funkciók¶
A
protocolmodul — egyéni transzportok és adatcsatornák létrehozása Pythonból:protocol.init(),protocol.register(),protocol.is_active(), valamint egyprotocol.ProtocolChannelosztály asend_event()metódussal, továbbáCHANNEL_FLAG_*ésCHANNEL_ID_*konstansok. Aprotocol.init()végleges szignatúráját a protocol modul változásai dokumentálják.protocol.CBORChannel— egy befagyasztottprotocolbővítménycsomag, amely a megnevezett mezőket CBOR formátumba szerializálja megjelenítő widgetekkel (címke, mélység) és interaktív vezérlőkkel (kapcsoló, csúszka, választó).Host memória- és stream-vizsgálat — egy új
SYS_MEMORYprotokollparancs poolonkénti futásidejű memóriastatisztikákat tár fel az IDE számára, egy újSTREAM_SOURCEstream ioctl pedig lehetővé teszi, hogy a host kiválassza, melyik kamera táplálja az előnézetet a több kamerás kártyákon (protokollverzió 1.0.1).Több kamerás streamelés — a
csi.CSIegystream=argumentumot fogad, amely kiválasztja, melyik érzékelő táplálja az IDE előnézetét; a stream képkocka-fejléce mostantól egy EMA-val simított FPS-értéket is hordoz, így az IDE aclock.fps()sablonkód nélkül is megmutatja a képkockasebességet. Lásd a csi migrációt és a csi utólagos módosításait.GenX320 eseményérzékelő — egy új Spatio-Temporal Contrast szűrő (
csi.IOCTL_GENX320_SET_STCacsi.GENX320_STC_DISABLE,csi.GENX320_STC_ONLY,csi.GENX320_STC_TRAIL_ONLYéscsi.GENX320_STC_TRAILmódokkal) és nyers eseményolvasás (csi.IOCTL_GENX320_READ_EVENTS_RAW), új példaszkriptekkel.MoveNet— egy új MediaPipe egyalakos póz-utófeldolgozó (threshold,nms_threshold,nms_sigmakulcsszavas argumentumokkal), amely((x, y, w, h), score, keypoints)értéket ad vissza egy 17 ízületes COCO kulcspont-tömbbel; egymovenet_singlepose_192.tflitemodell és példa van mellékelve az AE3 és N6 kártyákon.ml.utils.draw_predictions()— egy új, opcionálisscores=argumentum címkénkénti megbízhatóságot fűz hozzá, a betűtípus és a doboz vonalvastagsága mostantól automatikusan a kép szélességéhez igazodik, egy újformat="point"mód pedig középponti jelölőt rajzol a középpont/csúcs detektorokhoz.Az új
display.TVDisplayosztály (egy általánosioctl()metódussal) felváltja a különállótvmodult. Lásd a display modul változásait.Egy új
find_line_segments()detektor (ED-Lines) — mostantól minden buildben elérhető, egy újthreshold=argumentummal. Lásd az image modul változásait.
Egyéb változások és fejlesztések¶
A MicroPython 1.28.0-ra frissült a v4.8.1 alaphoz képest. Hozzáadja a nagy sebességű SD-kártya módot a H5/H7/N6 kártyákon, az AHB5 órajelet kis fogyasztású módban, valamint a vezérelhető JTAG lábakat GPIO-ként az OPENMV_AE3-on.
Az ulab 6.12.0-ra frissült — natív
%operátor ndarray-eken (aml.utils.mod()segédfüggvény eltávolításra került; lásd az ML könyvtár változásait).Az ST Edge AI eszközkészlet 4.0-ra frissült — érinti az eszközön történő ST modell-fordítást és -telepítést.
ml.Model— aload_to_fbkulcsszavas argumentum eltávolításra került; a modell memóriáját automatikusan az egységes allokátor kezeli.image.Image.scale()helyben — egy kép helyben történő felnagyítása (példáulimg.scale(x_scale=2.0, y_scale=2.0)) mostantól a képkocka-puffert is megnöveli, hogy elférjen, hibázás helyett.Nagyobb stdio puffer — az IDE-hez irányuló alapértelmezett szöveges puffer 512-ről 1024 bájtra nőtt az OpenMV 2/3/4, Nicla Vision, AE3 és N6 kártyákon, így a nagyobb
print()kitörések nem csonkolódnak.Simább host-eseményfolyam — a host felé irányuló stdout NOTIFY események hostonkénti olvasásonként legfeljebb egyre vannak fojtva, ahelyett, hogy minden
print()hívásnál egy keletkezne, amely átlépi a gyűrűpuffer vízszintjelzőjét.Megszakítható hosszú műveletek — a hosszú képrajzolási, GPU- (Nema/Dave2D) és NPU-várakozási ciklusok mostantól determinisztikus időközönként kiszolgálják az eseményeket, így a szkriptek nehéz munka közben is reagálnak az IDE Stop gombjára.
Hibajavítások¶
Kamera és érzékelők:
find_apriltags()többé nem rontja el az eredményeket a D-cache/GPU kártyákon (N6, AE3), és mostantól működik az AE3-on is.Javítva a Bayer képkimenet a STM32 N6 ISP-ből a képpontformátumok váltása után.
Javítva a zöld automatikus fehéregyensúly-kifehéredés a fényes jeleneteknél és egy inicializálatlan első képkocka AWB-statisztika eset; megemelve a STM32 ISP gamma-korlát (32-ről 63-ra) a szélesebb gamma/kontraszt/fényerő tartományért.
A PS5520 automatikus expozíciója többé nem oszcillál erős fényben; a PAG7936 AEC/AGC viselkedése át lett dolgozva (kombinált vezérlés, javított erősítési felső határ).
Az OV5640 autofókusz firmware-feltöltése helyreállítva a Portenta/Nicla kártyákon (MIMXRT I2C SUSPEND javítás).
Javítva egy kamera-felvételi holtpont, amikor a képkockasebesség-korlát JPEG felvétellel kombinálódik (STM32).
A GenX320
csi.IOCTL_GENX320_READ_EVENTS_RAWolvasásai többé nem zavarják össze az IDE előnézetet.A FLIR Lepton
csi.IOCTL_LEPTON_SET_MODEacsi.CSI.ioctl()metóduson keresztül mostantól működik, amikor egyetlen argumentummal hívják meg.
Képfeldolgozás:
Javítva a
draw_image()/blend()alfa-keverés, amikor maszk van megadva.Javítva az 1 bites (BINARY) PNG kódolás/dekódolás bitsorrendje és a szürkeárnyalatos-1-bitből történő dekódolás.
Javítva a
mjpeg.Mjpegfelvétel időtartam-/FPS-metaadata.Javítva egy szoftveres JPEG-dekódolási veremtúlcsordulás a kis veremű kártyákon (OpenMV M7).
Javítva a JPEG/PNG fájlformátum automatikus felismerése a nem-ARM hosztokon (szimulátor).
Time-of-Flight:
A
tof.read_depth()többé nem dob kivételt átmeneti távolságmérési hibáknál, és automatikusan helyreáll a buszhibákból; az alapértelmezetttof.read_depth()/tof.snapshot()időtúllépés mostantól 100 ms (lásd a tof változásait).Javítva a VL53L5CX / VL53L8CX több zónás mélységi adatok sérülése.
ML és rendszer:
Az NPU helyesen kerül tisztításra, amikor a következtetés megszakad az N6-on.
A mélyalvásból / készenlétből való ébredés helyreállítva az N6-on; az AE3 rendszerbetöltőre ugrási lefagyása javítva.
Javítva a memóriaszivárgások szoftveres újraindításkor (STM32 Nema GPU) és egy idő előtt begyűjtött kiegészítő képkocka-puffer.
Az egyéni Python protokollcsatornák mostantól túlélik a szoftveres újraindítást, az USB transzport helyreáll a buszreset / elakadt végpontok után, és az USB SOF megszakítás-elárasztás javítva van.
Hardver- és kártyatámogatás¶
OpenMV N6 — Ethernet engedélyezve (vezetékes hálózat); az NPU AXI SRAM (1,75 MB) egy megosztott átmeneti poolba lett összevonva, hogy több RAM legyen a következtetések között; mélyalvásból/készenlétből való ébredés; mellékelt TFLite modellek és Haar kaszkádok a ROMFS-ben.
OpenMV AE3 — mellékelt modellek és kaszkádok a ROMFS-ben; a
cbor2befagyasztva a firmware-be.Alif (AE3, N6) — kis fogyasztású
machine.RTCébresztés.Nagy felbontású AprilTag-ek — teljes érzékelő-felbontású
find_apriltags()az AE3, az Arduino Giga és az Arduino Portenta H7 kártyákon.Szimulátor célplatformok — MPS2_AN500 / MPS3_AN547 (Arm FVP / QEMU), NPU, ROMFS és PSRAM emulációval.
Visszafelé nem kompatibilis API-változások¶
A felhasználó számára látható API-törések a v4.8.1 és a v5.0.0 között. Hatókör: Python C-modulok a modules/ mappában és Python könyvtárak a scripts/libraries/ mappában.
Minden változás meg van jelölve a hatásával:
major — a legtöbb szkript szerkesztést igényel.
minor — szűk API; csak az azt használó szkripteket érinti.
behavior — ugyanaz az API, eltérő eredmények; ellenőrizd újra a finomhangolt szkripteket.
tooling — csak a forrásból történő fordítást / downstream forkokat érinti.
A változások hatás szerint vannak csoportosítva ebben a sorrendben — előbb a major, majd a minor, behavior és tooling. Ha csak portolni szeretnéd a kódodat, ugorj a migrációs ellenőrzőlistához a végén egy tömör teendőlistáért. Minden commit-hash a GitHubon lévő diffjére hivatkozik.
A sensor helyét a csi veszi át (major)¶
Minden hivatalos példa át lett írva, hogy az import sensor helyett az import csi szerepeljen. A régi, modulszintű funkcionális API-t (sensor.reset(), sensor.set_pixformat(), …) az osztályalapú csi.CSI API váltja fel, amely természetesen skálázódik a több kamerás kártyákra (csi0, csi1, …), és minden új funkcióhoz szükséges (a stream= kulcsszavas argumentum, a több érzékelős streamelés, …).
A sensor qstr még mindig be van kötve a modules/py_csi.c fájlban a visszafelé kompatibilis firmware-buildek érdekében, de nem fog új funkciókat kapni, és minden példa, dokumentáció és könyvtári kód mostantól a csi modult feltételezi.
Commitok: 945c5853c, 61f835b7e
Modulból osztály
Korábban (sensor):
import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
img = sensor.snapshot()
Mostantól (csi):
import csi
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
img = csi0.snapshot()
A setter/getter párok kombinált hozzáférőkbe összevonva
Az új API-ban egy argumentumok nélkül hívott metódus visszaadja az aktuális értéket; egy értékkel meghívva beállítja azt. A set_*/get_* előtagok megszűntek. A metódusnevek az ing utótagot is elvesztették ott, ahol az felesleges volt (windowing → window). Az új API oszlop a referencia-dokumentációra hivatkozik.
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Közvetlen megfelelő nélküli függvények
|
Mit használj helyette |
|---|---|
|
|
|
|
|
Átkerült a |
|
|
|
Eltávolítva. A |
|
|
Új a csi.CSI osztályon
csi.CSI(stream=True|False)— egy létrehozáskori választó, amely kiválasztja, melyik CSI táplálja az előnézeti képkocka-puffert (felváltja a pillanatképenkéntiupdate=kulcsszavas argumentumot, lásd a csi utólagos módosításait).csi.CSI(cid=N)/csi.devices()— több-CSI támogatás az egynél több képérzékelővel rendelkező kártyák számára.
Az image modul — szignatúra-átdolgozás (major)¶
Az image modult érintette a legszélesebb körű API-változás a csi után — a rajzolási szignatúrák, az eredményobjektumok és több detektor is megváltozott.
A koordináta-argumentumoknak tuple-nak kell lenniük
A modules/py_image.c az mp_arg_parse_all tetejére lett újraírva. Minden rajzolási / képpont-metódus, amely korábban külön x, y, ... pozicionális argumentumokat fogadott, mostantól megköveteli, hogy ezek a koordináták egyetlen tuple-ba legyenek csomagolva.
Commitok: d18bbc472, 0c60c94b9 (PR #3061)
Korábban |
Mostantól |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Mind az image.Image metódusai.
Az eredményobjektumok attrtuple-lé alakítva
Ezek a típusok mostantól MicroPython attrtuple objektumok: similarity, statistics, percentile, threshold, line, circle, rect, qrcode, apriltag, datamatrix, barcode, displacement, kptmatch. A zárójelek nélküli attribútum-hozzáférés most már a kanonikus forma.
Commit: 3399d302e
Korábban (metódus-stílus):
img.draw_cross(match.cx(), match.cy())
img.draw_rectangle(blob.rect())
Mostantól (attribútum-stílus):
img.draw_cross((match.cx, match.cy))
img.draw_rectangle(blob.rect)
A blob és a histogram változatlan — megtartják a meglévő típusukat és a () hozzáférőiket (egy attrtuple nem tudja kifejezni egy folt lustán kiszámított értékeit vagy egy hisztogram argumentumot fogadó hozzáférőit).
A find_features haar paraméterének átnevezése
image.Image.find_features() — a scale_factor= átnevezve scale=-re.
Commit: be4c5cd73
get_regression — mostantól mindig robusztus, target_size hozzáadva
image.Image.get_regression() mostantól mindig a robusztus (Theil-Sen) regressziót használja. A régi, gyors legkisebb négyzetek útvonal eltávolításra került, így a robust= kulcsszó megszűnt — ami korábban robust=True-t igényelt, most az egyetlen viselkedés. Egy új target_size=(w, h) kulcsszavas argumentum (alapértelmezett (80, 60)) területileg lekicsinyíti a ROI-t az O(N^2) Theil-Sen illesztés előtt, hogy az mindig értelmes képméreten fusson; az illesztett vonal végpontjai visszavetülnek a forráskoordinátákra. A linear_regression_robust.py példa törölve, a linear_regression_fast.py pedig átnevezve linear_regression.py-ra.
Commitok: c7c2e69a0, 0ff2afa72
find_line_segments — új algoritmus
image.Image.find_line_segments() — a régi LSD detektort az ED-Lines váltotta fel, és egy új threshold=50 kulcsszavas argumentumot kapott. A korábban finomhangolt szkriptek kimenete eltérő lesz.
Commitok: 87da2a7b7, 2c47b5735
Az AprilTag könyvtár cseréje
image.Image.find_apriltags() — az AprilTag detektort egy új implementáció váltotta fel. A családkészlet megváltozott:
Eltávolítva |
Hozzáadva |
|---|---|
|
|
Commit: e813bada7
A csi modul utólagos módosításai (minor)¶
Kisebb csi utólagos módosítások a csi migráció tetejére építve.
A snapshot(update=…) eltávolítva
Az update kulcsszavas argumentum a csi.CSI.snapshot() metóduson megszűnt. Ahhoz, hogy egy CSI eszköz ne táplálja az előnézeti képkocka-puffert, létrehozáskor mondj le róla:
csi0 = csi.CSI(stream=False) # was: csi0.snapshot(update=False)
csi1.snapshot(blocking=False, image=fir_img) # was: ...(update=False, ...)
Commitok: 9a8077827, 26b79a2c5
A framebuffers() expand argumentuma eltávolítva
csi.CSI.framebuffers() — a harmadik pozicionális argumentum (expand) megszűnt; a szignatúra mostantól framebuffers([count]).
Commit: 86cb3a5de
A protocol modul (minor)¶
Csak azokat a szkripteket érinti, amelyek közvetlenül vezérelték a host-kapcsolatot. Lásd protocol.
A timer_ms átnevezve poll_ms-re
protocol.init() — a timer_ms argumentum átnevezve poll_ms-re.
protocol.init(..., poll_ms=10) # was: timer_ms=10
Commitok: 8a0635e8c, 95a290607
A protocol.poll() eltávolítva
A protokollfeladat mostantól belsőleg van ütemezve. A protocol.poll() hívásai AttributeError hibát fognak dobni.
Commit: 8a0635e8c
A soft_reboot konfigurációs argumentum eltávolítva
protocol.init() — a soft_reboot argumentum megszűnt. Minden jelenlegi transzport tolerálja a szoftveres újraindítást, így a viselkedés mostantól feltétel nélküli.
Commit: 0bf766aa2
display modulok (minor)¶
A TV-kimenet mostantól egy display.TVDisplay objektumon keresztül megy, a különálló tv modul helyett. A display egy általános ioctl() metódust is kapott.
A tof modul (behavior)¶
Ugyanaz az API, mint korábban; az alapértelmezések és a hibakezelés megváltozott. Lásd tof.
Az alapértelmezett időtúllépés megváltozott
A tof.read_depth() és a tof.snapshot() (timeout=-1 értékkel hívva) mostantól 100 ms-ot használ alapértelmezettként a végtelen várakozás helyett. Adj át egy explicit nagyobb értéket, ha a régi viselkedésre van szükséged.
Commit: b6772b80d
Automatikus helyreállítás
A driver mostantól keményen resetelni az I2C buszt és az érzékelőt a távolságmérési/időtúllépési hibáknál. A példák már nem hívják meg a tof.reset() függvényt a kivételkezelőikben — a kézi helyreállítást végző felhasználói kódból ezt el kell távolítani (mert harcolni fog az új automatikus helyreállítással).
ML könyvtár (behavior)¶
Ugyanaz az API, eltérő számok — ellenőrizz újra minden finomhangolt ML pipeline-t.
Az előfeldolgozás mostantól nyújt a letterbox helyett
A Normalization mostantól a image.SCALE_ASPECT_IGNORE (nyújtás) értéket használja a image.SCALE_ASPECT_EXPAND (letterbox) helyett. A NMS utófeldolgozás szintén független x/y skálázásra váltott.
Megjegyzés
Hatás. A YOLO-stílusú detektorok és kulcspont-regresszorok általában javulnak. A BlazeFace, BlazePalm, FaceLandmarks és HandLandmarks példák mostantól kézi négyzetes kivágást igényelnek a bemeneti ROI-n — a példaszkriptek frissítve lettek; az egyéni felhasználói kódnak ugyanezt kell tennie.
Commit: 68dc29a33
Az ml.utils.mod() segédfüggvény eltávolítva
Az ulab 6.12.0 natívan támogatja a % operátort ndarray-eken. A kódnak, amely a mod függvényt importálta az ml.utils modulból, az a % b formát kell használnia.
Build / eszközkészlet (tooling)¶
Ezek egyike sem érinti a MicroPython szkripteket. A firmware forrásból történő fordítása mostantól a külső OpenMV SDK-t igényli (1.6.0, korábban a forrásfában volt). Több forrásfán belüli build-eszköz eltávolításra került, és az N6 átállt a TinyUSB stackre; a downstream forkoknak át kell tekinteniük a firmware repository előzményeit — nevezetesen a file_open() szignatúráját, amely elhagyta a buffered argumentumát.
Migrációs ellenőrzőlista¶
Egy tiszta v5.0.0-ra portoláshoz a tipikus munka a következő:
Cseréld le az
import sensor-timport csi; csi0 = csi.CSI()-re, és fordíts le mindenset_*/get_*hívást a megfelelőcsi.CSIhozzáférőjére (a csi migráció).Csomagold tuple-ba az
img.draw_*, aget_pixel()és aset_pixel()koordináta-argumentumait (az image modul változásai).Hagyd el a
()-t az attrtuple eredmény-hozzáférőkről, ha az új idiomatikus formát szeretnéd, vagy hagyd a régi stílust változatlanul, mivel az attrtuple-ök továbbra is támogatják a hívható hozzáférőket (az image modul változásai).Auditáld a
find_line_segments(), aget_regression()és bármelyfind_apriltags()család-választást (az image modul változásai).Nevezd át a
timer_ms-t →poll_ms-re aprotocol.init()hívásokban; távolítsd el aprotocol.poll()-t és asoft_reboot=-ot (a protocol modul változásai).ML munkafolyamatokhoz: tekintsd át újra minden olyan modellt, amely letterboxolt bemenetet igényelt (az ML könyvtár változásai).