v5.0.1#
v5.0.1 on ylläpitojulkaisu v5.0.0:n päälle — vanha sensor-moduuli muuttuu Python-yhteensopivuuskerrokseksi csi-moduulin päällä, kehyspuskuriin ladatut kuvat esikatsellaan nyt kuten kamerakehykset, JPEG-enkooderit menettävät 1 Mt:n ulostulorajansa ja käsittelevät ylivuodon oikein, ja mukana on joukko kamera-, protokolla-, verkko- ja ML-kirjastokorjauksia. Se ei tuo lainkaan rajapinnan rikkovia muutoksia csi-moduulia vasten kirjoitetuille skripteille; muutamat toiminnan muutokset on lueteltu kohdassa rajapinnan rikkovat muutokset.
Kohokohdat#
Moduuli
sensoron nyt jäädytetty Python-moduuli, joka on rakennettucsi-moduulin päälle. Se tulostaa tuotaessa vanhentumisvaroituksen; muutamat funktiot, joitacsi-moduuli ei voi tukea, nostavat nytOSError-poikkeuksen. Katso sensor-moduulin muutokset.Ladatut kuvat esikatsellaan kuten kamerakehykset. Kehyspuskuriin
copy_to_fb=True-asetuksella sijoitettu kuva (image.Image,image.ImageIO.read(),fir.snapshot(),tof.snapshot()) huuhdellaan IDE:hen — yhdessä kaiken siihen piirretyn kanssa — kun seuraava kuva ylikirjoittaa kehyspuskurin, eikä enää heti. Katso esikatselun muutokset.JPEG-enkooderin uudistus. 1 Mt:n ulostulopuskurin yläraja on poistettu (puskurin koko määräytyy vapaan muistin mukaan), ylivuoto käsitellään sekä ohjelmisto- että laitteistopolulla katkaistujen tiedostojen kirjoittamisen sijaan, ja pakatun kuvan tallentaminen toisella pakatulla tiedostopäätteellä nostaa poikkeuksen roskan kirjoittamisen sijaan.
Uusi
protocol.poll()ja kuusi uutta CBOR-widgettiä (text,lineedit,pushbutton,spinbox,radio,waveform) luokalleprotocol.CBORChannel.YOLO Pro -jälkikäsittelijä, FLIR Lepton 3.1R / UW -tuki, IMU:n purskeluvut, CAN OpenMV N6:lla sekä verkkokykyinen simulaattorikohde.
Uudet ominaisuudet#
YoloPro— uusi jälkikäsittelijä Edge Impulse YOLO Pro -objektintunnistusmalleille sekäyolo_pro_detector.py-esimerkki. (f3f150ebd, ea7bbb398)protocol.poll()— suorittaa protokollatehtävän yhden iteraation tarvittaessa mukautetuille siirtolinkeille, joita USB-keskeytys taipoll_ms-ajastin ei ohjaa. Myösprotocol.init()voidaan kutsua uudelleen pinon alustamiseksi uudestaan. (c00c215f9, f849ffb1b)Lisää CBOR-kanavawidgettejä —
protocol.CBORChannel.add()saa tyypittext(staattinen merkkijono),lineedit(kirjoitettava merkkijono),pushbutton(hetkellinen toiminto),spinbox(askeleittainen numeerinen syöttö),radio(vaihtoehtoryhmä) jawaveform(1D-aikasarja argumenteillasample_rate,seriesjatypecode; suoratoista se sijoittamalla lomitetut näytetavut). (8016d29ba)csi.CUSTOM—csi.CSI.framesize()palauttaa nyt käyttökelpoisen vakion sen jälkeen, kun mukautettu(w, h)-resoluutio on asetettu, anonyymin kokonaisluvun sijaan. (af8841654)IMU:n purskeluku —
imu.__read_reg()hyväksyy valinnaisen kirjoitettavan puskurin ja täyttää sen peräkkäisistä rekistereistä yhdellä väylätapahtumalla. (244ca480a)FLIR Lepton 3.1R ja Lepton UW tunnistetaan Lepton-ajurissa, mukaan lukien niiden radiometriset vahvistustilat. (0fc356632)
Simulaattorin verkkoyhteys —
MPS2_AN500QEMU-kohteessa on nyt lwIP ja käyttäjätilan verkkokortti, moduulitrequests,mqttjasensorjäädytettyinä mukana sekä verkon yksikkötesti. (23546dfb1, 61d187305, 15096c3a2)OpenAI-yhteensopiva API-esimerkki —
openai_compatible.pyottaa JPEG-otoksen ja lähettää sen chat-completions-päätepisteeseen näkymän kuvausta varten. (79033c6aa)SX126x LoRa -esimerkit — micropython-libin
lora-sx126x-ajuri (sekälora-sync/lora-async) on jäädytetty OpenMV RT1062 -laiteohjelmistoon, ja mukana on lähetin-/vastaanotin-/ping-pong-/kuvavirtaesimerkit SX1261- tai SX1262-moduulin kytkemiseksi SPI-väylään. Tämä on yhteisön tuottama tuki; OpenMV ei myy LoRa-laitteistoa. (19576e1b1)
Muut muutokset ja parannukset#
requests-kirjaston uudelleenkirjoitus — lohkotut siirtovastaukset dekoodataan,timeout-argumentti (oletus 5 s) on tarjolla, JSON- ja merkkijonorungot sarjallistetaan/koodataan oikein, otsakkeet jäsennetään kirjainkokoa huomioimatta ja tilarivi sijainnin mukaan, kutsujanheaders-sanakirja kopioidaan (jotenauthei enää vuoda myöhempiin pyyntöihin), ja runko luetaan lohkoittainbytearray-puskuriin. (889f0b096)mqtttuossl-moduulin laiskasti, joten moduuli ja tavalliset (ei-TLS) yhteydet toimivat versioissa, joissa ei ole SSL-tukea. (c2e0899e8)JPEG-ulostulopuskurin koko määräytyy vapaan muistin mukaan kiinteän 1 Mt:n ylärajan sijaan; enkooderit leikkaavat puskurin koodattuun kokoon ennen kuvan kirjoittamista, joten suurten sensorien korkealaatuiset kaappaukset eivät enää epäonnistu. (aa1ca6776)
ML-jälkikäsittelyn siivous — rajauslaatikoiden luonti on yhtenäistetty Darknet-, Edge Impulse- ja Ultralytics-jälkikäsittelijöiden kesken, ja YOLOv8:n ulostulo transponoidaan kynnystyksen jälkeen, joten se tallennetaan yksi rivi tunnistusta kohti kuten muissakin malleissa. (b5c7853f2, c45f99cad)
PAG7936:n turvallinen sammutus — uusi sensorin pysäytyslippu asettaa PAG7936:n lepotilaan ennen RESET/PWDN-vaihtoa, mikä korjaa jumiutumiset, kun sensoria käytetään jatkokaapelilla. Ajuri valitsee myös MIPI CSI-2- tai rinnakkaisrekisterijoukkonsa sensorin I2C-osoitteen perusteella ajon aikana käännösajan sijaan. (10026530c, f6acf14ec, 5f0251c74)
ImageIO-toiston tahdistus käsittelee nyt odottavat tapahtumat kehysten välistä aikaväliä odottaessaan sen sijaan, että se nukkuisiWFI-tilassa. (a54790193)MicroPython-alimoduulin päivitykset — täysi verkkotuki QEMU-portissa,
machine.mem_backupSTM32:lla varmuuskopio-SRAM:n/BKP-rekisterien kautta, SDIO:n laitteistovuonohjaus pidetään pois käytöstä STM32F4:llä, ja MPU-attribuuttien uudelleenkäyttö ei-välimuistitettaville alueille. (31ada5626, ab61d27a6, 06bddf13a)differential-translation.pykaappaa kuvatcsi.CSI-objektinsa kautta vanhentuneensensor-moduulin sijaan, ja esimerkkien import-rivien välistys yhtenäistettiin. (68c866e7f, 9ceff4513)
Virhekorjaukset#
Kamerat ja sensorit:
Kahden mukautetun
(w, h)-resoluution asettaminen peräkkäin jätti sensorin ensimmäiseen kokoon, vaikkacsi.CSI.width()/height()ilmoittivat toisen; ”ei muutosta” -pikapolku sulkee nyt mukautetut koot pois. (cfbb70156)csi.CSI.lens_correction()jäsensiradi- jacoef-arvot totuusarvoina, joten ajurille välitetyt arvot eivät olleet annettuja. (ab44b3a77)PAG7936: valotuksen ja vahvistuksen asettaminen peräkkäin ylikirjoitti toisensa (molemmat jakavat yhden manuaalitilan, ja takaisinluettavat rekisterit laahaavat kehyksen jäljessä); ajuri alustaa nyt manuaalirekisterit vain manuaalitilaan siirryttäessä ja kirjoittaa vain asetettavan säätimen. (e7a18c0a0)
PAG7936:n ja PS5520:n BAYER-kaappaus OpenMV N6:lla epäonnistui virheellä ”Failed to initialize the CSI interface” kaikissa muissa ko’oissa kuin täydessä resoluutiossa, koska N6:n ISP ei voi skaalata raakaa Bayer-dataa. Sensorit toimivat nyt BAYER-tilassa pyydettyä kokoa vastaavassa natiivitilassa (PS5520: VGA, HD, SXGA-M, FHD, QHD, WQXGA2; QVGA:lla ei ole natiivitilaa, eikä sitä tueta). (fe6790055, b7622b245)
Kuvan koodaus ja tallennus:
Ohjelmistopohjainen JPEG-enkooderi: ulostulopuskurin ylivuoto oli aina kohtalokas, koska realloc-polku oli poistettu käytöstä; nyt se kasvattaa puskuria (puolella sen koosta kerrallaan), kun se omistaa sen, perääntyy siististi muistin loppuessa ja leikkaa tuloksen.
jpeg_write/mjpeg_writeeivät enää kirjoita puskuria epäonnistuneen koodauksen jälkeen. (28e1110be)Laitteistopohjaiset JPEG-enkooderit (STM32): ylivuoto palautti osittain koodatun kuvan varauksen koolla, mikä tuotti katkaistuja tiedostoja ilman EOI-merkkiä (esim. 5 MP:n kaappaus laadulla 100, jonka alaosa oli tyhjä). Ne ilmoittavat nyt ylivuodosta, vapauttavat puskurin epäonnistuessa ja leikkaavat sen onnistuessa. (22ce9619c)
VC8000-enkooderi tuotti hiljaisesti 4:2:0-krominanssin jokaiselle pyynnölle; muu kuin 4:2:0-alinäytteistys perääntyy nyt sitä tukevaan laitteistokoodekkiin. (71f2be7f2)
image.Image.save()kirjoitti PNG-kuvan.jpg-muodossa tallennettaessa jopa 1 Mt alustamatonta kekoa ja JPEG-kuvan.png-muodossa tallennettaessa tyhjän tiedoston. Molemmat nostavat nyt poikkeuksen; jo kohdemuodossa oleva kuva kopioidaan edelleen sellaisenaan. (6c1fdf822)png_writetarkistaa nyt pakkaajan paluuarvon ja pakkaa ennen tiedoston luomista, joten epäonnistuminen ei enää jätä jälkeensä tyhjää tiedostoa. (557f52d66)
Image-moduuli:
image.Image.get_pixel()asetuksellargbtuple=Truekirjoitti BAYER- ja YUV-kuvilla muunnetun pikselin pinon paikallismuuttujan ohi kutsujan ohjaamaan siirtymään. (13f2a17b6)gif.Gif.add_frame()-metodista poistettiin saavuttamaton Bayer/YUV-muunnoshaara; vain GRAYSCALE- ja RGB565-kuvat hyväksytään, kuten Python-rajapinta jo edellytti. (f20d99d96)
Protokolla:
Dynaamisen kanavan rekisteröinti, kun kaikki paikat olivat jo käytössä, aiheutti rajojen ulkopuolisen kirjoituksen; kanavatunnus tarkistetaan nyt ensin, ja varattujen kanavatunnusten mahtuminen kanavataulukkoon varmistetaan staattisesti. (68f635d1f)
Dynaamiset kanavaobjektit säilyivät pehmeän nollauksen yli juuriosoittimissa, joten roskienkeruu jatkoi edellisen ajon vanhentuneiden kekolohkojen läpikäyntiä; taulukko tyhjennetään nyt alustuksessa. (ef0ebb03b, e23641145)
Portit:
i.MX RT: lisättiin puuttuva CAN:n ja Encoderin alustuksen purku pehmeässä nollauksessa. (7cb9d3dc2)
Laitteisto- ja korttituki#
OpenMV N6 — CAN on nyt käytössä (
machine.CAN). (294f0febd, 91e1c9573)OpenMV AE3 —
sdcardSPI-ajuri on jäädytetty mukaan AE3-akkulaajennuslevyn microSD-korttipaikkaa varten. (a258f4814)OpenMV RT1062 —
lora-sx126x/lora-sync/lora-asyncjäädytetty mukaan (katso Uudet ominaisuudet).FLIR Lepton 3.1R / UW — Lepton-ajuri tunnistaa ne kaikilla Lepton-yhteensopivilla korteilla.
PAG7936 — turvallisen sammutuksen pysäytys, liitännän valinta ajon aikana, valotus-/vahvistuskorjaus ja BAYER-kaappaus N6:lla.
PS5520 — BAYER-kaappaus N6:lla natiivikooissa.
Simulaattori (MPS2_AN500) — verkkoyhteys.
Kaikki kortit —
sensor-yhteensopivuusmoduuli on jäädytetty jokaisen kortin manifestiin.
Rajapinnan rikkovat muutokset#
v5.0.1 ei tuo rikkovia muutoksia csi - tai image -rajapintoihin. Skriptit, jotka toimivat v5.0.0:lla, toimivat muuttumattomina seuraavin toiminnan muutoksin.
sensor-moduuli (behavior)#
Natiivi sensor-moduuli (modules/py_csi.c) poistettiin ja korvattiin jäädytetyllä Python-moduulilla, joka toteuttaa saman rajapinnan csi-moduulin päällä. Katso sensor.
Commit: 5e3d40631
import sensortulostaa terminaaliinWARNING: The sensor module is deprecated and will be removed in a future release. Please use the csi module instead..Piilotettu
csi.CSI-objekti luodaan tuonnin yhteydessä, joten puuttuva kamera nostaa virheen nytimport sensor-rivillä eikä vastasensor.reset()-kutsussa.Nämä funktiot nostavat nyt
OSError-poikkeuksen, koskacsi-moduulissa ei ole vastinetta:get_fb(),alloc_extra_fb(),dealloc_extra_fb(),set_auto_rotation(),get_auto_rotation(),disable_delays(),disable_full_flush(). (Kaksi*_extra_fb-funktiota nostivat poikkeuksen jo v5.0.0:ssa.) Käytä kahden viimeisen sijaancsi.CSI(delays=False)/csi.CSI(fflush=False).Kehyskoot, joita
csiei vie (QQCIF,QQSIF,QQQQVGA,HQQQQVGA,HQQQVGA,HQQVGA,B64X32,B64X64,B128X64,B128X128,B160X160,B320X320,LCD,QQVGA2), ovat nyt(w, h)-monikoita, jotka välitetään mukautettuina resoluutioina.get_framesize()palauttaa asetetun monikon niin kauan kuin kamera on yhä siinä koossa, joten yhtäsuuruusvertailut vakioihin toimivat edelleen.ioctl()välittää enintään neljä argumenttia pyynnön jälkeen.sleep()/shutdown()nostavat epäonnistuessaanOSError-poikkeuksen kuten ennenkin (csi-moduulinRuntimeErrormuunnetaan).
Siirry csi-moduuliin — katso v5.0.0-siirtymätaulukko.
Kuvan lataus kehyspuskuriin (behavior)#
Funktiot, jotka lataavat kuvan kehyspuskuriin — image.Image asetuksella copy_to_fb=True, image.Image.copy() / image.Image.scale() ja to_*-muunnokset asetuksella copy_to_fb=True, image.ImageIO.read(), fir.snapshot() ja tof.snapshot() asetuksella copy_to_fb=True — työnsivät aiemmin uuden kuvan IDE:n esikatseluun heti, joten palautettuun kuvaan piirrettyä ei koskaan nähty. Nyt ne merkitsevät kehyspuskurin odottavaksi ja huuhtelevat sen, yhdessä kaiken siihen piirretyn kanssa, juuri ennen kuin seuraava kuva ylikirjoittaa sen — sama toiminta kuin metodilla csi.CSI.snapshot().
Commitit: 87b6db5ee, 7b1a35c2f, f773c740d
Kuvavirtaa lukevat silmukat eivät tarvitse muutoksia, ja ne näyttävät nyt piirroksensa. Skriptin, joka lataa yhden kuvan ja pysähtyy, on huuhdeltava se eksplisiittisesti:
img = image.Image("example.bmp", copy_to_fb=True)
img.flush() # new: send it to the IDE preview now
time.sleep_ms(1000)
ML-kirjasto (behavior)#
Vaikuttaa vain koodiin, joka periytyy mukana toimitetuista jälkikäsittelijöistä tai kopioi niitä. YoloV8 transponoi nyt mallin ulostulon kynnystyksen jälkeen, joten säilyneet tunnistukset tallennetaan yksi rivi laatikkoa kohti (bb[:, 4:]), kuten Darknet- ja Edge Impulse -jälkikäsittelijöissä, eikä yksi sarake laatikkoa kohti (bb[4:, :]). Julkiset ((x, y, w, h), score)-tulokset ovat ennallaan.
protocol-moduuli (minor)#
protocol.poll() on palannut. v5.0.0 poisti sen, kun protokollatehtävä siirtyi ajastimeen; se palaa eksplisiittisenä tapana ohjata tehtävää mukautetuille siirtolinkeille. Mikään muu ei muuttunut — skripteihin, jotka eivät koskaan kutsuneet sitä, tämä ei vaikuta.
Commit: c00c215f9
Rakennus / työkalut (tooling)#
Mikään tästä ei vaikuta MicroPython-skripteihin. py_image.c jaettiin osiin: kuvaajaobjektit (cascade, keypoints, LBP, keypoint match) siirtyivät tiedostoon py_image_descriptor.c ja tilasto-objektit (similarity, statistics, percentile, threshold, histogram) tiedostoon py_image_stats.c. imlib-enkooderirajapinta yhdenmukaistettiin muun imlibin kanssa: jpeg_compress / png_compress palauttavat 0 onnistuessaan ja -1 virheen sattuessa, ja jpeg_compress menetti realloc-argumenttinsa (koon muuttaminen riippuu puskurin omistajuudesta). OMV_PROTOCOL_MAX_CHANNELS muuttui muotoon OMV_PROTOCOL_CHANNEL_MAX tiedostossa omv_protocol_channel.h, ja portit kutsuvat nyt alustuksessa funktiota py_protocol_init0(). OMV_PAG7936_MIPI_CSI2-korttimäärittely on poistettu (liitäntä valitaan ajon aikana). CI-riippuvuuksien päivitykset ja tyhjän julkaisumuutoslokin korjaus täydentävät kokonaisuuden. Katso forkkeja koskevat yksityiskohdat laiteohjelmistorepositorion historiasta.
Siirtymän tarkistuslista#
Käytätkö yhä
import sensor? Se toimii, varoituksen kera. Siirrycsi-moduuliin (v5.0.0-siirtymä); korvaadisable_delays/disable_full_flushcsi.CSI()-konstruktorin argumenteilla ja poistaget_fb- / automaattikiertokutsut.Lataatko yhden kuvan asetuksella
copy_to_fb=Trueja odotat näkeväsi sen? Lisääimg.flush()latauksen jälkeen.Kopioitko YOLOv8-jälkikäsittelijän? Indeksoi kynnystetty ulostulo rivin (
bb[:, 4:]) äläkä sarakkeen mukaan.Vertaatko
csi0.framesize()-arvoa monikon asettamisen jälkeen? Se palauttaa nytcsi.CUSTOM.Kaikki muu: päivitä laiteohjelmisto ja aja.