class ImageIO – ImageIO nesnesi

ImageIO sınıfı, OpenMV’nin yerel disk üzeri formatında Image çerçevelerinden oluşan akışları kaydeder ve oynatır. Tek bir akış heterojen çerçeveler (farklı piksel formatları / boyutlar) tutabilir ve her biri için çerçeveler arası aralığı kaydeder; böylece oynatma sırasında orijinal çerçeve hızı yeniden oluşturulur.

İki yedekleme deposu vardır:

  • Dosya akışı – çerçeveler dosya sistemindeki bir dosyadan okunur / dosyaya eklenir. Dosya, 16 baytlık OMV IMG STR Vx.y sihirli başlığıyla başlar ve ardından çerçeve başına yığınlar gelir. Mevcut yazıcı V2.0 üretir; eski V1.0 ve V1.1 dosyaları hâlâ okunabilir.

  • Bellek akışı – çerçeveler, oluşturma zamanında ayrılan sabit boyutlu bir RAM arabelleğinden okunur / arabelleğe yazılır. Dosya sistemine dokunmadan bir kayıt gerektiren filtreler aracılığıyla çerçeveleri gidip gelmek (round-trip) için kullanışlıdır.

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

Bir ImageIO akışı oluşturur.

path bir string ise, o yolda bir dosya akışı açılır. mode şunlardan biri olmalıdır:

  • 'r' – okumak için mevcut bir dosyayı açar. Sihirli başlık doğrulanır ve sürüm (V1.0 / V1.1 / V2.0) version() tarafından kullanılmak üzere kaydedilir.

  • 'w' – dosyayı kısaltır / oluşturur ve yeni bir V2.0 sihirli başlığı yazar. Her write() çağrısında çerçeveler eklenir.

path bir 3’lü tuple (w, h, pixformat) ise, bir bellek akışı ayrılır. Bu durumda mode, önceden ayrılacak çerçeve yuvası sayısını veren tam sayıdır. Arabellek, (w, h, pixformat) boyutunda count çerçeve için boyutlandırılır ve oluşturulduktan sonra büyümesine izin verilmez. pixformat şunlardan biridir: image.BINARY, image.GRAYSCALE, image.RGB565, image.BAYER, image.YUV422, image.JPEG veya image.PNG. Sıkıştırılmış formatlar (image.JPEG, image.PNG) için yuva başına boyut 2 bpp olarak tahmin edilir; tahminden büyük çerçeveler write() sırasında ValueError yükseltir.

İnceleme

type() int

Akışın yedekleme deposunu döndürür: dosya akışı için FILE_STREAM, bellek akışı için MEMORY_STREAM.

is_closed() bool

Bu nesnede close() çağrıldıysa True döndürür. Kapatıldıktan sonra akış, sonraki tüm okuma/yazma/arama işlemlerinde OSError("Stream closed") yükseltir.

count() int

Akışta o anda depolanan çerçeve sayısını döndürür. Dosya akışlarında bu değer, write() çerçeveler ekledikçe büyür; bellek akışlarında ise oluşturma zamanında sabittir.

offset() int

Geçerli çerçeve indeksini döndürür. read() ve write() ile artırılır, seek() ile sıfırlanır.

version() int | None

Dosya akışları için disk üzeri format sürümünü döndürür (V1.0 için 10, V1.1 için 11, V2.0 için 20). Bellek akışları için None döndürür.

buffer_size() int | None

Bellek akışları için yuva başına piksel arabelleği boyutunu bayt cinsinden döndürür (yuva boyutundan dahili Image defter tutma başlığı çıkarılmış olarak). Dosya akışları için None döndürür. Belirli bir çerçeve boyutunun sığıp sığmayacağını kontrol etmek için bunu count() ile birlikte kullanın.

size() int

Akışın tükettiği toplam baytı döndürür – dosya akışları için diskteki dosya boyutu, bellek akışları için ise tam RAM arabelleği boyutu (yuva başına başlık dahil count * per_slot_size).

G/Ç

write(img: Image) ImageIO

img‘yi ekler (dosya akışı) veya geçerli ofsette depolar (bellek akışı) ve offset() değerini bir artırır.

Dosya akışlarında, çerçeveler eklendikçe dosya büyür. Sonda olmayan bir ofsette yazmak, dosyanın geri kalanını kısaltır; böylece sayım küçülebilir.

Bellek akışlarında çerçeve geçerli yuvaya yazılır; son yuvanın ötesine yazmak EOFError("End of stream") ve buffer_size() değerinden büyük bir çerçeve yazmak ValueError("Invalid frame size") yükseltir.

Çağrıların zincirlenebilmesi için self döndürür.

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

Geçerli offset() konumundaki çerçeveyi okur, ofseti artırır ve yeni Image‘i döndürür. write()‘in oynatma yarısını yansıtır.

copy_to_fbTrue olduğunda (varsayılan), kodu çözülen çerçeve kamera çerçeve arabelleğine (frame buffer) yerleştirilir (csi.CSI.snapshot()‘ın indiği yerle aynı yer), böylece döndürülen Image IDE önizlemesi üzerinden çizilebilir. False olduğunda çerçeve bunun yerine MicroPython yığınına (heap) ayrılır.

loop (yalnızca dosya akışları) – True olduğunda (varsayılan), son çerçevenin ötesini okumak ilk çerçeveye geri döner ve devam eder. False olduğunda, dosyanın sonuna ulaşıldığında çağrı None döndürür.

pauseTrue olduğunda (varsayılan), çağrı, başlangıçta kaydedilen çerçeveler arası aralık geçene kadar bloklanır; böylece oynatma kaydın yerel çerçeve hızında çalışır. Mümkün olduğunca hızlı oynatma için False olarak ayarlayın.

seek(offset: int) ImageIO

offset() değerini offset çerçevesine taşır. offset negatif olmamalıdır; bellek akışı ofsetleri ayrıca count() değerinden küçük olmalıdır.

Çerçeve yığınları değişken boyutlu olduğundan, dosya akışı aramaları dosyayı baştan başlayarak çerçeve çerçeve dolaşır – büyük atlamalarda O(offset) süre bekleyin.

Çağrıların zincirlenebilmesi için self döndürür.

sync() ImageIO

Dosya akışları için bekleyen yazmaları diske boşaltır (alttaki dosya sisteminin sync işlemini çağırır). Bellek akışları için işlem yapmaz.

Çağrıların zincirlenebilmesi için self döndürür.

close() None

Akışı kapatır. Bellek arabelleğini serbest bırakır (bellek akışları) veya dosyayı kapatır (dosya akışları). close() çağrıldıktan sonra ImageIO nesnesi yeniden kullanılamaz; sonraki işlemler OSError("Stream closed") yükseltir. close() çağrısını iki kez yapmak işlem yapmaz.

Bir ImageIO, çöp toplandığında da otomatik olarak kapatılır (oluşturma sırasında bir sonlandırıcı kaydeder).

Sabitler

FILE_STREAM: int

Dosya destekli akışlar için type() tarafından döndürülen değer.

MEMORY_STREAM: int

Bellek içi akışlar için type() tarafından döndürülen değer.