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
表示热电堆扩展板的类型:fir.FIR_NONE
: 0像素。fir.FIR_SHIELD
: 16x4 像素。fir.FIR_MLX90621
: 16x4 像素。fir.FIR_MLX90640
: 32x24 像素。fir.FIR_MLX90641
: 16x12 像素。fir.FIR_AMG8833
: 8x8 像素。fir.FIR_LEPTON
: 80x60 像素(FLIR Lepton 1.x/2.x)或 160x120 像素(FLIR Lepton 3.x)
默认情况下,type 为
-1
,这将导致fir.init()
根据 I2C 地址自动扫描并初始化连接的热传感器。请注意,fir.FIR_MLX90640
和fir.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/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(实际上为8.7Hz)。
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 位。fir.FIR_LEPTON
: 14 位。
对于
fir.FIR_SHIELD
和fir.FIR_MLX90621
:15 位 -> 最大约 950 摄氏度。
16 位 -> 最大约 750 摄氏度。
17 位 -> 最大约 600 摄氏度。
18 位 -> 最大约 450 摄氏度。
对于
fir.FIR_MLX90640
和fir.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.width() int ¶
返回正在使用的热传感器的宽度(水平分辨率):
fir.FIR_NONE
: 0像素。fir.FIR_SHIELD
: 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)或 160 像素(FLIR Lepton 3.x)。
- fir.height() int ¶
返回正在使用的热传感器的高度(垂直分辨率):
fir.FIR_NONE
: 0像素。fir.FIR_SHIELD
: 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)或 120 像素(FLIR Lepton 3.x)。
- 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_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_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR: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 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
scale
是一个两个值的元组,它控制最小和最大温度(一摄氏度为单位)以缩放ir
图像。默认情况下,它等于图像ir
的最小值和ir
的最大值。如果未指定x/y,则图像将居中显示在视野中。如果未指定x_scale/y_scale或x_size/y_size,则
ir
数组将被缩放以适应image
上。
- 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_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR: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 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
scale
是一个两个值的元组,它控制最小和最大温度(一摄氏度为单位)以缩放ir
图像。默认情况下,它等于图像ir
的最小值和ir
的最大值。如果指定了
pixformat
,则控制最终图像的像素格式。timeout
如果不是-1,则等待新帧的毫秒数。返回一个图像对象。