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.ygevolgd door chunks per frame. De huidige writer schrijftV2.0; oudereV1.0- enV1.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
patheen string is, wordt een file stream geopend op dat pad.modemoet een van de volgende zijn:Als
patheen 3-tuple(w, h, pixformat)is, wordt een memory stream toegewezen.modeis dan het gehele aantal frameslots dat vooraf moet worden gereserveerd. De buffer wordt gedimensioneerd voorcountframes van(w, h, pixformat)en mag na het aanmaken niet groeien.pixformatis een vanimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGofimage.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 eenValueErrortijdenswrite().Inspectie¶
- type() int¶
Retourneer de backing store van de stream:
FILE_STREAMvoor een file stream,MEMORY_STREAMvoor een memory stream.
- is_closed() bool¶
Retourneer
Truealsclose()op dit object is aangeroepen. Eenmaal gesloten veroorzaakt de streamOSError("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()enwrite(), gereset doorseek().
- version() int | None¶
Retourneer de schijfformaatversie voor file streams (
10voorV1.0,11voorV1.1,20voorV2.0). RetourneertNonevoor memory streams.
I/O¶
- write(img: Image) ImageIO¶
Voeg toe (file stream) of sla op-offset op (memory stream)
imgen verhoogoffset()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 danbuffer_size()veroorzaaktValueError("Invalid frame size").Retourneert
selfzodat 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 nieuweImage. Spiegelt de afspeelhelft vanwrite().copy_to_fb– wanneerTrue(standaard) wordt het gedecodeerde frame in de camera-framebuffer geplaatst (dezelfde plek waar eencsi.CSI.snapshot()terechtkomt), zodat de geretourneerdeImagevia de IDE-preview tekenbaar is. WanneerFalsewordt het frame in plaats daarvan op de MicroPython-heap toegewezen.loop(alleen file streams) – wanneerTrue(standaard) springt het lezen voorbij het laatste frame terug naar het eerste frame en gaat door. WanneerFalseretourneert de aanroepNonezodra het einde van het bestand is bereikt.pause– wanneerTrue(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 opFalsevoor zo snel mogelijk afspelen.
- seek(offset: int) ImageIO¶
Verplaats
offset()naar frameoffset.offsetmoet niet-negatief zijn; offsets van memory streams moeten ook kleiner zijn dancount().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
selfzodat aanroepen aan elkaar geketend kunnen worden.
- sync() ImageIO¶
Spoel wachtende schrijfbewerkingen naar schijf voor file streams (roept de onderliggende
syncvan het bestandssysteem aan). Doet niets voor memory streams.Retourneert
selfzodat 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 hetImageIO-object niet meer worden hergebruikt; volgende bewerkingen veroorzakenOSError("Stream closed").close()tweemaal aanroepen doet niets.Een
ImageIOwordt ook automatisch gesloten wanneer het door garbage collection wordt opgeruimd (het registreert bij constructie een finaliser).
Constanten¶