fir — 热传感器驱动程序(fir == 远红外)

fir 模块用于控制热传感器。

示例用法:

import sensor, fir

# Setup camera.
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames()
fir.init()

# Show image.
while(True):
    img = sensor.snapshot()
    ta, ir, to_min, to_max = fir.read_ir()
    fir.draw_ir(image, 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=-1, refresh: int | None = None, resolution: int | None = None) None

使用I/O引脚P4和P5(以及P0、P1、P2、P3用于 fir.FIR_LEPTON)初始化已连接的热电堆扩展板

type 表示热电堆扩展板的类型:

默认情况下,type 为 -1,这将导致 fir.init() 根据 I2C 地址自动扫描并初始化连接的热传感器。请注意,fir.FIR_MLX90640fir.FIR_MLX90641 具有相同的 I2C 地址,因此您必须将 fir.FIR_MLX90641 传递给 type 来具体初始化它。

在 OpenMV Cam Pure Thermal 上,fir.FIR_LEPTON 使用内部 I/O 引脚,而不使用 P0-P5。

refresh 是热电堆传感器的2的幂刷新率(单位:Hz):

  • fir.FIR_NONE: N/A

  • fir.FIR_SHIELD: 默认为 64 Hz。可以是 1 Hz、2 Hz、4 Hz、8 Hz、16 Hz、32 Hz、64 Hz、128 Hz、256 Hz 或 512 Hz。请注意,刷新率越高,精度越低,反之亦然。

  • fir.FIR_MLX90621: 默认为 64 Hz。可以是 1 Hz、2 Hz、4 Hz、8 Hz、16 Hz、32 Hz、64 Hz、128 Hz、256 Hz 或 512 Hz。请注意,刷新率越高,精度越低,反之亦然。

  • fir.FIR_MLX90640: 默认为 32 Hz。可以是 1 Hz、2 Hz、4 Hz、8 Hz、16 Hz、32 Hz 或 64 Hz。请注意,刷新率越高,精度越低,反之亦然。

  • fir.FIR_MLX90641: 默认为 32 Hz。可以是 1 Hz、2 Hz、4 Hz、8 Hz、16 Hz、32 Hz 或 64 Hz。请注意,刷新率越高,精度越低,反之亦然。

  • fir.FIR_AMG8833: 10 Hz

  • fir.FIR_LEPTON: 9 Hz(实际上为8.7Hz)。

resolution 是热电堆传感器的测量分辨率:

  • fir.FIR_NONE: N/A

  • fir.FIR_SHIELD: 默认为18位。可以是15位、16位、17位或18位。请注意,分辨率越高,最大温度范围越小,反之亦然。

  • 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.FIR_LEPTON: 14 位。

对于 fir.FIR_SHIELDfir.FIR_MLX90621

  • 15 位 -> 最大约 950 摄氏度。

  • 16 位 -> 最大约 750 摄氏度。

  • 17 位 -> 最大约 600 摄氏度。

  • 18 位 -> 最大约 450 摄氏度。

对于 fir.FIR_MLX90640fir.FIR_MLX90641

  • 16 位 -> 最大约 750 摄氏度。

  • 17 位 -> 最大约 600 摄氏度。

  • 18 位 -> 最大约 450 摄氏度。

  • 19 位 -> 最大约 300 摄氏度。

对于 fir.FIR_AMG8833

  • 最大约 80 摄氏度。

对于 fir.FIR_LEPTON

  • 最大约 140 摄氏度(在低增益模式下可达到 400-450 摄氏度)。

备注

对于 fir.FIR_LEPTON 模式,此驱动程序实现了三重缓冲区以接收 FLIR Lepton 图像。这将使用 28.125 KB 的 RAM 用于 FLIR Lepton 1.x/2.x 和 112.5 KB 的 RAM 用于 FLIR Lepton 3.x。三重缓冲确保使用 fir.read_ir()fir.snapshot() 读取图像时不会阻塞。对于所有其他传感器,将访问 I2C 总线以读取图像。

fir.deinit() None

反初始化热传感器,释放资源。

fir.width() int

返回正在使用的热传感器的宽度(水平分辨率):

fir.height() int

返回正在使用的热传感器的高度(垂直分辨率):

fir.type() int

返回正在使用的热传感器的类型:

fir.refresh() int

返回在 fir.init() 调用期间设置的当前刷新率。

fir.resolution() int

返回在 fir.init() 调用期间设置的当前分辨率。

fir.radiometric() bool

返回热传感器是否报告准确的温度读数(True 或 False)。如果为 False,则意味着热传感器报告基于其环境温度的相对温度读数,可能不是非常准确。

fir.register_vsync_cb(cb) None

fir.FIR_LEPTON 模式仅适用于OpenMV Cam Pure Thermal。

注册回调 cb,以在 FLIR Lepton 生成新帧时(但在帧接收之前)执行(在中断上下文中)。

通常以9Hz触发。

cb 不接受参数。

fir.register_frame_cb(cb) None

fir.FIR_LEPTON 模式仅适用于OpenMV Cam Pure Thermal。

注册回调 cb,以在 FLIR Lepton 生成新帧并准备好通过 fir.read_ir()fir.snapshot() 读取帧时执行(在中断上下文中)。

通常以9Hz触发。

cb 不接受参数。

使用此功能获取中断以稍后使用 micropython.schedule() 读取帧。

fir.get_frame_available() bool

如果可以通过调用 fir.read_ir()fir.snapshot() 读取帧,则返回 True。

fir.trigger_ffc(timeout=-1) None

仅适用于 fir.FIR_LEPTON 模式。

触发 FLIR Lepton 上的平坦场校正过程,该过程校准热像。传感器会自动执行此过程。但是,您可以调用此函数来强制执行该过程。

timeout 如果不是-1,则等待FFC完成的毫秒数。

fir.read_ta() float

返回环境温度(即传感器温度)。

例子:

ta = fir.read_ta()

返回的值是表示摄氏度的浮点数。

fir.read_ir(hmirror=False, vflip=False, transpose=False, timeout=-1)

返回一个元组,其中包含环境温度(即传感器温度)、温度列表(宽度*高度)、观察到的最低温度和观察到的最高温度。

hmirror 如果设置为True,则水平镜像 ir 数组。

vflip 如果设置为True,则垂直翻转 ir 数组。

transpose 如果设置为True,则转置 ir 数组。

timeout 如果不是-1,则等待新帧的毫秒数。

如果要旋转图像的角度为90的倍数,则传递以下内容:

* vflip=False, hmirror=False, transpose=False -> 0 degree rotation
* vflip=True,  hmirror=False, transpose=True  -> 90 degree rotation
* vflip=True,  hmirror=True,  transpose=False -> 180 degree rotation
* vflip=False, hmirror=True,  transpose=True  -> 270 degree rotation

例子:

ta, ir, to_min, to_max = fir.read_ir()

返回的值时表示摄氏度的浮点数。

备注

ir 是浮点数(每个4字节)的(宽度*高度)列表。

fir.draw_ir(image: image.Image, ir, x: int | None = None, y: int | None = None, x_scale=1.0, y_scale=1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel=-1, alpha=128, color_palette=image.PALETTE_RAINBOW, alpha_palette=-1, hint=0, scale=Optional[Tuple[float, float]]) None

image 上绘制一个 ir 数组,其左上角从位置x、y开始。此方法会自动将传入的图像呈现为图像的正确像素格式,同时无缝处理裁剪。

x_scale 控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定 y_scale,则它将与 x_scale 匹配,以保持纵横比。

y_scale 控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定 x_scale,则它将与 x_scale 匹配,以保持纵横比。

roi 是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。

rgb_channel 是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递 rgb_channel=1,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。

alpha 控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。

color_palette 如果不是 -1 ,可以是 image.PALETTE_RAINBOWimage.PALETTE_IRONBOW ,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在 rgb_channel 提取之后应用。

alpha_palette 如果不是 -1,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的 alpha 值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在 rgb_channel 提取之后应用。

hint 可以是标志的逻辑 OR:

scale 是一个两个值的元组,它控制最小和最大温度(一摄氏度为单位)以缩放 ir 图像。默认情况下,它等于图像 ir 的最小值和 ir 的最大值。

如果未指定x/y,则图像将居中显示在视野中。如果未指定x_scale/y_scale或x_size/y_size,则 ir 数组将被缩放以适应 image 上。

备注

要处理转置的 ir 数组,read_ir 将记住是否使用 transposed True 设置调用了它,并将其传递给 draw_ir 内部。但是,您也可以将 3 值元组 (w, h, ir) 作为 ir 数组传递给 draw_ir,以便使用 draw_ir 绘制任何浮点数组,其宽度为 w,高度为 h

fir.snapshot(hmirror=False, vflip=False, transpose=False, x_scale=1.0, y_scale=1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel=-1, alpha=128, color_palette=image.PALETTE_RAINBOW, alpha_palette=None, hint=0, scale: Tuple[float, float] | None = None, pixformat=image.RGB565, copy_to_fb=False, timeout=-1) image.Image

类似于 sensor.snapshot(),返回一个 image 对象,其类型为 image.GRAYSCALE`(灰度)或 `image.RGB565`(彩色)。如果 ``copy_to_fb` 为 False,则在 MicroPython 堆上分配新图像。但是,MicroPython 堆有限,如果耗尽空间,则可能无法存储新图像。相反,将 copy_to_fb 设置为 True,将帧缓冲区设置为新图像,使此函数的工作方式与 sensor.snapshot() 相同。

hmirror 如果设置为True,则水平镜像新图像。

vflip 如果设置为True,则垂直翻转新图像。

transpose 如果设置为True,则转置新图像。

如果要旋转图像的角度为90的倍数,则传递以下内容:

* vflip=False, hmirror=False, transpose=False -> 0 degree rotation
* vflip=True,  hmirror=False, transpose=True  -> 90 degree rotation
* vflip=True,  hmirror=True,  transpose=False -> 180 degree rotation
* vflip=False, hmirror=True,  transpose=True  -> 270 degree rotation

x_scale 控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定 y_scale,则它将与 x_scale 匹配,以保持纵横比。

y_scale 控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定 x_scale,则它将与 x_scale 匹配,以保持纵横比。

roi 是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。

rgb_channel 是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递 rgb_channel=1,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。

alpha 控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。

color_palette 如果不是 -1 ,可以是 image.PALETTE_RAINBOWimage.PALETTE_IRONBOW ,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在 rgb_channel 提取之后应用。

alpha_palette 如果不是 -1,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的 alpha 值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在 rgb_channel 提取之后应用。

hint 可以是标志的逻辑 OR:

scale 是一个两个值的元组,它控制最小和最大温度(一摄氏度为单位)以缩放 ir 图像。默认情况下,它等于图像 ir 的最小值和 ir 的最大值。

如果指定了 pixformat,则控制最终图像的像素格式。

timeout 如果不是-1,则等待新帧的毫秒数。

返回一个图像对象。

常量

fir.FIR_NONE: int

无FIR传感器类型。

fir.FIR_SHIELD: int

OpenMV Cam 热电堆扩展板板类型(MLX90621)。

fir.FIR_MLX90621: int

FIR_MLX90621 FIR 传感器。

fir.FIR_MLX90640: int

FIR_MLX90640 FIR 传感器。

fir.FIR_MLX90641: int

FIR_MLX90640 FIR 传感器。

fir.FIR_AMG8833: int

FIR_AMG8833 FIR 传感器。

fir.FIR_LEPTON: int

FIR_LEPTON FIR 传感器。