v5.0.0¶
v5.0.0 je glavno izdanje. Na čelu su: iznova izgrađena OpenMV Protocol V2 veza prema računalu, klasni csi API kamere koji se prilagođava pločama s više kamera, izvršni cilj simulatora, MoveNet procjena položaja jedne osobe, MicroPython 1.28 i velika serija ispravaka za kamere, ML i ToF. Uvodi i niz promjena API-ja koje narušavaju kompatibilnost — svaka korisniku vidljiva promjena od v4.8.1 navedena je u nastavku, zajedno s točnim uputama za migraciju.
Istaknuto¶
OpenMV Protocol V2. Veza prema računalu/IDE-u izgrađena je iz temelja: uokvirena, sekvencirana, provjeravana CRC-om, s multipleksiranim kanalima za stdio, pregled toka i korisničke podatke. Novi modul
protocolomogućuje skriptama da stvaraju vlastite prijenose i podatkovne kanale. Pogledajte promjene modula protocol.Klasni
csiAPI kamere.import sensorpostajeimport csi/csi.CSI, s nativnom podrškom za više kamera. Pogledajte migraciju na csi.Cilj simulatora. Ugrađeni program (firmware) sada se gradi i izvodi pod Arm FVP / QEMU simulatorom (MPS2/MPS3), uključujući emulaciju NPU-a, ROMFS-a i PSRAM-a — skripte za vid i ML mogu se izvoditi bez priključenog sklopovlja.
MoveNet procjena položaja. Novi
MoveNetnaknadni obrađivač uz priloženi modelmovenet_singlepose_192.tflitena OpenMV AE3 i N6.MicroPython 1.28 i ulab 6.12.0, alati ST Edge AI 4.0 te eksternalizirani OpenMV SDK (pogledajte promjene gradnje / alata).
Nove značajke¶
Modul
protocol— stvarajte prilagođene prijenose i podatkovne kanale iz Pythona:protocol.init(),protocol.register(),protocol.is_active()i klasaprotocol.ProtocolChannelssend_event(), uz konstanteCHANNEL_FLAG_*iCHANNEL_ID_*. Konačni potpisprotocol.init()dokumentiran je u promjenama modula protocol.protocol.CBORChannel— zamrznuti dodatni paket modulaprotocolkoji serijalizira imenovana polja u CBOR s prikaznim widgetima (oznaka, dubina) i interaktivnim kontrolama (preklopnik, klizač, odabir).Introspekcija memorije i toka na računalu — nova protokolna naredba
SYS_MEMORYizlaže IDE-u statistiku radne memorije po skupu (pool), a novi stream ioctlSTREAM_SOURCEomogućuje računalu da odabere koja kamera napaja pregled na pločama s više kamera (protokol verzije 1.0.1).Streaming s više kamera —
csi.CSIprima argumentstream=koji bira koji senzor napaja pregled u IDE-u; zaglavlje sličice toka sada nosi EMA-izglađen FPS pa IDE prikazuje brzinu sličica bez šablonskog kodaclock.fps(). Pogledajte migraciju na csi i nastavke za csi.GenX320 senzor događaja — novi prostorno-vremenski kontrastni filtar (
csi.IOCTL_GENX320_SET_STCs načinimacsi.GENX320_STC_DISABLE,csi.GENX320_STC_ONLY,csi.GENX320_STC_TRAIL_ONLYicsi.GENX320_STC_TRAIL) te čitanje sirovih događaja (csi.IOCTL_GENX320_READ_EVENTS_RAW), s novim primjerima skripti.MoveNet— novi MediaPipe naknadni obrađivač za jedan položaj (kwargovithreshold,nms_threshold,nms_sigma) koji vraća((x, y, w, h), score, keypoints)s nizom od 17 zglobnih COCO ključnih točaka; modelmovenet_singlepose_192.tflitei primjer priloženi su na AE3 i N6.ml.utils.draw_predictions()— novi neobavezni argumentscores=dodaje pouzdanost po oznaci, font i debljina okvira sada se automatski skaliraju prema širini slike, a novi načinformat="point"crta središnji marker za detektore središnje točke/vrha.Nova klasa
display.TVDisplay(s generičkimioctl()) zamjenjuje samostalni modultv. Pogledajte promjene modula display.Novi detektor
find_line_segments()(ED-Lines) — sada dostupan u svim gradnjama, s novim argumentomthreshold=. Pogledajte promjene modula image.
Ostale promjene i poboljšanja¶
MicroPython ažuriran na 1.28.0 s baze v4.8.1. Dodaje brzi način SD kartice na H5/H7/N6, AHB5 takt u načinu niske potrošnje i upravljive JTAG pinove kao GPIO-e na OPENMV_AE3.
ulab ažuriran na 6.12.0 — nativni operator
%na ndarrayima (pomoćnikml.utils.mod()je uklonjen; pogledajte promjene ML biblioteke).ST Edge AI alati ažurirani na 4.0 — utječe na ST kompilaciju i implementaciju modela na uređaju.
ml.Model— uklonjen je ključni argumentload_to_fb; memorijom modela sada automatski upravlja objedinjeni alokator.image.Image.scale()na mjestu — povećavanje slike na mjestu (na primjerimg.scale(x_scale=2.0, y_scale=2.0)) sada proširuje međuspremnik slike kako bi stalo umjesto da ne uspije.Veći stdio međuspremnik — zadani tekstualni međuspremnik prema IDE-u narastao je s 512 na 1024 bajta na OpenMV 2/3/4, Nicla Vision, AE3 i N6, pa se veće serije
print()ne odsijecaju.Glađi tok događaja prema računalu — stdout NOTIFY događaji prema računalu ograničeni su na najviše jedan po čitanju računala umjesto jedan po svakom
print()koji prijeđe vodenu oznaku kružnog međuspremnika.Prekidive duge operacije — duge petlje crtanja slike, GPU (Nema/Dave2D) i NPU čekanja sada poslužuju događaje u determinističkom intervalu, pa skripte ostaju odazivne na IDE Stop gumb tijekom teškog rada.
Ispravci grešaka¶
Kamera i senzori:
find_apriltags()više ne kvari rezultate na pločama s D-cacheom/GPU-om (N6, AE3) i sada radi na AE3.Ispravljen Bayer izlaz slike iz STM32 N6 ISP-a nakon promjene formata piksela.
Ispravljeno zeleno preeksponiranje automatske ravnoteže bijele na svijetlim scenama te slučaj neinicijaliziranih AWB statistika prve sličice; podignut STM32 ISP gama clamp (32 na 63) za širi raspon game/kontrasta/svjetline.
PS5520 automatska ekspozicija više ne oscilira na jakom svjetlu; ponašanje PAG7936 AEC/AGC preuređeno je (objedinjena kontrola, ispravljen gornji prag pojačanja).
Obnovljeno učitavanje firmvera za OV5640 autofokus na Portenta/Nicla (ispravak MIMXRT I2C SUSPEND).
Ispravljen zastoj pri snimanju kamere kada se ograničenje brzine sličica kombinira sa JPEG snimanjem (STM32).
GenX320
csi.IOCTL_GENX320_READ_EVENTS_RAWčitanja više ne izobličuju IDE pregled.FLIR Lepton
csi.IOCTL_LEPTON_SET_MODEputemcsi.CSI.ioctl()sada radi kada se pozove s jednim argumentom.
Obrada slike:
Ispravljeno alfa miješanje
draw_image()/blend()kada je zadana maska.Ispravljen redoslijed bitova 1-bitnog (BINARY) PNG kodiranja/dekodiranja i dekodiranje sivih tonova iz 1-bitnog.
Ispravljeni metapodaci o trajanju/FPS-u snimanja
mjpeg.Mjpeg.Ispravljeno prekoračenje stoga pri softverskom JPEG dekodiranju na pločama s malim stogom (OpenMV M7).
Ispravljeno automatsko prepoznavanje JPEG/PNG formata datoteke na ne-ARM računalima (simulator).
Time-of-Flight:
tof.read_depth()više ne izaziva iznimku pri prolaznim greškama mjerenja udaljenosti i automatski se oporavlja od kvarova sabirnice; zadana vremenska granica zatof.read_depth()/tof.snapshot()sada je 100 ms (pogledajte promjene za tof).Ispravljeno kvarenje podataka o dubini iz više zona za VL53L5CX / VL53L8CX.
ML i sustav:
NPU se ispravno čisti kada se zaključivanje prekine na N6.
Obnovljeno buđenje iz dubokog sna / pripravnosti na N6; ispravljen zastoj skoka u pokretač (bootloader) na AE3.
Ispravljena curenja memorije pri mekom resetu (STM32 Nema GPU) i prerano sakupljeni pomoćni međuspremnik slike.
Prilagođeni Python protokolni kanali sada preživljavaju mekano ponovno pokretanje, USB prijenos se oporavlja od resetiranja sabirnice / zastalih krajnjih točaka, a ispravljeno je preplavljivanje USB SOF prekidima.
Sklopovlje i podrška za ploče¶
OpenMV N6 — omogućen Ethernet (žično umrežavanje); NPU AXI SRAM (1,75 MB) spojen u zajednički prolazni skup za više RAM-a između zaključivanja; buđenje iz dubokog sna/pripravnosti; priloženi TFLite modeli i Haar kaskade u ROMFS-u.
OpenMV AE3 — priloženi modeli i kaskade u ROMFS-u;
cbor2zamrznut u firmver.Alif (AE3, N6) — buđenje
machine.RTCu niskoj potrošnji.AprilTags visoke razlučivosti —
find_apriltags()u punoj razlučivosti senzora na AE3, Arduino Giga i Arduino Portenta H7.Ciljevi simulatora — MPS2_AN500 / MPS3_AN547 (Arm FVP / QEMU), s emulacijom NPU-a, ROMFS-a i PSRAM-a.
Promjene API-ja koje narušavaju kompatibilnost¶
Korisniku vidljivi prekidi API-ja između v4.8.1 i v5.0.0. Opseg: Python C-moduli u modules/ i Python biblioteke u scripts/libraries/.
Svaka promjena označena je svojim utjecajem:
major — većina skripti treba izmjene.
minor — uski API; utječe samo na skripte koje su ga koristile.
behavior — isti API, drugačiji rezultati; ponovno provjerite ugođene skripte.
tooling — utječe samo na gradnju iz izvora / nizvodne forkove.
Promjene su grupirane po utjecaju tim redoslijedom — prvo major, zatim minor, behavior i tooling. Ako samo želite prenijeti svoj kod, skočite na kontrolni popis za migraciju na kraju za sažeti popis zadataka. Svaki hash commita vodi na svoj diff na GitHubu.
sensor zamijenjen s csi (major)¶
Svaki službeni primjer prepisan je tako da ispusti import sensor u korist import csi. Stari funkcionalni API na razini modula (sensor.reset(), sensor.set_pixformat(), …) zamijenjen je klasnim csi.CSI API-jem, koji se prirodno prilagođava pločama s više kamera (csi0, csi1, …) i nužan je za sve nove značajke (kwarg stream=, streaming s više senzora, …).
Qstr sensor i dalje je povezan u modules/py_csi.c radi unatrag kompatibilnih gradnji firmvera, ali neće dobivati nove značajke, a svi primjeri, dokumentacija i kod biblioteka sada pretpostavljaju csi.
Commitovi: 945c5853c, 61f835b7e
Iz modula u klasu
Prije (sensor):
import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
img = sensor.snapshot()
Nakon (csi):
import csi
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
img = csi0.snapshot()
Parovi setter/getter sažeti u objedinjene pristupnike
U novom API-ju metoda pozvana bez argumenata vraća trenutnu vrijednost; pozvana s vrijednošću postavlja je. Prefiksi set_*/get_* nestali su. Imena metoda također su izgubila sufiks ing gdje je bio suvišan (windowing → window). Stupac novog API-ja vodi na referentnu dokumentaciju.
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Funkcije bez izravnog ekvivalenta
|
Što koristiti umjesto toga |
|---|---|
|
|
|
|
|
Premješteno u konstruktor |
|
|
|
Uklonjeno. Slika koju vraća |
|
|
Novo na csi.CSI
csi.CSI(stream=True|False)— birač u trenutku gradnje koji odabire koji CSI napaja međuspremnik slike za pregled (zamjenjuje kwargupdate=po snimci, pogledajte nastavke za csi).csi.CSI(cid=N)/csi.devices()— podrška za više CSI-jeva na pločama s više od jednog senzora slike.
modul image — preustroj potpisa (major)¶
Modul image doživio je najširu promjenu API-ja nakon csi — promijenili su se potpisi crtanja, objekti rezultata i nekoliko detektora.
Argumenti koordinata moraju biti tuple-ovi
modules/py_image.c prepisan je na temelju mp_arg_parse_all. Sve metode crtanja / piksela koje su prije primale zasebne pozicijske argumente x, y, ... sada zahtijevaju te koordinate spakirane u jedan tuple.
Commitovi: d18bbc472, 0c60c94b9 (PR #3061)
Prije |
Nakon |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sve su metode klase image.Image.
Objekti rezultata pretvoreni u attrtuple
Ovi su tipovi sada MicroPython attrtuple objekti: similarity, statistics, percentile, threshold, line, circle, rect, qrcode, apriltag, datamatrix, barcode, displacement, kptmatch. Pristup atributima bez zagrada sada je kanonski.
Commit: 3399d302e
Prije (stil metode):
img.draw_cross(match.cx(), match.cy())
img.draw_rectangle(blob.rect())
Nakon (stil atributa):
img.draw_cross((match.cx, match.cy))
img.draw_rectangle(blob.rect)
blob i histogram nepromijenjeni su — zadržavaju svoje postojeće tipove i () pristupnike (attrtuple ne može izraziti lijeno izračunate vrijednosti mrlje niti histogramske pristupnike koji primaju argumente).
Preimenovanje haar parametra find_features
image.Image.find_features() — scale_factor= preimenovan je u scale=.
Commit: be4c5cd73
get_regression — sada uvijek robustan, dodan target_size
image.Image.get_regression() sada uvijek koristi robusnu (Theil-Sen) regresiju. Stara brza staza najmanjih kvadrata je uklonjena, pa je ključna riječ robust= nestala — ono što je nekad zahtijevalo robust=True sada je jedino ponašanje. Novi kwarg target_size=(w, h) (zadano (80, 60)) skalira ROI po površini prije O(N^2) Theil-Sen prilagodbe kako bi se uvijek izvodila na razumnoj veličini slike; krajnje točke prilagođene linije preslikavaju se natrag u izvorne koordinate. Primjer linear_regression_robust.py je obrisan, a linear_regression_fast.py preimenovan u linear_regression.py.
Commitovi: c7c2e69a0, 0ff2afa72
find_line_segments — novi algoritam
image.Image.find_line_segments() — stari LSD detektor zamijenjen je ED-Linesom i dobio je novi kwarg threshold=50. Izlaz prethodno ugođenih skripti razlikovat će se.
Commitovi: 87da2a7b7, 2c47b5735
Zamijenjena AprilTag biblioteka
image.Image.find_apriltags() — AprilTag detektor zamijenjen je novom implementacijom. Skup obitelji se promijenio:
Uklonjeno |
Dodano |
|---|---|
|
|
Commit: e813bada7
nastavak modula csi (minor)¶
Manji nastavci za csi povrh migracije na csi.
snapshot(update=…) uklonjen
Kwarg update na csi.CSI.snapshot() je nestao. Da spriječite CSI uređaj da napaja međuspremnik slike za pregled, isključite ga u trenutku gradnje:
csi0 = csi.CSI(stream=False) # was: csi0.snapshot(update=False)
csi1.snapshot(blocking=False, image=fir_img) # was: ...(update=False, ...)
Commitovi: 9a8077827, 26b79a2c5
uklonjen argument expand u framebuffers()
csi.CSI.framebuffers() — treći pozicijski argument (expand) je nestao; potpis je sada framebuffers([count]).
Commit: 86cb3a5de
modul protocol (minor)¶
Utječe samo na skripte koje su izravno upravljale vezom prema računalu. Pogledajte protocol.
timer_ms preimenovan u poll_ms
protocol.init() — argument timer_ms preimenovan je u poll_ms.
protocol.init(..., poll_ms=10) # was: timer_ms=10
Commitovi: 8a0635e8c, 95a290607
protocol.poll() uklonjen
Protokolni zadatak sada se raspoređuje interno. Pozivi protocol.poll() izazvat će AttributeError.
Commit: 8a0635e8c
uklonjen konfiguracijski argument soft_reboot
protocol.init() — argument soft_reboot je nestao. Svi trenutni prijenosi podnose mekana ponovna pokretanja, pa je ponašanje sada bezuvjetno.
Commit: 0bf766aa2
moduli display (minor)¶
TV izlaz sada ide kroz objekt display.TVDisplay umjesto kroz samostalni modul tv. display također je dobio generički ioctl().
modul tof (behavior)¶
Isti API kao prije; promijenile su se zadane vrijednosti i obrada grešaka. Pogledajte tof.
Promijenjena zadana vremenska granica
tof.read_depth() i tof.snapshot() (pozvani s timeout=-1) sada se kao zadano postavljaju na 100 ms umjesto neograničenog čekanja. Proslijedite eksplicitnu veću vrijednost ako trebate staro ponašanje.
Commit: b6772b80d
Automatski oporavak
Upravljački program sada tvrdo resetira I2C sabirnicu i senzor pri greškama mjerenja udaljenosti/vremenske granice. Primjeri više ne pozivaju tof.reset() u svojim rukovateljima iznimaka — korisnički kod koji je radio ručni oporavak trebao bi ga ukloniti (sukobit će se s novim automatskim oporavkom).
ML biblioteka (behavior)¶
Isti API, drugačiji brojevi — ponovno provjerite svaki ugođeni ML proces.
Predobrada sada rasteže umjesto letterboxa
Normalization sada koristi image.SCALE_ASPECT_IGNORE (rastezanje) umjesto image.SCALE_ASPECT_EXPAND (letterbox). NMS naknadna obrada također je prešla na neovisno x/y skaliranje.
Napomena
Utjecaj. Detektori u stilu YOLO-a i regresori ključnih točaka općenito se poboljšavaju. Primjeri BlazeFace, BlazePalm, FaceLandmarks i HandLandmarks sada zahtijevaju ručno kvadratno izrezivanje ulaznog ROI-ja — primjeri skripti su ažurirani; prilagođeni korisnički kod mora učiniti isto.
Commit: 68dc29a33
uklonjen pomoćnik ml.utils.mod()
ulab 6.12.0 nativno podržava % na ndarrayima. Kod koji je uvozio mod iz ml.utils mora koristiti a % b.
Gradnja / alati (tooling)¶
Ništa od ovoga ne utječe na MicroPython skripte. Gradnja firmvera iz izvora sada zahtijeva vanjski OpenMV SDK (1.6.0, prije unutar stabla). Nekoliko alata za gradnju unutar stabla je uklonjeno, a N6 je prešao na TinyUSB stog; nizvodni forkovi trebali bi pregledati povijest repozitorija firmvera — posebno potpis file_open() koji ispušta svoj argument buffered.
Kontrolni popis za migraciju¶
Za čistu migraciju na v5.0.0 tipičan posao je:
Zamijenite
import sensorsimport csi; csi0 = csi.CSI()i prevedite svakiset_*/get_*poziv u njegovcsi.CSIpristupnik (migracija na csi).Omotajte argumente koordinata za
img.draw_*,get_pixel()iset_pixel()u tuple-ove (promjene modula image).Ispustite
()iz attrtuple pristupnika rezultata ako želite novi idiomatski oblik, ili ostavite stari stil na miru jer attrtuple-ovi i dalje podržavaju pozivne pristupnike (promjene modula image).Pregledajte
find_line_segments(),get_regression()i svaki odabir obiteljifind_apriltags()(promjene modula image).Preimenujte
timer_ms→poll_msu pozivimaprotocol.init(); ukloniteprotocol.poll()isoft_reboot=(promjene modula protocol).Za ML radne tokove: ponovno razmotrite svaki model koji je trebao letterbox ulaz (promjene ML biblioteke).