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.ydiikuti oleh potongan per-bingkai. Penulis saat ini menghasilkanV2.0; fileV1.0danV1.1yang 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
pathadalah string, aliran file dibuka di jalur tersebut.modeharus salah satu dari:Jika
pathadalah 3-tuple(w, h, pixformat), aliran memori dialokasikan.modekemudian adalah jumlah slot bingkai integer yang akan dialokasikan sebelumnya. Buffer diukur untukcountbingkai dari(w, h, pixformat)dan tidak diizinkan untuk berkembang setelah pembuatan.pixformatadalah salah satu dariimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEG, atauimage.PNG. Untuk format terkompresi (image.JPEG,image.PNG) ukuran per-slot diperkirakan pada 2 bpp; bingkai yang lebih besar dari perkiraan akan memunculkanValueErrorsaatwrite().Inspeksi#
- type() int#
Kembalikan penyimpanan pendukung aliran:
FILE_STREAMuntuk aliran file,MEMORY_STREAMuntuk aliran memori.
- is_closed() bool#
Kembalikan
Truejikaclose()telah dipanggil pada objek ini. Setelah ditutup, aliran akan memunculkanOSError("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()danwrite(), direset olehseek().
- version() int | None#
Kembalikan versi format on-disk untuk aliran file (
10untukV1.0,11untukV1.1,20untukV2.0). MengembalikanNoneuntuk aliran memori.
I/O#
- write(img: Image) ImageIO#
Tambahkan (aliran file) atau simpan-di-offset (aliran memori)
imgdan majukanoffset()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 daribuffer_size()akan memunculkanValueError("Invalid frame size").Mengembalikan
selfsehingga 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 kembalikanImagebaru. Mencerminkan sisi pemutaran dariwrite().copy_to_fb-- ketikaTrue(default) bingkai yang didekode ditempatkan di buffer bingkai kamera (tempat yang sama dengancsi.CSI.snapshot()mendarat), sehinggaImageyang dikembalikan dapat digambar melalui pratinjau IDE. KetikaFalsebingkai dialokasikan di heap MicroPython.Bingkai dikirim ke pratinjau IDE ketika
read()berikutnya (atau pemuatancopy_to_fblainnya) menimpa buffer bingkai, sehingga apa pun yang digambar pada citra yang dikembalikan di antara pembacaan akan ditampilkan. PanggilImage.flush()untuk menampilkan bingkai terakhir dari sebuah stream.loop(khusus aliran file) -- ketikaTrue(default) membaca melewati bingkai terakhir akan kembali ke bingkai pertama dan melanjutkan. KetikaFalsepanggilan mengembalikanNonesetelah akhir file tercapai.pause-- ketikaTrue(default) panggilan diblokir sampai interval antar-bingkai yang direkam telah berlalu, sehingga pemutaran berjalan pada kecepatan bingkai asli rekaman. Setel keFalseuntuk pemutaran secepat mungkin.
- seek(offset: int) ImageIO#
Pindahkan
offset()ke bingkaioffset.offsetharus non-negatif; offset aliran memori juga harus kurang daricount().Pencarian aliran file berjalan bingkai demi bingkai dari awal karena potongan bingkai berukuran variabel -- perkirakan waktu O(offset) untuk lompatan besar.
Mengembalikan
selfsehingga panggilan dapat dirantai.
- sync() ImageIO#
Siram tulisan yang tertunda ke disk untuk aliran file (memanggil
syncsistem file yang mendasarinya). Tidak melakukan apa-apa untuk aliran memori.Mengembalikan
selfsehingga panggilan dapat dirantai.
- close() None#
Tutup aliran. Melepaskan buffer memori (aliran memori) atau menutup file (aliran file). Setelah
close()objekImageIOtidak dapat digunakan kembali; operasi berikutnya akan memunculkanOSError("Stream closed"). Memanggilclose()dua kali tidak melakukan apa-apa.Sebuah
ImageIOjuga ditutup secara otomatis saat dikumpulkan oleh garbage collector (mendaftarkan finaliser saat konstruksi).
Konstanta#