:mod:`fir` --- 热成像扩展板驱动 (fir == 远红外线) ============================================================= .. module:: fir :synopsis: 热成像扩展板驱动 (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) 函数 --------- .. function:: fir.init([type=-1, [refresh, [resolution]]]) 使用I/O引脚P4和P5将附加的热成像扩展板初始化。(以及用于 `fir.FIR_LEPTON` 的 P0、P1、P2、P3) ``type`` 表明热成像扩展板的类型(留待将来使用): * `fir.FIR_NONE`: 0 pixels. * `fir.FIR_SHIELD`: 16x4 pixels. * `fir.FIR_MLX90620`: 16x4 pixels. * `fir.FIR_MLX90621`: 16x4 pixels. * `fir.FIR_MLX90640`: 32x24 pixels. * `fir.FIR_MLX90641`: 16x12 pixels. * `fir.FIR_AMG8833`: 8x8 pixels. * `fir.FIR_LEPTON`: 80x60 pixels (FLIR Lepton 1.x/2.x) or 160x120 pixels (FLIR Lepton 3.x) 默认类型为 ``-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)。 .. note:: 对于 `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 总线以读取图像。 .. function:: fir.deinit() 取消初始化热传感器以释放资源。 .. function:: fir.width() 返回使用中的热传感器的宽度(水平分辨率): * `fir.FIR_NONE`: 0 像素。 * `fir.FIR_SHIELD`: 16 像素。 * `fir.FIR_MLX90620`: 16 像素。 * `fir.FIR_MLX90621`: 16 像素。 * `fir.FIR_MLX90640`: 32 像素。 * `fir.FIR_MLX90641`: 16 像素。 * `fir.FIR_AMG8833`: 8 像素。 * `fir.FIR_LEPTON`: 80 像素 (FLIR Lepton 1.x/2.x) or 160 像素 (FLIR Lepton 3.x). .. function:: fir.height() 返回使用中的热成像扩展板的高度(垂直分辨率): * None: 0 像素。 * thermopile shield: 4 像素。 * `fir.FIR_MLX90620`: 4 像素。 * `fir.FIR_MLX90621`: 4 像素。 * `fir.FIR_MLX90640`: 24 像素。 * `fir.FIR_MLX90641`: 12 像素。 * `fir.FIR_AMG8833`: 8 像素。 * `fir.FIR_LEPTON`: 60 像素 (FLIR Lepton 1.x/2.x) or 120 像素 (FLIR Lepton 3.x). .. function:: fir.type() 返回正在使用的热成像扩展板的类型: * `fir.FIR_NONE` * `fir.FIR_SHIELD` * `fir.FIR_MLX90620` * `fir.FIR_MLX90621` * `fir.FIR_MLX90640` * `fir.FIR_MLX90641` * `fir.FIR_AMG8833` * `fir.FIR_LEPTON` .. function:: fir.refresh() 返回在 `fir.init()` 调用期间设置的当前刷新率。 .. function:: fir.resolution() 返回在 `fir.init()` 调用期间设置的当前分辨率。 .. function:: fir.radiometric() 如果热传感器报告准确的温度读数(True或False),则返回。 如果为 False,这意味着热传感器根据其环境温度报告相对温度读数,这可能不太准确。 .. function:: fir.register_vsync_cb(cb) 仅适用于 OpenMV Cam Pure Thermal 上的 `fir.FIR_LEPTON` 模式。 注册回调 ``cb`` 以在 FLIR Lepton 生成新帧时(但在接收到帧之前)执行(在中断上下文中)。 这通常以 9 Hz 触发。 ``cb`` 没有参数。 .. function:: 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()` 读取帧。 .. function:: fir.get_frame_available() 如果通过调用 `fir.read_ir()` 或 `fir.snapshot()` 可以读取帧,则返回 True。 .. function:: fir.trigger_ffc([timeout=-1]) 仅适用于 `fir.FIR_LEPTON` 模式。 在 FLIR Lepton 上触发平场校正过程,校准热图像。这个过程随着传感器自动发生。但是,您可以调用此函数来强制执行该过程。 ``timeout`` 如果不是 -1 那么等待 FFC 完成的毫秒数。 .. function:: fir.read_ta() 返回环境温度(即传感器温度)。 示例:: ta = fir.read_ta() 返回值是表示温度(单位:摄氏度)的浮点值。 .. function:: 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() 返回值是表示温度(单位:摄氏度)的浮点值。 .. note:: ``ir`` 是一个浮点值(每个 4 字节)列表(宽度*高度)。 .. function:: 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_RAINBOW`、`sensor.PALETTE_IRONBOW`, 或总共 256 像素的 RGB565 图像,用作任何来源灰度值的颜色查找表图像。如果使用,这将在 ``rgb_channel`` 提取之后应用。 ``alpha_palette`` 如果不是 ``-1`` 可以是总共 256 像素的灰度图像,用作 alpha 调色板,以像素级别调制正在绘制的源图像的 ``alpha`` 值, 允许您根据像素的灰度值精确控制像素的 alpha 值。 alpha 查找表中的 255 像素值是不透明的,任何小于 255 的像素值都会变得更透明,直到 0。 如果使用,则在 ``rgb_channel`` 提取之后应用。 ``hint`` 可以是标志的逻辑 OR: * `image.AREA`:与最近邻的默认值相比,在缩小时使用区域缩放。 * `image.BILINEAR`:使用双线性缩放而不是最近邻缩放的默认值。 * `image.BICUBIC`:使用双三次缩放与最近邻缩放的默认值。 * `image.CENTER`:将要绘制的图像图像居中 (x, y)。 * `image.EXTRACT_RGB_CHANNEL_FIRST`:缩放前进行 rgb_channel 提取。 * `image.APPLY_COLOR_PALETTE_FIRST`:缩放前应用调色板。 * `image.BLACK_BACKGROUND`:假设目标图像是黑色的。这加快了绘图速度。 如果没有传递 ``x_scale`` 来指定要绘制的图像的大小,则可以传递 ``x_size`` 并且 ``x_scale`` 将自动确定传递的输入图像大小。 如果 ``y_scale`` 或 ``y_size`` 都没有指定,那么 ``y_scale`` 内部将设置为等于 ``x_size`` 以保持纵横比。 如果没有传递 ``y_scale`` 来指定要绘制的图像的大小,则可以传递 ``y_size`` 并且 ``y_scale`` 将自动确定传递的输入图像大小。 如果 ``x_scale`` 或 ``x_size`` 都没有指定,那么 ``x_scale`` 内部将设置为等于 ``y_size`` 以保持纵横比。 ``scale`` 是一个两值元组,它控制最小和最大温度(以摄氏度为单位)以缩放 ``ir`` 图像。默认情况下,它等于图像 ``ir`` 最小值 和 ``ir`` 最大值。 如果未指定 x/y,图像将在视野中居中。如果未指定 x_scale/y_scale 或 x_size/y_size,则 ``ir`` 数组将被缩放以适合图像。 .. note:: 要处理转置的 ``ir`` 数组,``read_ir`` 会记住它是否被调用为 ``True`` 。然后在内部传递给 ``draw_ir`` 。 但是,您可以传递一个 3 值元组 (w, h, ir) 作为 ``ir`` 数组,而不是使用 ``draw_ir`` 来绘制任何宽度为 ``w`` 和高度为 ``h`` 的浮点数组. .. function:: 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_RAINBOW`、`sensor.PALETTE_IRONBOW`,或总共 256 像素的 RGB565 图像, 用作任何来源灰度值的颜色查找表图像是。如果使用,这将在 ``rgb_channel`` 提取之后应用。 ``alpha_palette`` 如果不是 ``-1`` 可以是总共 256 像素的灰度图像,用作 alpha 调色板,以像素级别调制正在绘制的源图像的 ``alpha`` 值, 允许您根据像素的灰度值精确控制像素的 alpha 值。 alpha 查找表中的 255 像素值是不透明的,任何小于 255 的像素值都会变得更透明,直到 0。 如果使用,则在 ``rgb_channel`` 提取之后应用。 ``hint`` 可以是标志的逻辑 OR: * `image.AREA`:与最近邻的默认值相比,在缩小时使用区域缩放。 * `image.BILINEAR`:使用双线性缩放而不是最近邻缩放的默认值。 * `image.BICUBIC`:使用双三次缩放与最近邻缩放的默认值。 * `image.CENTER`:将要绘制的图像图像居中 (x, y)。 * `image.EXTRACT_RGB_CHANNEL_FIRST`:缩放前进行 rgb_channel 提取。 * `image.APPLY_COLOR_PALETTE_FIRST`:缩放前应用调色板。 * `image.BLACK_BACKGROUND`:假设目标图像是黑色的。 这加快了绘图速度。 如果没有传递 ``x_scale`` 来指定要绘制的图像的大小,则可以传递 ``x_size`` 并且 ``x_scale`` 将自动确定传递的输入图像大小。 如果 ``y_scale`` 或 ``y_size`` 都没有指定,那么 ``y_scale`` 内部将设置为等于 ``x_size`` 以保持纵横比。 如果没有传递 ``y_scale`` 来指定要绘制的图像的大小,则可以传递 ``y_size`` 并且 ``y_scale`` 将自动确定传递的输入图像大小。 如果 ``x_scale`` 或 ``x_size`` 都没有指定,那么 ``x_scale`` 内部将设置为等于 ``y_size`` 以保持纵横比。 ``scale`` 是一个两值元组,它控制最小和最大温度(以摄氏度为单位)以缩放 ``ir`` 图像。默认情况下,它等于图像 ``ir`` 最小值 和 ``ir`` 最大值。 ``pixformat`` 如果指定控制最终图像像素格式。 如果您想用新的图像数据替换该图像对象的内存缓冲区、类型、宽度和高度,``copy_to_fb`` 也可能是另一个图像对象。 ``timeout`` 如果不是 -1 那么等待新帧的毫秒数。 .. note:: 任何使用 ``copy_to_fb`` 都会使其覆盖的先前图像对象无效。不要再使用对它覆盖的先前图像对象的任何引用。 对于引用帧缓冲区、帧缓冲区堆栈或 MicroPython 堆上的图像的图像对象。 返回一个图像对象。 常量 --------- .. data:: fir.FIR_NONE 无FIR传感器类型。 .. data:: fir.FIR_SHIELD OpenMV Cam热成像扩展板型号(MLX90621)。 .. data:: fir.FIR_MLX90621 FIR_MLX90621 FIR传感器。 .. data:: fir.FIR_MLX90640 FIR_MLX90640 FIR传感器。 .. data:: fir.FIR_MLX90641 FIR_MLX90640 FIR传感器。 .. data:: fir.FIR_AMG8833 FIR_AMG8833 FIR传感器。 .. data:: fir.FIR_LEPTON FIR_LEPTON FIR传感器。 .. data:: fir.PALETTE_RAINBOW `fir.draw_ir()` 和 `fir.snapshot()` 的彩虹调色板。 .. data:: fir.PALETTE_IRONBOW `fir.draw_ir()` 和 `fir.snapshot()` 的 Ironbow 调色板。 .. data:: fir.PIXFORMAT_GRAYSCALE `fir.snapshot()` 的灰度像素格式。 .. data:: fir.PIXFORMAT_RGB565 `fir.snapshot()` 的 RGB565 像素格式。