fir --- 热成像传感器驱动(fir == 远红外)

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 地址,因此若要专门初始化 MLX90641,必须将 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 元组 (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_RAINBOWimage.PALETTE_IRONBOW),或一张 256 像素的 RGB565 图像,用作针对灰度源值的查找表。

alpha_palette 是一张 256 像素的 GRAYSCALE 图像,用作 alpha 查找表,按每个源像素值调制 alpha

hint 是以下各项的逻辑或:

scale 是一个 2 元组 (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 是以下各项的逻辑或:

scale 是一个 2 元组 (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)。