fir --- 熱感測器驅動程式 (fir == far infrared,遠紅外線)

fir 模組驅動透過 I2C 連接到 OpenMV Cam 的遠紅外線 (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 位址,因此你必須將 fir.FIR_MLX90641 傳給 type 才能特別初始化它。

refresh 是熱感測器的更新率,單位為 Hz:

更新率越高,準確度越低,反之亦然。

resolution 是熱感測器的量測解析度,單位為位元:

解析度越高,最大溫度範圍越小,反之亦然。

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]

傳回一個 4-tuple (ta, ir, to_min, to_max),包含環境溫度、一個扁平的 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 是一個 256 像素的 GRAYSCALE 影像,用作 alpha 查找表,依每個來源像素值調變 alpha

hint 是以下選項的邏輯 OR:

scale 是一個 2-tuple (min, max),控制用來縮放 ir 陣列的最低/最高溫度(以攝氏度為單位)。預設為實際的 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 影像,用作 alpha 查找表。

hint 是以下選項的邏輯 OR:

scale 是一個 2-tuple (min, max),控制用來縮放 IR 陣列的最低/最高溫度(以攝氏度為單位)。預設為實際的 IR 最小值與最大值。

pixformat 控制輸出的像素格式。必須為 image.GRAYSCALEimage.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)。