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.ymágikus fejléccel kezdődik, amelyet képkockánkénti adatdarabok követnek. A jelenlegi íróV2.0formátumot ír; a régebbiV1.0ésV1.1fá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
ImageIOadatfolyamot.Ha a
pathegy karakterlánc, akkor egy file stream nyílik meg az adott elérési úton. Amodeaz alábbiak egyike kell legyen:Ha a
pathegy 3-as számhármas(w, h, pixformat), akkor egy memory stream foglalódik le. Amodeekkor az előre lefoglalandó képkocka-szeletek egész száma. A puffercountdarab(w, h, pixformat)képkockára van méretezve, és létrehozás után nem növekedhet. Apixformataz alábbiak egyike:image.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGvagyimage.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ákValueErrorkivételt váltanak ki awrite()időpontjában.Vizsgálat¶
- type() int¶
Visszaadja az adatfolyam háttértárát:
FILE_STREAMfile stream esetén,MEMORY_STREAMmemory stream esetén.
- is_closed() bool¶
Trueértéket ad vissza, ha aclose()meghívásra került ezen az objektumon. Lezárás után az adatfolyamOSError("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 awrite()növeli, aseek()visszaállítja.
- version() int | None¶
Visszaadja a lemezre írt formátum verzióját file streameknél (
10aV1.0-hoz,11aV1.1-hez,20aV2.0-hoz). Memory streameknélNoneé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ő
Imagenyilvántartási fejléc). File streameknélNoneértéket ad vissza. Használd ezt acount()metódussal együtt annak ellenőrzésére, hogy egy adott képkockaméret elfér-e.
I/O¶
- write(img: Image) ImageIO¶
Hozzáfűzi (file stream) vagy adott eltolásnál eltárolja (memory stream) az
imgképet, és eggyel előrelépteti aoffset()é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, abuffer_size()méretnél nagyobb képkocka írása pedigValueError("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 újImageképet. Awrite()lejátszási felét tükrözi.copy_to_fb– haTrue(alapértelmezett), a dekódolt képkocka a kamera képkocka-pufferébe kerül (ugyanoda, ahová egycsi.CSI.snapshot()érkezik), így a visszaadottImagerajzolható az IDE előnézetén keresztül. HaFalse, a képkocka helyette a MicroPython kupacán foglalódik le.loop(csak file streameknél) – haTrue(alapértelmezett), az utolsó képkockán túli olvasás visszakeres az első képkockára, és folytatja. HaFalse, a hívásNoneértéket ad vissza, amint a fájl végét eléri.pause– haTrue(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ítsdFalseértékre a lehető leggyorsabb lejátszáshoz.
- seek(offset: int) ImageIO¶
Az
offsetképkockára mozgatja aoffset()értékét. Azoffsetnemnegatív kell legyen; a memory stream eltolásoknak ezenfelül acount()é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
syncmű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 azImageIOobjektum nem használható újra; a további műveletekOSError("Stream closed")kivételt váltanak ki. Aclose()kétszeri meghívásának nincs hatása.Egy
ImageIOobjektum automatikusan is lezárul, amikor a szemétgyűjtő begyűjti (konstruáláskor véglegesítőt regisztrál).
Konstansok¶