v5.0.1#
v5.0.1 je izdanje za održavanje povrh v5.0.0 — naslijeđeni modul sensor postaje Python sloj za kompatibilnost nad csi, slike učitane u međuspremnik slike sada se u pregledu prikazuju poput sličica kamere, JPEG koderi gube ograničenje izlaza od 1 MB i ispravno rukuju prekoračenjem, a tu je i niz ispravaka za kameru, protokol, mrežu i ML biblioteku. Ne uvodi nikakve promjene API-ja koje narušavaju kompatibilnost za skripte pisane za csi; nekoliko promjena ponašanja navedeno je pod promjene API-ja koje narušavaju kompatibilnost.
Istaknuto#
Modul
sensorsada je zamrznuti Python modul izgrađen nacsi. Pri uvozu ispisuje upozorenje o zastarjelosti; nekoliko funkcija koje modulcsine može podržati sada podižeOSError. Vidi promjene modula sensor.Učitane slike prikazuju se u pregledu poput sličica kamere. Slika smještena u međuspremnik slike s
copy_to_fb=True(image.Image,image.ImageIO.read(),fir.snapshot(),tof.snapshot()) šalje se u IDE — zajedno sa svime što je na njoj nacrtano — kada je sljedeća slika prebriše u međuspremniku slike, umjesto odmah. Vidi promjene pregleda.Preinaka JPEG kodera. Ograničenje izlaznog međuspremnika od 1 MB je uklonjeno (međuspremnik se dimenzionira prema slobodnoj memoriji), prekoračenje na softverskom i hardverskom putu se obrađuje umjesto zapisivanja skraćenih datoteka, a spremanje komprimirane slike pod drugom komprimiranom ekstenzijom podiže iznimku umjesto da zapisuje smeće.
Novi
protocol.poll()i šest novih CBOR widgeta (text,lineedit,pushbutton,spinbox,radio,waveform) zaprotocol.CBORChannel.YOLO Pro naknadni obrađivač, podrška za FLIR Lepton 3.1R / UW, skupna (burst) čitanja IMU-a, CAN na OpenMV N6 i cilj simulatora s mrežnom podrškom.
Nove značajke#
YoloPro— novi naknadni obrađivač za Edge Impulse YOLO Pro modele za detekciju objekata, plus primjeryolo_pro_detector.py. (f3f150ebd, ea7bbb398)protocol.poll()— izvodi jednu iteraciju protokolnog zadatka na zahtjev, za prilagođene transporte koje ne pokreće USB prekid nipoll_mstimer.protocol.init()također se može ponovno pozvati za ponovnu inicijalizaciju stoga. (c00c215f9, f849ffb1b)Više widgeta CBOR kanala —
protocol.CBORChannel.add()dobivatext(statični niz),lineedit(zapisivi niz),pushbutton(trenutna radnja),spinbox(numerički unos u koracima),radio(skupina opcija) iwaveform(1D vremenski niz s argumentimasample_rate,seriesitypecode; za strujanje mu dodijelite bajtove isprepletenih uzoraka). (8016d29ba)csi.CUSTOM—csi.CSI.framesize()sada vraća upotrebljivu konstantu nakon što je postavljena prilagođena(w, h)razlučivost, umjesto anonimnog cijelog broja. (af8841654)Skupno (burst) čitanje IMU-a —
imu.__read_reg()prihvaća neobavezni zapisivi međuspremnik i puni ga iz uzastopnih registara u jednoj transakciji. (244ca480a)FLIR Lepton 3.1R i Lepton UW prepoznaje upravljački program Leptona, uključujući njihove radiometrijske načine pojačanja. (0fc356632)
Mrežna podrška u simulatoru — QEMU cilj
MPS2_AN500sada ima lwIP i NIC u korisničkom načinu, sa zamrznutimrequests,mqttisensorte mrežnim jediničnim testom. (23546dfb1, 61d187305, 15096c3a2)Primjer API-ja kompatibilnog s OpenAI-jem —
openai_compatible.pysnima JPEG i šalje ga na chat-completions krajnju točku radi opisa scene. (79033c6aa)SX126x LoRa primjeri — upravljački program
lora-sx126xiz micropython-lib (slora-sync/lora-async) zamrznut je u ugrađeni program OpenMV RT1062, s primjerima pošiljatelja/primatelja/ping-ponga/strujanja slika za spajanje SX1261 ili SX1262 modula na SPI sabirnicu. Ovo je podrška koju je pridonijela zajednica; OpenMV ne prodaje LoRa sklopovlje. (19576e1b1)
Ostale promjene i poboljšanja#
Prepisana biblioteka
requests— odgovori s prijenosom u dijelovima se dekodiraju, izložen je argumenttimeout(zadano 5 s), JSON i tijela nizova znakova ispravno se serijaliziraju/kodiraju, zaglavlja se raščlanjuju bez obzira na velika i mala slova, a statusni redak po položaju, rječnikheaderspozivatelja se kopira (paauthviše ne curi u kasnije zahtjeve), a tijelo se čita u blokovima ubytearray. (889f0b096)mqttuvozissllijeno, pa modul i obične (ne-TLS) veze rade na inačicama bez podrške za SSL. (c2e0899e8)JPEG izlazni međuspremnik dimenzioniran prema slobodnoj memoriji umjesto fiksnog ograničenja od 1 MB; koderi obrezuju međuspremnik na kodiranu veličinu prije zapisivanja slike, pa snimke velikih senzora pri visokoj kvaliteti više ne padaju. (aa1ca6776)
Čišćenje ML naknadne obrade — generiranje graničnih okvira standardizirano je u Darknet, Edge Impulse i Ultralytics naknadnim obrađivačima, a izlaz YOLOv8 transponira se nakon primjene praga tako da se pohranjuje jedan redak po detekciji kao kod ostalih modela. (b5c7853f2, c45f99cad)
Sigurno gašenje PAG7936 — nova zastavica zaustavljanja senzora uspavljuje PAG7936 prije prebacivanja RESET/PWDN, čime se ispravljaju zaglavljivanja kada se senzor koristi na produžnom kabelu. Upravljački program također odabire svoj skup registara za MIPI CSI-2 ili paralelno sučelje prema I2C adresi senzora u vrijeme izvođenja umjesto u vrijeme gradnje. (10026530c, f6acf14ec, 5f0251c74)
Tempiranje reprodukcije
ImageIOsada opslužuje događaje na čekanju dok čeka interval između sličica umjesto da spava uWFI. (a54790193)Ažuriranja MicroPython podmodula — puna mrežna podrška na QEMU portu,
machine.mem_backupna STM32 putem backup SRAM/BKP registara, SDIO hardverska kontrola toka ostaje onemogućena na STM32F4 i ponovna upotreba MPU atributa za regije koje se ne predmemoriraju. (31ada5626, ab61d27a6, 06bddf13a)differential-translation.pysnima putem svojeg objektacsi.CSIumjesto zastarjelog modulasensor, a razmaci pri uvozu u primjerima su normalizirani. (68c866e7f, 9ceff4513)
Ispravci grešaka#
Kamera i senzori:
Postavljanje dviju prilagođenih
(w, h)razlučivosti zaredom ostavljalo je senzor na prvoj veličini dok sucsi.CSI.width()/height()prijavljivali drugu; brzi put „bez promjene” sada isključuje prilagođene veličine. (cfbb70156)csi.CSI.lens_correction()raščlanjivao jeradiicoefkao logičke vrijednosti, pa vrijednosti proslijeđene upravljačkom programu nisu bile one zadane. (ab44b3a77)PAG7936: uzastopno postavljanje ekspozicije i pojačanja međusobno se prebrisavalo (oba dijele jedan ručni način, a registri za očitavanje kasne jednu sličicu); upravljački program sada popunjava ručne registre samo pri ulasku u ručni način i zapisuje samo kontrolu koja se postavlja. (e7a18c0a0)
PAG7936 i PS5520 BAYER snimanje na OpenMV N6 padalo je s „Failed to initialize the CSI interface” pri bilo kojoj veličini osim pune razlučivosti, jer N6 ISP ne može skalirati sirovi Bayer. Senzori sada za BAYER rade u izvornom načinu koji odgovara traženoj veličini (PS5520: VGA, HD, SXGA-M, FHD, QHD, WQXGA2; QVGA nema izvorni način i nije podržan). (fe6790055, b7622b245)
Kodiranje i spremanje slika:
Softverski JPEG koder: prekoračenje izlaznog međuspremnika uvijek je bilo fatalno jer je put za realloc bio onemogućen; sada povećava međuspremnik (za polovicu njegove veličine odjednom) kada ga posjeduje, uredno odustaje kada ponestane memorije i obrezuje rezultat.
jpeg_write/mjpeg_writeviše ne zapisuju međuspremnik nakon neuspjelog kodiranja. (28e1110be)Hardverski JPEG koderi (STM32): prekoračenje je vraćalo djelomično kodiranu sliku s veličinom alokacije, stvarajući skraćene datoteke bez EOI oznake (npr. snimka od 5 MP pri kvaliteti 100 s praznom donjom polovicom). Sada prijavljuju prekoračenje, oslobađaju međuspremnik pri neuspjehu i obrezuju ga pri uspjehu. (22ce9619c)
Koder VC8000 tiho je proizvodio 4:2:0 kromu za svaki zahtjev; poduzorkovanje koje nije 4:2:0 sada se vraća na HW kodek koji ga podržava. (71f2be7f2)
image.Image.save()PNG slike kao.jpgzapisivao je do 1 MB neinicijalizirane hrpe, a JPEG slike kao.pngzapisivao je praznu datoteku. Oboje sada podiže iznimku; slika koja je već u ciljnom formatu i dalje se kopira kakva jest. (6c1fdf822)png_writesada provjerava povratnu vrijednost kompresora i komprimira prije stvaranja datoteke, pa neuspjeh više ne ostavlja praznu datoteku. (557f52d66)
Modul image:
image.Image.get_pixel()srgbtuple=Truena BAYER i YUV slikama zapisivao je pretvoreni piksel izvan lokalne varijable na stogu, na pomaku koji kontrolira pozivatelj. (13f2a17b6)gif.Gif.add_frame()izbacio je nedostižnu granu pretvorbe Bayer/YUV; prihvaćaju se samo GRAYSCALE i RGB565 slike, kako je Python API već nametao. (f20d99d96)
Protokol:
Registriranje dinamičkog kanala kada su svi utori već zauzeti uzrokovalo je zapisivanje izvan granica; ID kanala sada se prvo provjerava, a za rezervirane ID-ove kanala statički se provjerava da stanu u tablicu kanala. (68f635d1f)
Objekti dinamičkih kanala preživljavali su meki reset u korijenskim pokazivačima, pa je GC nastavljao pretraživati zastarjele blokove hrpe iz prethodnog izvođenja; tablica se sada briše pri inicijalizaciji. (ef0ebb03b, e23641145)
Portovi:
i.MX RT: dodana nedostajuća deinicijalizacija CAN-a i enkodera pri mekom resetu. (7cb9d3dc2)
Sklopovlje i podrška za ploče#
OpenMV N6 — CAN je sada omogućen (
machine.CAN). (294f0febd, 91e1c9573)OpenMV AE3 — SPI upravljački program
sdcardzamrznut je za microSD utor na AE3 Battery Shieldu. (a258f4814)OpenMV RT1062 —
lora-sx126x/lora-sync/lora-asynczamrznuti u ugrađeni program (vidi Nove značajke).FLIR Lepton 3.1R / UW — prepoznaje ih upravljački program Leptona na svim pločama s podrškom za Lepton.
PAG7936 — sigurno zaustavljanje pri gašenju, odabir sučelja u vrijeme izvođenja, ispravak ekspozicije/pojačanja i BAYER snimanje na N6.
PS5520 — BAYER snimanje na N6 u izvornim veličinama.
Simulator (MPS2_AN500) — mrežna podrška.
Sve ploče — modul za kompatibilnost
sensorzamrznut je u manifest svake ploče.
Promjene API-ja koje narušavaju kompatibilnost#
v5.0.1 ne uvodi nikakve promjene koje narušavaju kompatibilnost API-ja csi ili image. Skripte koje su radile na v5.0.0 rade nepromijenjene, uz sljedeće promjene ponašanja.
modul sensor (behavior)#
Izvorni modul sensor (modules/py_csi.c) uklonjen je i zamijenjen zamrznutim Python modulom koji implementira isti API povrh csi. Vidi sensor.
Commit: 5e3d40631
import sensorispisujeWARNING: The sensor module is deprecated and will be removed in a future release. Please use the csi module instead.na terminal.Skriveni objekt
csi.CSIstvara se pri uvozu, pa nedostajuća kamera sada podiže grešku priimport sensor, a ne prisensor.reset().Ove funkcije sada podižu
OSErrorjercsinema ekvivalent:get_fb(),alloc_extra_fb(),dealloc_extra_fb(),set_auto_rotation(),get_auto_rotation(),disable_delays(),disable_full_flush(). (Dvije funkcije*_extra_fbpodizale su iznimku već u v5.0.0.) Za posljednje dvije koristitecsi.CSI(delays=False)/csi.CSI(fflush=False).Veličine sličica koje
csine izvozi (QQCIF,QQSIF,QQQQVGA,HQQQQVGA,HQQQVGA,HQQVGA,B64X32,B64X64,B128X64,B128X128,B160X160,B320X320,LCD,QQVGA2) sada su(w, h)tuple-ovi koji se prosljeđuju kao prilagođene razlučivosti.get_framesize()vraća postavljeni tuple dok je kamera još na toj veličini, pa provjere jednakosti s konstantama i dalje rade.ioctl()prosljeđuje najviše četiri argumenta nakon zahtjeva.sleep()/shutdown()podižuOSErrorpri neuspjehu kao i prije (csiRuntimeErrorse prevodi).
Prijeđite na csi — vidi tablicu migracije na v5.0.0.
Učitavanje slika u međuspremnik slike (behavior)#
Funkcije koje učitavaju sliku u međuspremnik slike — image.Image s copy_to_fb=True, image.Image.copy() / image.Image.scale() i pretvorbe to_* s copy_to_fb=True, image.ImageIO.read(), fir.snapshot() i tof.snapshot() s copy_to_fb=True — prije su novu sliku odmah slale u IDE pregled, pa se ništa nacrtano na vraćenoj slici nikada nije vidjelo. Sada označavaju međuspremnik slike kao na čekanju i šalju ga, sa svime što je na njemu nacrtano, neposredno prije nego što ga sljedeća slika prebriše — isto ponašanje kao csi.CSI.snapshot().
Commitovi: 87b6db5ee, 7b1a35c2f, f773c740d
Petlje koje čitaju tok slika ne trebaju promjene i sada prikazuju svoj crtež. Skripta koja učita jednu sliku i stane mora je izričito poslati:
img = image.Image("example.bmp", copy_to_fb=True)
img.flush() # new: send it to the IDE preview now
time.sleep_ms(1000)
ML biblioteka (behavior)#
Utječe samo na kod koji nasljeđuje ili kopira isporučene naknadne obrađivače. YoloV8 sada transponira izlaz modela nakon primjene praga tako da se preživjele detekcije pohranjuju kao jedan redak po okviru (bb[:, 4:]), u skladu s Darknet i Edge Impulse naknadnim obrađivačima, umjesto jednog stupca po okviru (bb[4:, :]). Javni rezultati ((x, y, w, h), score) su nepromijenjeni.
modul protocol (minor)#
protocol.poll() se vratio. v5.0.0 ga je uklonio kada je protokolni zadatak prešao na timer; vraća se kao izričit način pokretanja zadatka za prilagođene transporte. Ništa se drugo nije promijenilo — skripte koje ga nikada nisu pozivale nisu pogođene.
Commit: c00c215f9
Gradnja / alati (tooling)#
Ništa od ovoga ne utječe na MicroPython skripte. py_image.c je podijeljen, pri čemu su objekti deskriptora (cascade, keypoints, LBP, keypoint match) premješteni u py_image_descriptor.c, a statistički objekti (similarity, statistics, percentile, threshold, histogram) u py_image_stats.c. API imlib kodera usklađen je s ostatkom imliba: jpeg_compress / png_compress vraćaju 0 pri uspjehu i -1 pri grešci, a jpeg_compress je izgubio svoj argument realloc (promjena veličine ovisi o vlasništvu nad međuspremnikom). OMV_PROTOCOL_MAX_CHANNELS postao je OMV_PROTOCOL_CHANNEL_MAX u omv_protocol_channel.h, a portovi sada pri inicijalizaciji pozivaju py_protocol_init0(). Definicija ploče OMV_PAG7936_MIPI_CSI2 je uklonjena (sučelje se odabire u vrijeme izvođenja). Sve zaokružuju nadogradnje CI ovisnosti i ispravak praznog changeloga izdanja. Za detalje relevantne za forkove pogledajte povijest repozitorija ugrađenog programa.
Kontrolni popis za migraciju#
Još uvijek na
import sensor? Radi, uz upozorenje. Prijeđite nacsi(migracija na v5.0.0); zamijenitedisable_delays/disable_full_flushargumentima konstruktoracsi.CSI()i izbacite poziveget_fb/ automatskog zakretanja.Učitavate jednu sliku s
copy_to_fb=Truei očekujete da je vidite? Nakon učitavanja dodajteimg.flush().Kopirali ste YOLOv8 naknadni obrađivač? Indeksirajte izlaz nakon praga po retku (
bb[:, 4:]), a ne po stupcu.Uspoređujete
csi0.framesize()nakon postavljanja tuplea? Sada vraćacsi.CUSTOM.Sve ostalo: ponovno flashajte i pokrenite.