class ImageIO – ImageIO-objekti

ImageIO-luokka tallentaa ja toistaa Image-kehysten virtoja OpenMV:n natiivissa levymuodossa. Yksi virta voi sisältää heterogeenisiä kehyksiä (eri pikseliformaatit / koot) ja tallentaa kullekin kehysten välisen aikavälin, joten toisto palauttaa alkuperäisen kehysnopeuden.

Taustasäilöjä on kaksi:

  • Tiedostovirta – kehykset luetaan tiedostosta / lisätään tiedoston perään tiedostojärjestelmässä. Tiedosto alkaa 16-tavuisella maagisella otsikolla OMV IMG STR Vx.y, jota seuraavat kehyskohtaiset lohkot. Nykyinen kirjoittaja tuottaa muodon V2.0; vanhemmat V1.0- ja V1.1-tiedostot ovat edelleen luettavissa.

  • Muistivirta – kehykset luetaan / kirjoitetaan kiinteäkokoisesta RAM-puskurista, joka varataan luontihetkellä. Hyödyllinen kehysten kierrättämiseen suodattimien läpi, jotka tarvitsevat tallenteen ilman tiedostojärjestelmän käyttöä.

class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)

Luo ImageIO-virta.

Jos path on merkkijono, kyseiseen polkuun avataan tiedostovirta. mode on oltava jokin seuraavista:

  • 'r' – avaa olemassa olevan tiedoston lukemista varten. Maaginen otsikko validoidaan ja versio (V1.0 / V1.1 / V2.0) tallennetaan version()-metodin käyttöön.

  • 'w' – typistää / luo tiedoston ja kirjoittaa tuoreen V2.0-maagisen otsikon. Kehykset lisätään kunkin write()-kutsun yhteydessä.

Jos path on 3-monikko (w, h, pixformat), varataan muistivirta. mode on tällöin kokonaisluku, joka kertoo etukäteen varattavien kehyspaikkojen määrän. Puskuri mitoitetaan count kehykselle kokoa (w, h, pixformat) eikä sen anneta kasvaa luonnin jälkeen. pixformat on jokin seuraavista: image.BINARY, image.GRAYSCALE, image.RGB565, image.BAYER, image.YUV422, image.JPEG tai image.PNG. Pakatuille formaateille (image.JPEG, image.PNG) paikkakohtainen koko arvioidaan arvolla 2 bpp; arviota suuremmat kehykset aiheuttavat ValueError write()-kutsun yhteydessä.

Tarkastelu

type() int

Palauttaa virran taustasäilön: FILE_STREAM tiedostovirralle, MEMORY_STREAM muistivirralle.

is_closed() bool

Palauttaa True, jos tälle objektille on kutsuttu close(). Sulkemisen jälkeen virta aiheuttaa OSError("Stream closed") kaikissa jatkossa tehtävissä luku-/kirjoitus-/siirtotoiminnoissa.

count() int

Palauttaa virtaan tällä hetkellä tallennettujen kehysten määrän. Tiedostovirroissa tämä kasvaa, kun write() lisää kehyksiä; muistivirroissa tämä on kiinteä luontihetkellä.

offset() int

Palauttaa nykyisen kehysindeksin. read() ja write() kasvattavat sitä, seek() nollaa sen.

version() int | None

Palauttaa tiedostovirtojen levymuodon version (10 muodolle V1.0, 11 muodolle V1.1, 20 muodolle V2.0). Palauttaa None muistivirroille.

buffer_size() int | None

Palauttaa paikkakohtaisen pikselipuskurin koon tavuina muistivirroille (paikan koko miinus sisäinen Image-kirjanpito-otsikko). Palauttaa None tiedostovirroille. Käytä tätä yhdessä count()-metodin kanssa tarkistaaksesi, mahtuuko tietyn kokoinen kehys.

size() int

Palauttaa virran kuluttamat kokonaistavut – tiedoston koon levyllä tiedostovirroille tai koko RAM-puskurin koon (count * per_slot_size mukaan lukien paikkakohtainen otsikko) muistivirroille.

I/O

write(img: Image) ImageIO

Lisää (tiedostovirta) tai tallentaa siirtymäkohtaan (muistivirta) kehyksen img ja kasvattaa offset()-arvoa yhdellä.

Tiedostovirroissa tiedosto kasvaa, kun kehyksiä lisätään. Kirjoittaminen muuhun kuin lopun siirtymäkohtaan typistää tiedoston loppuosan, joten määrä voi pienentyä.

Muistivirroissa kehys kirjoitetaan nykyiseen paikkaan; viimeisen paikan ohi kirjoittaminen aiheuttaa EOFError("End of stream") ja buffer_size()-kokoa suuremman kehyksen kirjoittaminen aiheuttaa ValueError("Invalid frame size").

Palauttaa self, jotta kutsut voidaan ketjuttaa.

read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None

Lukee kehyksen nykyisestä offset()-kohdasta, kasvattaa siirtymää ja palauttaa uuden Image-objektin. Vastaa write()-metodin toistopuolta.

copy_to_fb – kun True (oletus), dekoodattu kehys sijoitetaan kameran kehyspuskuriin (samaan paikkaan, johon csi.CSI.snapshot() päätyy), joten palautettu Image on piirrettävissä IDE:n esikatselun kautta. Kun False, kehys varataan sen sijaan MicroPython-keosta.

loop (vain tiedostovirrat) – kun True (oletus), viimeisen kehyksen ohi luettaessa siirrytään takaisin ensimmäiseen kehykseen ja jatketaan. Kun False, kutsu palauttaa None heti, kun tiedoston loppu saavutetaan.

pause – kun True (oletus), kutsu estyy, kunnes alun perin tallennettu kehysten välinen aikaväli on kulunut, joten toisto etenee tallenteen natiivilla kehysnopeudella. Aseta False mahdollisimman nopeaa toistoa varten.

seek(offset: int) ImageIO

Siirtää offset()-kohdan kehykseen offset. offset ei saa olla negatiivinen; muistivirran siirtymien on lisäksi oltava pienempiä kuin count().

Tiedostovirran siirtymät kulkevat tiedoston kehys kerrallaan alusta lähtien, koska kehyslohkot ovat vaihtelevankokoisia – odota O(offset)-aikaa suurille hyppäyksille.

Palauttaa self, jotta kutsut voidaan ketjuttaa.

sync() ImageIO

Huuhtelee odottavat kirjoitukset levylle tiedostovirroille (kutsuu taustalla olevaa tiedostojärjestelmän sync-toimintoa). Ei tee mitään muistivirroille.

Palauttaa self, jotta kutsut voidaan ketjuttaa.

close() None

Sulkee virran. Vapauttaa muistipuskurin (muistivirrat) tai sulkee tiedoston (tiedostovirrat). close()-kutsun jälkeen ImageIO-objektia ei voi käyttää uudelleen; seuraavat toiminnot aiheuttavat OSError("Stream closed"). close()-kutsuminen kahdesti ei tee mitään.

ImageIO suljetaan myös automaattisesti, kun se kerätään roskankeruussa (se rekisteröi viimeistelijän luontihetkellä).

Vakiot

FILE_STREAM: int

Arvo, jonka type() palauttaa tiedostopohjaisille virroille.

MEMORY_STREAM: int

Arvo, jonka type() palauttaa muistissa oleville virroille.