fir --- 熱感測器驅動程式 (fir == far infrared,遠紅外線)¶
fir 模組驅動透過 I2C 連接到 OpenMV Cam 的遠紅外線 (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 位址,因此你必須將fir.FIR_MLX90641傳給type才能特別初始化它。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]¶
傳回一個 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)。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是一個 256 像素的 GRAYSCALE 影像,用作 alpha 查找表,依每個來源像素值調變alpha。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是一個 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: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是一個 2-tuple(min, max),控制用來縮放 IR 陣列的最低/最高溫度(以攝氏度為單位)。預設為實際的 IR 最小值與最大值。pixformat控制輸出的像素格式。必須為image.GRAYSCALE或image.RGB565。copy_to_fb若為 True,則將結果寫入影格緩衝區,而非配置在堆積上。timeout若不為 -1,則為等待新影格的毫秒數。
常數¶
- fir.FIR_SHIELD: int¶
OpenMV Cam 熱電堆擴充板 (MLX90621)。
fir.FIR_MLX90621的別名。