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
表明热成像扩展板的类型(留待将来使用):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/Afir.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 Hzfir.FIR_LEPTON
: 9 Hz (really 8.7 Hz).
resolution
是热成像传感器的测量分辨率。fir.FIR_NONE
: N/Afir.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
, andfir.FIR_MLX90621
:15 位 -> 最高 ~950C。
16 位 -> 最高约 750C。
17 位 -> 最大 ~600C。
18 位 -> 最大 ~450C。
For the
fir.FIR_MLX90640
andfir.FIR_MLX90641
:16 位 -> 最高 ~750C。
17 位 -> 最高 ~600C。
18 位 -> 最高 ~450C。
19 位 -> 最高 ~300C。
For the
fir.FIR_AMG8833
:备注
对于
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.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).
- 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).
- 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_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
数组将被缩放以适合图像。备注
要处理转置的
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_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 那么等待新帧的毫秒数。备注
任何使用
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 像素格式。