class ImageIO – ImageIO-object

De ImageIO-klasse neemt streams van Image-frames op en speelt ze af in OpenMV’s eigen schijfformaat. Een enkele stream kan heterogene frames bevatten (verschillende pixelformaten / -afmetingen) en registreert voor elk frame het interval tussen frames, zodat de oorspronkelijke framesnelheid bij het afspelen wordt nagebootst.

Er zijn twee backing stores:

  • File stream – frames worden gelezen uit / toegevoegd aan een bestand op het bestandssysteem. Het bestand begint met een 16-byte magic header OMV IMG STR Vx.y gevolgd door chunks per frame. De huidige writer schrijft V2.0; oudere V1.0- en V1.1-bestanden zijn nog steeds leesbaar.

  • Memory stream – frames worden gelezen uit / geschreven naar een RAM-buffer met vaste grootte die bij constructie wordt toegewezen. Handig om frames door filters te halen die een opname nodig hebben zonder het bestandssysteem aan te raken.

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

Maak een ImageIO-stream aan.

Als path een string is, wordt een file stream geopend op dat pad. mode moet een van de volgende zijn:

  • 'r' – open een bestaand bestand om te lezen. De magic header wordt gevalideerd en de versie (V1.0 / V1.1 / V2.0) wordt geregistreerd voor gebruik door version().

  • 'w' – maak het bestand leeg / aan en schrijf een verse V2.0 magic header. Frames worden bij elke write() toegevoegd.

Als path een 3-tuple (w, h, pixformat) is, wordt een memory stream toegewezen. mode is dan het gehele aantal frameslots dat vooraf moet worden gereserveerd. De buffer wordt gedimensioneerd voor count frames van (w, h, pixformat) en mag na het aanmaken niet groeien. pixformat is een van image.BINARY, image.GRAYSCALE, image.RGB565, image.BAYER, image.YUV422, image.JPEG of image.PNG. Voor de gecomprimeerde formaten (image.JPEG, image.PNG) wordt de grootte per slot geschat op 2 bpp; frames die groter zijn dan de schatting veroorzaken een ValueError tijdens write().

Inspectie

type() int

Retourneer de backing store van de stream: FILE_STREAM voor een file stream, MEMORY_STREAM voor een memory stream.

is_closed() bool

Retourneer True als close() op dit object is aangeroepen. Eenmaal gesloten veroorzaakt de stream OSError("Stream closed") bij elke verdere lees-/schrijf-/seek-bewerking.

count() int

Retourneer het aantal frames dat momenteel in de stream is opgeslagen. Voor file streams groeit dit naarmate write() frames toevoegt; voor memory streams is dit vast bij constructie.

offset() int

Retourneer de huidige frame-index. Verhoogd door read() en write(), gereset door seek().

version() int | None

Retourneer de schijfformaatversie voor file streams (10 voor V1.0, 11 voor V1.1, 20 voor V2.0). Retourneert None voor memory streams.

buffer_size() int | None

Retourneer de grootte van de pixelbuffer per slot in bytes voor memory streams (de slotgrootte minus de interne Image-administratieheader). Retourneert None voor file streams. Gebruik dit samen met count() om te controleren of een bepaalde framegrootte past.

size() int

Retourneer het totale aantal bytes dat door de stream wordt verbruikt – de bestandsgrootte op schijf voor file streams, of de volledige grootte van de RAM-buffer (count * per_slot_size inclusief de header per slot) voor memory streams.

I/O

write(img: Image) ImageIO

Voeg toe (file stream) of sla op-offset op (memory stream) img en verhoog offset() met één.

Voor file streams groeit het bestand naarmate frames worden toegevoegd. Schrijven op een offset die niet het einde is, kapt de rest van het bestand af, zodat de count kan afnemen.

Voor memory streams wordt het frame in het huidige slot geschreven; schrijven voorbij het laatste slot veroorzaakt EOFError("End of stream") en het schrijven van een frame dat groter is dan buffer_size() veroorzaakt ValueError("Invalid frame size").

Retourneert self zodat aanroepen aan elkaar geketend kunnen worden.

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

Lees het frame op de huidige offset(), verhoog de offset en retourneer de nieuwe Image. Spiegelt de afspeelhelft van write().

copy_to_fb – wanneer True (standaard) wordt het gedecodeerde frame in de camera-framebuffer geplaatst (dezelfde plek waar een csi.CSI.snapshot() terechtkomt), zodat de geretourneerde Image via de IDE-preview tekenbaar is. Wanneer False wordt het frame in plaats daarvan op de MicroPython-heap toegewezen.

loop (alleen file streams) – wanneer True (standaard) springt het lezen voorbij het laatste frame terug naar het eerste frame en gaat door. Wanneer False retourneert de aanroep None zodra het einde van het bestand is bereikt.

pause – wanneer True (standaard) blokkeert de aanroep totdat het oorspronkelijk opgenomen interval tussen frames is verstreken, zodat het afspelen op de oorspronkelijke framesnelheid van de opname verloopt. Zet op False voor zo snel mogelijk afspelen.

seek(offset: int) ImageIO

Verplaats offset() naar frame offset. offset moet niet-negatief zijn; offsets van memory streams moeten ook kleiner zijn dan count().

Seeks in file streams lopen het bestand frame voor frame door vanaf het begin, omdat framechunks variabele grootte hebben – verwacht O(offset)-tijd voor grote sprongen.

Retourneert self zodat aanroepen aan elkaar geketend kunnen worden.

sync() ImageIO

Spoel wachtende schrijfbewerkingen naar schijf voor file streams (roept de onderliggende sync van het bestandssysteem aan). Doet niets voor memory streams.

Retourneert self zodat aanroepen aan elkaar geketend kunnen worden.

close() None

Sluit de stream. Geeft de geheugenbuffer vrij (memory streams) of sluit het bestand (file streams). Na close() kan het ImageIO-object niet meer worden hergebruikt; volgende bewerkingen veroorzaken OSError("Stream closed"). close() tweemaal aanroepen doet niets.

Een ImageIO wordt ook automatisch gesloten wanneer het door garbage collection wordt opgeruimd (het registreert bij constructie een finaliser).

Constanten

FILE_STREAM: int

Waarde geretourneerd door type() voor streams met een bestand als backing store.

MEMORY_STREAM: int

Waarde geretourneerd door type() voor streams in het geheugen.