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).