třída ImageIO – objekt ImageIO¶
Třída ImageIO zaznamenává a přehrává streamy snímků Image v nativním diskovém formátu OpenMV. Jeden stream může obsahovat heterogenní snímky (různé pixelové formáty / velikosti) a pro každý z nich zaznamenává interval mezi snímky, takže přehrávání obnoví původní snímkovou frekvenci.
Existují dva typy úložiště:
Souborový stream – snímky se čtou ze souboru na souborovém systému, případně se k němu připojují. Soubor začíná 16bajtovou magickou hlavičkou
OMV IMG STR Vx.ynásledovanou bloky jednotlivých snímků. Aktuální zapisovač generujeV2.0; starší souboryV1.0aV1.1jsou stále čitelné.Paměťový stream – snímky se čtou z RAM bufferu pevné velikosti alokovaného při vytvoření, případně se do něj zapisují. Užitečné pro průchod snímků filtry, které potřebují záznam, bez zásahu do souborového systému.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Vytvoří stream
ImageIO.Pokud je
pathřetězec, otevře se souborový stream na dané cestě.modemusí být jedna z hodnot:Pokud je
path3prvková n-tice(w, h, pixformat), alokuje se paměťový stream.modeje pak celé číslo udávající počet slotů pro snímky, které se mají předalokovat. Buffer je dimenzován procountsnímků o rozměrech(w, h, pixformat)a po vytvoření se nesmí zvětšovat.pixformatje jedna z hodnotimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGneboimage.PNG. U komprimovaných formátů (image.JPEG,image.PNG) se velikost jednoho slotu odhaduje na 2 bpp; snímky větší než tento odhad vyvolají při voláníwrite()výjimkuValueError.Zjišťování informací¶
- type() int¶
Vrátí typ úložiště streamu:
FILE_STREAMpro souborový stream,MEMORY_STREAMpro paměťový stream.
- is_closed() bool¶
Vrátí
True, pokud byla na tomto objektu zavolána metodaclose(). Po uzavření vyvolá stream při jakékoli další operaci čtení/zápisu/posunu výjimkuOSError("Stream closed").
- count() int¶
Vrátí počet snímků aktuálně uložených ve streamu. U souborových streamů tento počet roste, jak
write()připojuje snímky; u paměťových streamů je pevně dán při vytvoření.
- offset() int¶
Vrátí aktuální index snímku. Zvyšuje se voláním
read()awrite(), resetuje se volánímseek().
- version() int | None¶
Vrátí verzi diskového formátu pro souborové streamy (
10proV1.0,11proV1.1,20proV2.0). Pro paměťové streamy vrátíNone.
Vstup/výstup¶
- write(img: Image) ImageIO¶
Připojí (souborový stream) nebo uloží na pozici (paměťový stream)
imga posuneoffset()o jedna.U souborových streamů soubor roste, jak se snímky připojují. Zápis na pozici, která není koncem, zkrátí zbytek souboru, takže počet může klesnout.
U paměťových streamů se snímek zapíše do aktuálního slotu; zápis za poslední slot vyvolá
EOFError("End of stream")a zápis snímku většího nežbuffer_size()vyvoláValueError("Invalid frame size").Vrátí
self, takže lze volání řetězit.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Přečte snímek na aktuální pozici
offset(), posune pozici a vrátí novýImage. Zrcadlí přehrávací polovinu metodywrite().copy_to_fb– když jeTrue(výchozí), umístí se dekódovaný snímek do snímkového bufferu (frame buffer) kamery (na stejné místo, kam přistávácsi.CSI.snapshot()), takže vrácenýImageje možné vykreslit v náhledu IDE. Když jeFalse, snímek se místo toho alokuje na haldě MicroPythonu.loop(pouze souborové streamy) – když jeTrue(výchozí), čtení za poslední snímek se vrátí na první snímek a pokračuje. Když jeFalse, volání po dosažení konce souboru vrátíNone.pause– když jeTrue(výchozí), volání blokuje, dokud neuplyne původně zaznamenaný interval mezi snímky, takže přehrávání běží nativní snímkovou frekvencí záznamu. Nastavte naFalsepro co nejrychlejší možné přehrávání.
- seek(offset: int) ImageIO¶
Přesune
offset()na snímekoffset.offsetmusí být nezáporný; pozice u paměťových streamů musí být navíc menší nežcount().Posuny u souborových streamů procházejí soubor snímek po snímku od začátku, protože bloky snímků mají proměnnou velikost – u velkých skoků počítejte s časem O(offset).
Vrátí
self, takže lze volání řetězit.
- sync() ImageIO¶
Vyprázdní čekající zápisy na disk u souborových streamů (volá podkladovou funkci souborového systému
sync). U paměťových streamů nic nedělá.Vrátí
self, takže lze volání řetězit.
- close() None¶
Uzavře stream. Uvolní paměťový buffer (paměťové streamy) nebo zavře soubor (souborové streamy). Po volání
close()nelze objektImageIOznovu použít; následné operace vyvolajíOSError("Stream closed"). Dvojí voláníclose()nic nedělá.ImageIOse automaticky uzavře také při uvolnění garbage collectorem (při vytvoření registruje finalizér).
Konstanty¶