class ImageIO – ImageIO objektum

Az ImageIO osztály Image képkockákból álló adatfolyamokat rögzít és játszik le az OpenMV natív, lemezre írt formátumában. Egyetlen adatfolyam heterogén képkockákat tárolhat (különböző képpontformátumokat / méreteket), és minden képkockához rögzíti a képkockák közötti időközt, így a lejátszás újra előállítja az eredeti képkockasebességet.

Kétféle háttértár létezik:

  • File stream – a képkockák egy fájlrendszerbeli fájlból olvasódnak / abba fűződnek hozzá. A fájl egy 16 bájtos OMV IMG STR Vx.y mágikus fejléccel kezdődik, amelyet képkockánkénti adatdarabok követnek. A jelenlegi író V2.0 formátumot ír; a régebbi V1.0 és V1.1 fájlok továbbra is olvashatók.

  • Memory stream – a képkockák egy konstruálás idején lefoglalt, rögzített méretű RAM-pufferből olvasódnak / abba íródnak. Hasznos, ha képkockákat akarunk átfuttatni olyan szűrőkön, amelyek felvételt igényelnek, anélkül hogy a fájlrendszerhez nyúlnánk.

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

Létrehoz egy ImageIO adatfolyamot.

Ha a path egy karakterlánc, akkor egy file stream nyílik meg az adott elérési úton. A mode az alábbiak egyike kell legyen:

  • 'r' – meglévő fájl megnyitása olvasásra. A mágikus fejléc ellenőrzésre kerül, és a verzió (V1.0 / V1.1 / V2.0) rögzítésre kerül a version() általi használathoz.

  • 'w' – a fájl csonkolása / létrehozása és egy friss V2.0 mágikus fejléc kiírása. A képkockák minden write() híváskor hozzáfűződnek.

Ha a path egy 3-as számhármas (w, h, pixformat), akkor egy memory stream foglalódik le. A mode ekkor az előre lefoglalandó képkocka-szeletek egész száma. A puffer count darab (w, h, pixformat) képkockára van méretezve, és létrehozás után nem növekedhet. A pixformat az alábbiak egyike: image.BINARY, image.GRAYSCALE, image.RGB565, image.BAYER, image.YUV422, image.JPEG vagy image.PNG. A tömörített formátumoknál (image.JPEG, image.PNG) a szeletenkénti méret 2 bpp-vel becsült; a becslésnél nagyobb képkockák ValueError kivételt váltanak ki a write() időpontjában.

Vizsgálat

type() int

Visszaadja az adatfolyam háttértárát: FILE_STREAM file stream esetén, MEMORY_STREAM memory stream esetén.

is_closed() bool

True értéket ad vissza, ha a close() meghívásra került ezen az objektumon. Lezárás után az adatfolyam OSError("Stream closed") kivételt vált ki bármilyen további olvasás/írás/keresés esetén.

count() int

Visszaadja az adatfolyamban jelenleg tárolt képkockák számát. File streameknél ez nő, ahogy a write() képkockákat fűz hozzá; memory streameknél ez a konstruálás idején rögzített.

offset() int

Visszaadja az aktuális képkockaindexet. A read() és a write() növeli, a seek() visszaállítja.

version() int | None

Visszaadja a lemezre írt formátum verzióját file streameknél (10 a V1.0-hoz, 11 a V1.1-hez, 20 a V2.0-hoz). Memory streameknél None értéket ad vissza.

buffer_size() int | None

Visszaadja a szeletenkénti képpontpuffer méretét bájtban memory streameknél (a szeletméret mínusz a belső Image nyilvántartási fejléc). File streameknél None értéket ad vissza. Használd ezt a count() metódussal együtt annak ellenőrzésére, hogy egy adott képkockaméret elfér-e.

size() int

Visszaadja az adatfolyam által elfoglalt összes bájtot – file streameknél a lemezen lévő fájlméretet, memory streameknél pedig a teljes RAM-puffer méretét (count * per_slot_size, beleértve a szeletenkénti fejlécet is).

I/O

write(img: Image) ImageIO

Hozzáfűzi (file stream) vagy adott eltolásnál eltárolja (memory stream) az img képet, és eggyel előrelépteti a offset() értékét.

File streameknél a fájl nő, ahogy a képkockák hozzáfűződnek. Nem a fájl végén lévő eltolásnál való írás csonkolja a fájl maradékát, így a darabszám csökkenhet.

Memory streameknél a képkocka az aktuális szeletbe íródik; az utolsó szeleten túli írás EOFError("End of stream") kivételt vált ki, a buffer_size() méretnél nagyobb képkocka írása pedig ValueError("Invalid frame size") kivételt vált ki.

Visszaadja a self értéket, így a hívások láncba fűzhetők.

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

Beolvassa az aktuális offset() helyén lévő képkockát, előrelépteti az eltolást, és visszaadja az új Image képet. A write() lejátszási felét tükrözi.

copy_to_fb – ha True (alapértelmezett), a dekódolt képkocka a kamera képkocka-pufferébe kerül (ugyanoda, ahová egy csi.CSI.snapshot() érkezik), így a visszaadott Image rajzolható az IDE előnézetén keresztül. Ha False, a képkocka helyette a MicroPython kupacán foglalódik le.

loop (csak file streameknél) – ha True (alapértelmezett), az utolsó képkockán túli olvasás visszakeres az első képkockára, és folytatja. Ha False, a hívás None értéket ad vissza, amint a fájl végét eléri.

pause – ha True (alapértelmezett), a hívás blokkol, amíg az eredetileg rögzített képkockák közötti időköz le nem telik, így a lejátszás a felvétel natív képkockasebességén fut. Állítsd False értékre a lehető leggyorsabb lejátszáshoz.

seek(offset: int) ImageIO

Az offset képkockára mozgatja a offset() értékét. Az offset nemnegatív kell legyen; a memory stream eltolásoknak ezenfelül a count() értéknél kisebbnek kell lenniük.

A file stream keresések a fájlt képkockánként végigjárják az elejétől kezdve, mivel a képkocka-adatdarabok változó méretűek – nagy ugrásoknál O(offset) időre számíts.

Visszaadja a self értéket, így a hívások láncba fűzhetők.

sync() ImageIO

A függőben lévő írásokat lemezre üríti file streameknél (meghívja a mögöttes fájlrendszer sync műveletét). Memory streameknél nincs hatása.

Visszaadja a self értéket, így a hívások láncba fűzhetők.

close() None

Lezárja az adatfolyamot. Felszabadítja a memóriapuffert (memory streameknél) vagy lezárja a fájlt (file streameknél). A close() után az ImageIO objektum nem használható újra; a további műveletek OSError("Stream closed") kivételt váltanak ki. A close() kétszeri meghívásának nincs hatása.

Egy ImageIO objektum automatikusan is lezárul, amikor a szemétgyűjtő begyűjti (konstruáláskor véglegesítőt regisztrál).

Konstansok

FILE_STREAM: int

A type() által fájlalapú adatfolyamokra visszaadott érték.

MEMORY_STREAM: int

A type() által memóriában tárolt adatfolyamokra visszaadott érték.