fir --- 熱センサードライバー(fir == 遠赤外線)

fir モジュールは、OpenMV Cam に I2C 経由で接続された遠赤外線(FIR)サーモパイルアレイを駆動します。8x8、16x4、16x12、32x24 のセンサーがサポートされています(このページ末尾の定数を参照してください)。各フレームはピクセルごとの摂氏温度を返し、snapshot() を使って単独の熱画像としてレンダリングするか、draw_ir() を使って CSI センサーからの可視光フレームに合成できます。通常は image.PALETTE_RAINBOWimage.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 は熱センサーの種類を示します:

デフォルトでは type-1 で、この場合 fir.init() は I2C アドレスに基づいて接続された熱センサーを自動的にスキャンして初期化します。fir.FIR_MLX90640fir.FIR_MLX90641 は同じ I2C アドレスを共有するため、後者を明示的に初期化するには typefir.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.deinit() None

熱センサーの初期化を解除し、リソースを解放します。

fir.width() int

使用中の熱センサーの水平解像度(ピクセル単位)を返します。

fir.height() int

使用中の熱センサーの垂直解像度(ピクセル単位)を返します。

fir.type() int

使用中の熱センサーの種類を返します。fir.FIR_MLX90621fir.FIR_MLX90640fir.FIR_MLX90641fir.FIR_AMG8833 のいずれかです。

fir.refresh() int

fir.init() の呼び出し時に設定された現在のリフレッシュレート(Hz)を返します。

fir.resolution() int

fir.init() の呼び出し時に設定された現在の分解能(ビット)を返します。

fir.read_ta() float

周囲温度(すなわちセンサー温度)を摂氏の浮動小数点数で返します。

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) として描画します。

irfir.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_RAINBOWimage.PALETTE_IRONBOW)、またはグレースケールのソース値に対するルックアップテーブルとして使用される 256 ピクセルの RGB565 画像です。

alpha_palette は、ソースのピクセル値ごとに alpha を変調するアルファルックアップテーブルとして使用される 256 ピクセルの GRAYSCALE 画像です。

hint は次の論理 OR です:

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 です:

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 のエイリアスです。

fir.FIR_MLX90621: int

MLX90621 熱センサー(16x4)。

fir.FIR_MLX90640: int

MLX90640 熱センサー(32x24)。

fir.FIR_MLX90641: int

MLX90641 熱センサー(16x12)。

fir.FIR_AMG8833: int

AMG8833 熱センサー(8x8)。