class ImageIO -- objek ImageIO

Kelas ImageIO merekam dan memutar ulang aliran bingkai Image dalam format on-disk asli OpenMV. Satu aliran dapat menampung bingkai heterogen (format piksel / ukuran berbeda) dan merekam interval antar-bingkai untuk setiap bingkai sehingga pemutaran ulang dapat mereproduksi kecepatan bingkai aslinya.

Ada dua penyimpanan pendukung:

  • Aliran file -- bingkai dibaca dari / ditambahkan ke file di sistem file. File dimulai dengan header magic 16-byte OMV IMG STR Vx.y diikuti oleh potongan per-bingkai. Penulis saat ini menghasilkan V2.0; file V1.0 dan V1.1 yang lebih lama masih dapat dibaca.

  • Aliran memori -- bingkai dibaca dari / ditulis ke buffer RAM berukuran tetap yang dialokasikan saat konstruksi. Berguna untuk memproses bingkai melalui filter yang membutuhkan perekaman tanpa menyentuh sistem file.

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

Buat aliran ImageIO.

Jika path adalah string, aliran file dibuka di jalur tersebut. mode harus salah satu dari:

  • 'r' -- buka file yang ada untuk dibaca. Header magic divalidasi dan versinya (V1.0 / V1.1 / V2.0) dicatat untuk digunakan oleh version().

  • 'w' -- potong / buat file dan tulis header magic V2.0 baru. Bingkai ditambahkan pada setiap write().

Jika path adalah 3-tuple (w, h, pixformat), aliran memori dialokasikan. mode kemudian adalah jumlah slot bingkai integer yang akan dialokasikan sebelumnya. Buffer diukur untuk count bingkai dari (w, h, pixformat) dan tidak diizinkan untuk berkembang setelah pembuatan. pixformat adalah salah satu dari image.BINARY, image.GRAYSCALE, image.RGB565, image.BAYER, image.YUV422, image.JPEG, atau image.PNG. Untuk format terkompresi (image.JPEG, image.PNG) ukuran per-slot diperkirakan pada 2 bpp; bingkai yang lebih besar dari perkiraan akan memunculkan ValueError saat write().

Inspeksi

type() int

Kembalikan penyimpanan pendukung aliran: FILE_STREAM untuk aliran file, MEMORY_STREAM untuk aliran memori.

is_closed() bool

Kembalikan True jika close() telah dipanggil pada objek ini. Setelah ditutup, aliran akan memunculkan OSError("Stream closed") pada operasi baca/tulis/cari lebih lanjut.

count() int

Kembalikan jumlah bingkai yang saat ini tersimpan dalam aliran. Untuk aliran file, nilai ini bertambah saat write() menambahkan bingkai; untuk aliran memori, nilai ini tetap saat konstruksi.

offset() int

Kembalikan indeks bingkai saat ini. Ditambah oleh read() dan write(), direset oleh seek().

version() int | None

Kembalikan versi format on-disk untuk aliran file (10 untuk V1.0, 11 untuk V1.1, 20 untuk V2.0). Mengembalikan None untuk aliran memori.

buffer_size() int | None

Kembalikan ukuran buffer piksel per-slot dalam byte untuk aliran memori (ukuran slot dikurangi header pembukuan internal Image). Mengembalikan None untuk aliran file. Gunakan ini bersama dengan count() untuk memeriksa apakah ukuran bingkai tertentu akan muat.

size() int

Kembalikan total byte yang digunakan oleh aliran -- ukuran file di disk untuk aliran file, atau ukuran penuh buffer RAM (count * per_slot_size termasuk header per-slot) untuk aliran memori.

I/O

write(img: Image) ImageIO

Tambahkan (aliran file) atau simpan-di-offset (aliran memori) img dan majukan offset() satu langkah.

Untuk aliran file, file bertambah besar saat bingkai ditambahkan. Menulis pada offset non-akhir memotong sisa file sehingga count dapat mengecil.

Untuk aliran memori, bingkai ditulis ke slot saat ini; menulis melewati slot terakhir akan memunculkan EOFError("End of stream") dan menulis bingkai yang lebih besar dari buffer_size() akan memunculkan ValueError("Invalid frame size").

Mengembalikan self sehingga panggilan dapat dirantai.

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

Baca bingkai pada offset() saat ini, majukan offset, dan kembalikan Image baru. Mencerminkan sisi pemutaran dari write().

copy_to_fb -- ketika True (default) bingkai yang didekode ditempatkan di buffer bingkai kamera (tempat yang sama dengan csi.CSI.snapshot() mendarat), sehingga Image yang dikembalikan dapat digambar melalui pratinjau IDE. Ketika False bingkai dialokasikan di heap MicroPython.

loop (khusus aliran file) -- ketika True (default) membaca melewati bingkai terakhir akan kembali ke bingkai pertama dan melanjutkan. Ketika False panggilan mengembalikan None setelah akhir file tercapai.

pause -- ketika True (default) panggilan diblokir sampai interval antar-bingkai yang direkam telah berlalu, sehingga pemutaran berjalan pada kecepatan bingkai asli rekaman. Setel ke False untuk pemutaran secepat mungkin.

seek(offset: int) ImageIO

Pindahkan offset() ke bingkai offset. offset harus non-negatif; offset aliran memori juga harus kurang dari count().

Pencarian aliran file berjalan bingkai demi bingkai dari awal karena potongan bingkai berukuran variabel -- perkirakan waktu O(offset) untuk lompatan besar.

Mengembalikan self sehingga panggilan dapat dirantai.

sync() ImageIO

Siram tulisan yang tertunda ke disk untuk aliran file (memanggil sync sistem file yang mendasarinya). Tidak melakukan apa-apa untuk aliran memori.

Mengembalikan self sehingga panggilan dapat dirantai.

close() None

Tutup aliran. Melepaskan buffer memori (aliran memori) atau menutup file (aliran file). Setelah close() objek ImageIO tidak dapat digunakan kembali; operasi berikutnya akan memunculkan OSError("Stream closed"). Memanggil close() dua kali tidak melakukan apa-apa.

Sebuah ImageIO juga ditutup secara otomatis saat dikumpulkan oleh garbage collector (mendaftarkan finaliser saat konstruksi).

Konstanta

FILE_STREAM: int

Nilai yang dikembalikan oleh type() untuk aliran yang didukung file.

MEMORY_STREAM: int

Nilai yang dikembalikan oleh type() untuk aliran dalam memori.