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.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¶