клас ImageIO – об’єкт ImageIO¶
Клас ImageIO записує та відтворює потоки кадрів Image у власному форматі OpenMV на диску. Один потік може містити різнорідні кадри (різні формати пікселів / розміри) і зберігає міжкадровий інтервал для кожного кадру, щоб відтворення відповідало оригінальній частоті кадрів.
Існує два типи сховища:
Файловий потік – кадри зчитуються з / додаються до файлу в файловій системі. Файл починається з 16-байтного магічного заголовка
OMV IMG STR Vx.y, після якого йдуть блоки даних для кожного кадру. Поточний модуль запису використовуєV2.0; старіші файлиV1.0таV1.1залишаються читабельними.Потік у пам’яті – кадри зчитуються з / записуються до буфера RAM фіксованого розміру, виділеного під час створення об’єкта. Корисно для обробки кадрів через фільтри, яким потрібен запис без звертання до файлової системи.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Створення об’єкта
ImageIO.Якщо
pathє рядком, файловий потік відкривається за вказаним шляхом.modeмає бути одним з:Якщо
pathє 3-кортежем(w, h, pixformat), виділяється потік у пам’яті.modeтоді є цілим числом – кількістю слотів для кадрів, що попередньо виділяються. Буфер розраховується наcountкадрів формату(w, h, pixformat)і не може розширюватися після створення.pixformat– одне зimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGабоimage.PNG. Для стиснутих форматів (image.JPEG,image.PNG) розмір слота оцінюється як 2 байти/піксель; кадри, більші за оцінку, викликаютьValueErrorпід час виконанняwrite().Огляд¶
- type() int¶
Повертає тип сховища потоку:
FILE_STREAMдля файлового потоку абоMEMORY_STREAMдля потоку в пам’яті.
- is_closed() bool¶
Повертає
True, якщо для цього об’єкта було викликаноclose(). Після закриття потік генеруєOSError("Stream closed")при будь-якій подальшій операції читання/запису/переміщення.
- count() int¶
Повертає кількість кадрів, що зберігаються в потоці на даний момент. Для файлових потоків це значення зростає при кожному додаванні кадру через
write(); для потоків у пам’яті воно фіксується під час створення.
- offset() int¶
Повертає поточний індекс кадру. Збільшується методами
read()таwrite(), скидається методомseek().
- version() int | None¶
Повертає версію формату файлу для файлових потоків (
10дляV1.0,11дляV1.1,20дляV2.0). ПовертаєNoneдля потоків у пам’яті.
Введення/виведення¶
- write(img: Image) ImageIO¶
Додає (файловий потік) або записує за зміщенням (потік у пам’яті) зображення
imgта збільшуєoffset()на одиницю.Для файлових потоків файл розростається при додаванні кадрів. Запис за зміщенням, відмінним від кінця файлу, обрізає решту файлу, тому кількість кадрів може зменшуватися.
Для потоків у пам’яті кадр записується в поточний слот; запис за межами останнього слота викликає
EOFError("End of stream"), а запис кадру, більшого заbuffer_size(), викликаєValueError("Invalid frame size").Повертає
self, що дозволяє об’єднувати виклики в ланцюжок.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Зчитує кадр за поточним
offset(), збільшує зміщення та повертає новий об’єктImage. Це зворотна операція доwrite().copy_to_fb– якщоTrue(за замовчуванням), декодований кадр розміщується в кадровому буфері камери (те саме місце, куди потрапляє результатcsi.CSI.snapshot()), тож поверненийImageможна відображати в попередньому перегляді IDE. ЯкщоFalse, кадр виділяється в купі MicroPython.loop(тільки для файлових потоків) – якщоTrue(за замовчуванням), після читання останнього кадру відбувається повернення на початок і продовження відтворення. ЯкщоFalse, виклик повертаєNoneпісля досягнення кінця файлу.pause– якщоTrue(за замовчуванням), виклик блокує виконання до закінчення оригінально записаного міжкадрового інтервалу, щоб відтворення відповідало оригінальній частоті кадрів. ВстановітьFalseдля максимально швидкого відтворення.
- seek(offset: int) ImageIO¶
Переміщує
offset()до кадруoffset.offsetмає бути невід’ємним; для потоків у пам’яті значення також має бути меншим заcount().Переміщення по файловому потоку відбувається покадрово з початку файлу, оскільки розміри блоків кадрів є змінними – очікуйте часу O(offset) для великих стрибків.
Повертає
self, що дозволяє об’єднувати виклики в ланцюжок.
- sync() ImageIO¶
Скидає очікуючі записи на диск для файлових потоків (викликає
syncфайлової системи). Для потоків у пам’яті є операцією без дій.Повертає
self, що дозволяє об’єднувати виклики в ланцюжок.
- close() None¶
Закриває потік. Звільняє буфер пам’яті (потоки в пам’яті) або закриває файл (файлові потоки). Після виклику
close()об’єктImageIOне може бути повторно використаний; подальші операції викликаютьOSError("Stream closed"). Повторний викликclose()є операцією без дій.Об’єкт
ImageIOтакож закривається автоматично при збиранні сміттям (він реєструє фіналізатор під час створення).
Константи¶