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 sensor on nyt jäädytetty Python-moduuli, joka on rakennettu csi-moduulin päälle. Se tulostaa tuotaessa vanhentumisvaroituksen; muutamat funktiot, joita csi-moduuli ei voi tukea, nostavat nyt OSError-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) luokalle protocol.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 tai poll_ms-ajastin ei ohjaa. Myös protocol.init() voidaan kutsua uudelleen pinon alustamiseksi uudestaan. (c00c215f9, f849ffb1b)

  • Lisää CBOR-kanavawidgettejä — protocol.CBORChannel.add() saa tyypit text (staattinen merkkijono), lineedit (kirjoitettava merkkijono), pushbutton (hetkellinen toiminto), spinbox (askeleittainen numeerinen syöttö), radio (vaihtoehtoryhmä) ja waveform (1D-aikasarja argumenteilla sample_rate, series ja typecode; 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_AN500 QEMU-kohteessa on nyt lwIP ja käyttäjätilan verkkokortti, moduulit requests, mqtt ja sensor jäädytettyinä mukana sekä verkon yksikkötesti. (23546dfb1, 61d187305, 15096c3a2)

  • OpenAI-yhteensopiva API-esimerkki — openai_compatible.py ottaa 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, kutsujan headers-sanakirja kopioidaan (joten auth ei enää vuoda myöhempiin pyyntöihin), ja runko luetaan lohkoittain bytearray-puskuriin. (889f0b096)

  • mqtt tuo ssl-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 nukkuisi WFI-tilassa. (a54790193)

  • MicroPython-alimoduulin päivitykset — täysi verkkotuki QEMU-portissa, machine.mem_backup STM32: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.py kaappaa kuvat csi.CSI-objektinsa kautta vanhentuneen sensor-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, vaikka csi.CSI.width() / height() ilmoittivat toisen; ”ei muutosta” -pikapolku sulkee nyt mukautetut koot pois. (cfbb70156)

  • csi.CSI.lens_correction() jäsensi radi- ja coef-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_write eivä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_write tarkistaa 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() asetuksella rgbtuple=True kirjoitti 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 — sdcard SPI-ajuri on jäädytetty mukaan AE3-akkulaajennuslevyn microSD-korttipaikkaa varten. (a258f4814)

  • OpenMV RT1062 — lora-sx126x / lora-sync / lora-async jää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 sensor tulostaa terminaaliin WARNING: 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 nyt import sensor-rivillä eikä vasta sensor.reset()-kutsussa.

  • Nämä funktiot nostavat nyt OSError-poikkeuksen, koska csi-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 sijaan csi.CSI(delays=False) / csi.CSI(fflush=False).

  • Kehyskoot, joita csi ei 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äonnistuessaan OSError-poikkeuksen kuten ennenkin (csi-moduulin RuntimeError muunnetaan).

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.

Commitit: c45f99cad, b5c7853f2

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. Siirry csi-moduuliin (v5.0.0-siirtymä); korvaa disable_delays / disable_full_flush csi.CSI()-konstruktorin argumenteilla ja poista get_fb- / automaattikiertokutsut.

  • Lataatko yhden kuvan asetuksella copy_to_fb=True ja 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 nyt csi.CUSTOM.

  • Kaikki muu: päivitä laiteohjelmisto ja aja.