класс ImageIO – объект ImageIO¶
Класс ImageIO записывает и воспроизводит потоки кадров Image во встроенном дисковом формате OpenMV. Один поток может содержать разнородные кадры (с разными форматами пикселей / размерами) и записывает межкадровый интервал для каждого из них, поэтому при воспроизведении восстанавливается исходная частота кадров.
Существует два хранилища:
Файловый поток – кадры читаются из файла в файловой системе или дописываются в него. Файл начинается с 16-байтного магического заголовка
OMV IMG STR Vx.y, за которым следуют покадровые фрагменты. Текущий писатель создаётV2.0; более старые файлыV1.0иV1.1по-прежнему доступны для чтения.Поток в памяти – кадры читаются из буфера ОЗУ фиксированного размера, выделяемого при создании, или записываются в него. Полезно для прогона кадров через фильтры, которым нужна запись, без обращения к файловой системе.
- 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 bpp; кадры, превышающие эту оценку, вызывают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также закрывается автоматически при сборке мусора (при создании он регистрирует финализатор).
Константы¶