fir --- 热成像传感器驱动(fir == 远红外)¶
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 地址,因此若要专门初始化 MLX90641,必须将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 元组
(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是以下各项的逻辑或: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 元组(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是以下各项的逻辑或: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 元组(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的别名。