fir --- 熱センサードライバー(fir == 遠赤外線)¶
fir モジュールは、OpenMV Cam に I2C 経由で接続された遠赤外線(FIR)サーモパイルアレイを駆動します。8x8、16x4、16x12、32x24 のセンサーがサポートされています(このページ末尾の定数を参照してください)。各フレームはピクセルごとの摂氏温度を返し、snapshot() を使って単独の熱画像としてレンダリングするか、draw_ir() を使って CSI センサーからの可視光フレームに合成できます。通常は image.PALETTE_RAINBOW や image.PALETTE_IRONBOW などのカラーパレットを介して行います。
使用例:
import csi
import fir
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
fir.init()
while True:
img = csi0.snapshot()
ta, ir, to_min, to_max = fir.read_ir()
fir.draw_ir(img, ir)
print("====================")
print("Ambient temperature: %0.2f" % ta)
print("Min temperature seen: %0.2f" % to_min)
print("Max temperature seen: %0.2f" % to_max)
関数¶
- fir.init(type: int = -1, refresh: int | None = None, resolution: int | None = None) None¶
接続された熱センサーを初期化します。
typeは熱センサーの種類を示します:fir.FIR_SHIELD: 16x4 ピクセル(MLX90621)。fir.FIR_MLX90621: 16x4 ピクセル。fir.FIR_MLX90640: 32x24 ピクセル。fir.FIR_MLX90641: 16x12 ピクセル。fir.FIR_AMG8833: 8x8 ピクセル。
デフォルトでは
typeは-1で、この場合fir.init()は I2C アドレスに基づいて接続された熱センサーを自動的にスキャンして初期化します。fir.FIR_MLX90640とfir.FIR_MLX90641は同じ I2C アドレスを共有するため、後者を明示的に初期化するにはtypeにfir.FIR_MLX90641を渡す必要があることに注意してください。refreshは熱センサーのリフレッシュレート(Hz)です:fir.FIR_MLX90621: デフォルトは 64 Hz。1、2、4、8、16、32、64、128、256、512 Hz のいずれかを指定できます。fir.FIR_MLX90640: デフォルトは 32 Hz。1、2、4、8、16、32、64 Hz のいずれかを指定できます。fir.FIR_MLX90641: デフォルトは 32 Hz。1、2、4、8、16、32、64 Hz のいずれかを指定できます。fir.FIR_AMG8833: 10 Hz 固定。
リフレッシュレートを上げると精度が下がり、逆も同様です。
resolutionは熱センサーの測定分解能(ビット)です:fir.FIR_MLX90621: デフォルトは 18。15、16、17、18 のいずれかを指定できます。fir.FIR_MLX90640: デフォルトは 19。16、17、18、19 のいずれかを指定できます。fir.FIR_MLX90641: デフォルトは 19。16、17、18、19 のいずれかを指定できます。fir.FIR_AMG8833: 12 固定。
解像度を上げると最大温度範囲が狭くなり、逆も同様です。
- fir.type() int¶
使用中の熱センサーの種類を返します。
fir.FIR_MLX90621、fir.FIR_MLX90640、fir.FIR_MLX90641、fir.FIR_AMG8833のいずれかです。
- fir.refresh() int¶
fir.init()の呼び出し時に設定された現在のリフレッシュレート(Hz)を返します。
- fir.resolution() int¶
fir.init()の呼び出し時に設定された現在の分解能(ビット)を返します。
- fir.read_ir(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = -1) Tuple[float, List[float], float, float]¶
(ta, ir, to_min, to_max)の4要素タプルを返します。これは周囲温度、width * height個のフラットな浮動小数点温度リスト、観測された最低温度、観測された最高温度を含みます。すべての値は摂氏です。hmirrorが True の場合、ir配列を水平方向にミラーリングします。vflipが True の場合、ir配列を垂直方向に反転します。transposeが True の場合、ir配列を転置します(幅と高さを入れ替えます)。timeoutが -1 でない場合、新しいフレームを待機するミリ秒数です。
- fir.draw_ir(image: image.Image, ir: List[float], x: int = 0, y: int = 0, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | None = image.PALETTE_RAINBOW, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None) None¶
ir配列をimage上に左上隅を(x, y)として描画します。irはfir.read_ir()が返すwidth * height個のフラットな温度リストです。x_scaleはレンダリングされる画像を x 方向にどれだけスケーリングするかを制御します。負の値は水平方向に反転します。指定しない場合は、アスペクト比を維持するためにy_scaleに一致させます。y_scaleはレンダリングされる画像を y 方向にどれだけスケーリングするかを制御します。負の値は垂直方向に反転します。指定しない場合は、アスペクト比を維持するためにx_scaleに一致させます。roiは描画するソース IR データの関心領域の矩形(x, y, w, h)です。rgb_channelは、描画先が RGB565 の場合に描画先画像にレンダリングする RGB チャンネル(0=R、1=G、2=B)です。-1(デフォルト)はすべてのチャンネルをレンダリングします。alphaはソース画像を描画先にどれだけブレンドするか(0〜255)を制御します。255 は完全に不透明で、0 は変更なしになります。color_paletteはカラーパレット列挙値(例:image.PALETTE_RAINBOW、image.PALETTE_IRONBOW)、またはグレースケールのソース値に対するルックアップテーブルとして使用される 256 ピクセルの RGB565 画像です。alpha_paletteは、ソースのピクセル値ごとにalphaを変調するアルファルックアップテーブルとして使用される 256 ピクセルの GRAYSCALE 画像です。hintは次の論理 OR です:image.AREA: 縮小時に面積スケーリングを使用します。image.BILINEAR: バイリニアスケーリングを使用します。image.BICUBIC: バイキュービックスケーリングを使用します。image.CENTER: 画像を描画先の中央に配置します。image.HMIRROR: 水平方向にミラーリングします。image.VFLIP: 垂直方向に反転します。image.TRANSPOSE: 転置します(x/y を入れ替えます)。image.EXTRACT_RGB_CHANNEL_FIRST: スケーリングの前に rgb_channel の抽出を適用します。image.APPLY_COLOR_PALETTE_FIRST: スケーリングの前にカラーパレットを適用します。image.SCALE_ASPECT_KEEP: アスペクト比を維持して描画先に収めます。image.SCALE_ASPECT_EXPAND: アスペクト比を維持して描画先を埋めます(クロップします)。image.SCALE_ASPECT_IGNORE: アスペクト比を無視して描画先を埋めます(引き伸ばします)。image.ROTATE_90: 90 度回転します。image.ROTATE_180: 180 度回転します。image.ROTATE_270: 270 度回転します。
scaleは、ir配列をスケーリングするために使用する最小/最大温度(摂氏)を制御する2要素タプル(min, max)です。デフォルトは実際のirの最小値と最大値です。
- fir.snapshot(hmirror: bool = False, vflip: bool = False, transpose: bool = False, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int | None = image.PALETTE_RAINBOW, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None, pixformat: int = image.RGB565, copy_to_fb: bool = False, timeout: int = -1) image.Image¶
熱センサーからフレームをキャプチャし、
image.Imageとして返します。sensor.snapshot()と同様に動作します。copy_to_fbが False の場合、新しい画像は MicroPython のヒープ上に割り当てられます(容量に制限があります)。代わりに結果をフレームバッファに書き込むにはcopy_to_fbを True に設定してください。hmirrorが True の場合、新しい画像を水平方向にミラーリングします。vflipが True の場合、新しい画像を垂直方向に反転します。transposeが True の場合、新しい画像を転置します。x_scaleは新しい画像を x 方向にどれだけスケーリングするかを制御します。負の値は水平方向に反転します。指定しない場合は、アスペクト比を維持するためにy_scaleに一致させます。y_scaleは新しい画像を y 方向にどれだけスケーリングするかを制御します。負の値は垂直方向に反転します。指定しない場合は、アスペクト比を維持するためにx_scaleに一致させます。roiは描画するソース IR データの関心領域の矩形(x, y, w, h)です。rgb_channelはレンダリングする RGB チャンネル(0=R、1=G、2=B)です。-1(デフォルト)はすべてのチャンネルをレンダリングします。alphaはソース画像をどれだけブレンドするか(0〜255)を制御します。255 は完全に不透明です。color_paletteはカラーパレット列挙値、またはグレースケールのソース値に対するルックアップテーブルとして使用される 256 ピクセルの RGB565 画像です。alpha_paletteはアルファルックアップテーブルとして使用される 256 ピクセルの GRAYSCALE 画像です。hintは次の論理 OR です:image.AREA: 縮小時に面積スケーリングを使用します。image.BILINEAR: バイリニアスケーリングを使用します。image.BICUBIC: バイキュービックスケーリングを使用します。image.CENTER: 画像を描画先の中央に配置します。image.HMIRROR: 水平方向にミラーリングします。image.VFLIP: 垂直方向に反転します。image.TRANSPOSE: 転置します(x/y を入れ替えます)。image.EXTRACT_RGB_CHANNEL_FIRST: スケーリングの前に rgb_channel の抽出を適用します。image.APPLY_COLOR_PALETTE_FIRST: スケーリングの前にカラーパレットを適用します。image.SCALE_ASPECT_KEEP: アスペクト比を維持して描画先に収めます。image.SCALE_ASPECT_EXPAND: アスペクト比を維持して描画先を埋めます(クロップします)。image.SCALE_ASPECT_IGNORE: アスペクト比を無視して描画先を埋めます(引き伸ばします)。image.ROTATE_90: 90 度回転します。image.ROTATE_180: 180 度回転します。image.ROTATE_270: 270 度回転します。
scaleは、IR 配列をスケーリングするために使用する最小/最大温度(摂氏)を制御する2要素タプル(min, max)です。デフォルトは実際の IR の最小値と最大値です。pixformatは出力ピクセルフォーマットを制御します。image.GRAYSCALEまたはimage.RGB565でなければなりません。copy_to_fbが True の場合、結果をヒープに割り当てる代わりにフレームバッファに書き込みます。timeoutが -1 でない場合、新しいフレームを待機するミリ秒数です。
定数¶
- fir.FIR_SHIELD: int¶
OpenMV Cam サーモパイルシールド(MLX90621)。
fir.FIR_MLX90621のエイリアスです。