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[, resolution]]])

使用I/O引脚P4和P5将附加的热成像扩展板初始化。(以及用于 fir.FIR_LEPTON 的 P0、P1、P2、P3)

type 表明热成像扩展板的类型(留待将来使用):

默认类型为 -1 ,这将导致 fir.init() 根据 I2C 地址自动扫描和初始化连接的热传感器。 请注意,fir.FIR_MLX90640 和`fir.FIR_MLX90641` 具有相同的I2C 地址,因此您必须传递 fir.FIR_MLX90641 来键入以专门对其进行初始化。

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

refresh 是以 Hz 为单位的热电堆传感器 2 次方刷新率:

  • 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 (really 8.7 Hz).

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-bits.

  • fir.FIR_LEPTON: 14-bits.

For the fir.FIR_SHIELD, and fir.FIR_MLX90621:

  • 15 位 -> 最高 ~950C。

  • 16 位 -> 最高约 750C。

  • 17 位 -> 最大 ~600C。

  • 18 位 -> 最大 ~450C。

For the fir.FIR_MLX90640 and fir.FIR_MLX90641:

  • 16 位 -> 最高 ~750C。

  • 17 位 -> 最高 ~600C。

  • 18 位 -> 最高 ~450C。

  • 19 位 -> 最高 ~300C。

For the fir.FIR_AMG8833:

  • 最高 ~80C。

For the fir.FIR_LEPTON:

  • 最高约 140C(在低增益模式下最高可达 400C-450C)。

备注

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

fir.deinit()

取消初始化热传感器以释放资源。

fir.width()

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

fir.height()

返回使用中的热成像扩展板的高度(垂直分辨率):

fir.type()

返回正在使用的热成像扩展板的类型:

fir.refresh()

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

fir.resolution()

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

fir.radiometric()

如果热传感器报告准确的温度读数(True或False),则返回。 如果为 False,这意味着热传感器根据其环境温度报告相对温度读数,这可能不太准确。

fir.register_vsync_cb(cb)

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

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

这通常以 9 Hz 触发。

cb 没有参数。

fir.register_frame_cb(cb)

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

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

这通常以 9 Hz 触发。

cb 没有参数。

使用它来获取中断以安排稍后使用 micropython.schedule() 读取帧。

fir.get_frame_available()

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

fir.trigger_ffc([timeout=-1])

仅适用于 fir.FIR_LEPTON 模式。

在 FLIR Lepton 上触发平场校正过程,校准热图像。这个过程随着传感器自动发生。但是,您可以调用此函数来强制执行该过程。

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

fir.read_ta()

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

示例:

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, ir[, x[, y[, x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=128[, color_palette=fir.PALETTE_RAINBOW[, alpha_palette=-1[, hint=0[, x_size=None[, y_size=None[, scale=(ir_min, ir_max)]]]]]]]]]]]]])

image 上绘制一个 ir 数组,其左上角从位置 x, y 开始。您可以将 x, y 作为元组 (x, y) 单独传递,或者根本不传递。 此方法自动处理渲染传递到目标图像的正确像素格式的图像,同时还无缝处理剪辑。

x_scale 控制绘制的图像在 x 方向上的缩放比例(浮点数)。 如果此值为负,则图像将水平翻转。

y_scale 控制绘制的图像在 y 方向上的缩放比例(浮点数)。 如果此值为负,则图像将垂直翻转。

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

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

alpha 控制要混合到目标图像中的源图像的多少。值为 256 时绘制不透明的源图像,而小于 256 的值会在源图像和目标图像之间产生混合。 0 不会修改目标图像。

color_palette 如果不是 -1 可以是 sensor.PALETTE_RAINBOWsensor.PALETTE_IRONBOW, 或总共 256 像素的 RGB565 图像,用作任何来源灰度值的颜色查找表图像。如果使用,这将在 rgb_channel 提取之后应用。

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

hint 可以是标志的逻辑 OR:

如果没有传递 x_scale 来指定要绘制的图像的大小,则可以传递 x_size 并且 x_scale 将自动确定传递的输入图像大小。 如果 y_scaley_size 都没有指定,那么 y_scale 内部将设置为等于 x_size 以保持纵横比。

如果没有传递 y_scale 来指定要绘制的图像的大小,则可以传递 y_size 并且 y_scale 将自动确定传递的输入图像大小。 如果 x_scalex_size 都没有指定,那么 x_scale 内部将设置为等于 y_size 以保持纵横比。

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

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

备注

要处理转置的 ir 数组,read_ir 会记住它是否被调用为 True 。然后在内部传递给 draw_ir 。 但是,您可以传递一个 3 值元组 (w, h, ir) 作为 ir 数组,而不是使用 draw_ir 来绘制任何宽度为 w 和高度为 h 的浮点数组.

fir.snapshot([hmirror=False, [vflip=False, [transpose=False, [x_scale=1.0, [y_scale=1.0, [roi=None, [rgb_channel=-1, [alpha=128, [color_palette=fir.PALETTE_RAINBOW, [alpha_palette=None, [hint=0, [x_size=None, [y_size=None, [scale=(ir_min, ir_max), [pixformat=fir.PIXFORMAT_RGB565, [copy_to_fb=False, [timeout=-1]]]]]]]]]]]]]]]])

工作方式类似于 sensor.snapshot() ,并返回一个 image 对象,该对象为 sensor.GRAYSCALE`(灰度)或 `sensor.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 方向上的缩放比例(浮点数)。 如果此值为负,则图像将水平翻转。

y_scale 控制绘制图像在 y 方向上的缩放比例(浮点数)。 如果此值为负,则图像将垂直翻转。

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

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

alpha 控制要混合到目标图像中的源图像的多少。值为 256 时绘制不透明的源图像,而小于 256 的值会在源图像和目标图像之间产生混合。 0 不会修改目标图像。

color_palette 如果不是 -1 可以是 sensor.PALETTE_RAINBOWsensor.PALETTE_IRONBOW,或总共 256 像素的 RGB565 图像, 用作任何来源灰度值的颜色查找表图像是。如果使用,这将在 rgb_channel 提取之后应用。

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

hint 可以是标志的逻辑 OR:

如果没有传递 x_scale 来指定要绘制的图像的大小,则可以传递 x_size 并且 x_scale 将自动确定传递的输入图像大小。 如果 y_scaley_size 都没有指定,那么 y_scale 内部将设置为等于 x_size 以保持纵横比。

如果没有传递 y_scale 来指定要绘制的图像的大小,则可以传递 y_size 并且 y_scale 将自动确定传递的输入图像大小。 如果 x_scalex_size 都没有指定,那么 x_scale 内部将设置为等于 y_size 以保持纵横比。

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

pixformat 如果指定控制最终图像像素格式。

如果您想用新的图像数据替换该图像对象的内存缓冲区、类型、宽度和高度,copy_to_fb 也可能是另一个图像对象。

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

备注

任何使用 copy_to_fb 都会使其覆盖的先前图像对象无效。不要再使用对它覆盖的先前图像对象的任何引用。 对于引用帧缓冲区、帧缓冲区堆栈或 MicroPython 堆上的图像的图像对象。

返回一个图像对象。

常量

fir.FIR_NONE

无FIR传感器类型。

fir.FIR_SHIELD

OpenMV Cam热成像扩展板型号(MLX90621)。

fir.FIR_MLX90621

FIR_MLX90621 FIR传感器。

fir.FIR_MLX90640

FIR_MLX90640 FIR传感器。

fir.FIR_MLX90641

FIR_MLX90640 FIR传感器。

fir.FIR_AMG8833

FIR_AMG8833 FIR传感器。

fir.FIR_LEPTON

FIR_LEPTON FIR传感器。

fir.PALETTE_RAINBOW

fir.draw_ir()fir.snapshot() 的彩虹调色板。

fir.PALETTE_IRONBOW

fir.draw_ir()fir.snapshot() 的 Ironbow 调色板。

fir.PIXFORMAT_GRAYSCALE

fir.snapshot() 的灰度像素格式。

fir.PIXFORMAT_RGB565

fir.snapshot() 的 RGB565 像素格式。