class ImageIO – ImageIO 객체¶
ImageIO 클래스는 OpenMV의 기본 온디스크 포맷으로 Image 프레임의 스트림을 기록하고 재생합니다. 하나의 스트림은 서로 다른 종류의 프레임(서로 다른 픽셀 포맷/크기)을 담을 수 있으며, 각 프레임의 프레임 간 간격을 기록하므로 재생 시 원래의 프레임 레이트가 그대로 재현됩니다.
두 가지 백킹 스토어가 있습니다:
파일 스트림 – 프레임을 파일 시스템의 파일에서 읽거나 파일에 추가합니다. 파일은 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는 미리 할당할 프레임 슬롯 개수 정수입니다. 버퍼는(w, h, pixformat)프레임count개에 맞게 크기가 정해지며 생성 후에는 확장할 수 없습니다.pixformat은image.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEG,image.PNG중 하나입니다. 압축 포맷(image.JPEG,image.PNG)의 경우 슬롯당 크기가 2 bpp로 추정되며, 추정치보다 큰 프레임은write()시점에ValueError를 발생시킵니다.조사¶
- type() int¶
스트림의 백킹 스토어를 반환합니다. 파일 스트림이면
FILE_STREAM, 메모리 스트림이면MEMORY_STREAM입니다.
- is_closed() bool¶
이 객체에 대해
close()가 호출되었으면True를 반환합니다. 일단 닫히면 스트림은 이후의 모든 읽기/쓰기/탐색에서OSError("Stream closed")를 발생시킵니다.
- count() int¶
스트림에 현재 저장된 프레임 수를 반환합니다. 파일 스트림의 경우
write()가 프레임을 추가함에 따라 이 값이 늘어나며, 메모리 스트림의 경우 생성 시점에 고정됩니다.
- version() int | None¶
파일 스트림의 온디스크 포맷 버전을 반환합니다(
V1.0은10,V1.1은11,V2.0은20). 메모리 스트림의 경우None을 반환합니다.
I/O¶
- write(img: Image) ImageIO¶
img를 추가(파일 스트림)하거나 오프셋 위치에 저장(메모리 스트림)하고offset()을 1만큼 진행시킵니다.파일 스트림의 경우 프레임이 추가됨에 따라 파일이 커집니다. 끝이 아닌 오프셋에 쓰면 파일의 나머지 부분이 잘려서 카운트가 줄어들 수 있습니다.
메모리 스트림의 경우 프레임이 현재 슬롯에 기록됩니다. 마지막 슬롯을 넘어서 쓰면
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를 반환합니다.
상수¶