class ImageIO -- ImageIO オブジェクト¶
ImageIO クラスは、OpenMV 独自のオンディスク形式で Image フレームのストリームを記録・再生します。1 つのストリームには異種のフレーム(異なるピクセル形式やサイズ)を保持でき、各フレームのフレーム間間隔も記録するため、再生時には元のフレームレートが再現されます。
バッキングストアには 2 種類があります。
ファイルストリーム -- フレームはファイルシステム上のファイルから読み込まれ、またはファイルへ追記されます。ファイルは 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()未満でなければなりません。フレームチャンクは可変サイズのため、ファイルストリームのシークは先頭からフレームを 1 つずつたどります。大きくジャンプする場合は O(offset) の時間を見込んでください。
呼び出しを連鎖できるよう
selfを返します。
定数¶