FLIR Lepton 适配器¶
FLIR Lepton 适配器模块将 FLIR Lepton 热成像机芯(单独销售)连接到 OpenMV Cam,同时提供 AGC 和直接热成像两种模式,用于人体/物体的温度测量。
完整的数据手册、照片和订购信息请参阅 FLIR Lepton 适配器产品页面。
亮点¶
兼容 FLIR Lepton 1.x / 2.x / 3.x 机芯(单独销售)
AGC 和直接热成像两种模式,均支持温度映射
可在完全黑暗中成像
兼容所有模块化 OpenMV Cam 基板
用法¶
通过 csi.CSI 并配合 cid= csi.LEPTON 来驱动 Lepton。驱动程序会在内部将 Lepton 的 80x60(1.x/2.x)或 160x120(3.x)原生帧上采样到你所设置的任意 framesize:
import csi
import time
csi0 = csi.CSI(cid=csi.LEPTON)
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QVGA)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
print(clock.fps())
若要直接从传感器获取彩色帧,请将 pixformat 切换为 csi.RGB565,并将 csi.CSI.color_palette 设置为 image.PALETTE_IRONBOW——驱动程序会输出应用了调色板的 RGB565 帧,因此 snapshot() 会直接返回 ironbow 彩色帧:
csi0.pixformat(csi.RGB565)
csi0.color_palette(image.PALETTE_IRONBOW)
温度测量¶
辐射测量型 Lepton(Lepton 2.5 / 3.5)会报告经过校准的逐像素温度数据。通过 csi.CSI.ioctl 配合 csi.IOCTL_LEPTON_SET_MODE 启用测量模式,然后使用 csi.IOCTL_LEPTON_SET_RANGE (min_celsius, max_celsius) 限定温度窗口。Lepton 驱动程序会将灰度像素值 0 线性映射到 min_celsius,将 255 线性映射到 max_celsius,因此每个像素都成为所配置窗口内的一个温度查找值。低于 min_celsius 的像素饱和为 0,高于 max_celsius 的像素饱和为 255。
csi.IOCTL_LEPTON_SET_MODE 接受两个标志。第一个用于开启测量;第二个用于选择传感器的温度范围:
低范围——
(True, False)——传感器跨度为-10 °C至+140 °C(室内尺度场景)。将窗口限定到感兴趣的区域,例如用于体热跟踪时设为(20.0, 40.0):csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True, False) csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, 20.0, 40.0)
高范围——
(True, True)——传感器跨度通常为-10 °C至约~+450 °C(室温下约为~+400 °C),用于高温物体。可限定为例如(0.0, 400.0)以用于熔炉或高温元件跟踪:csi0.ioctl(csi.IOCTL_LEPTON_SET_MODE, True, True) csi0.ioctl(csi.IOCTL_LEPTON_SET_RANGE, 0.0, 400.0)
若要将灰度像素转换回摄氏温度:
def p_to_temp(p, min_t, max_t):
return (p * (max_t - min_t)) / 255.0 + min_t
这适用于单个像素,也适用于在使用 Image.find_blobs 定位高温/低温区域时对某个 ROI 内的聚合统计量(例如来自 Image.get_statistics 的 stats.mean())进行处理。
备注
温度测量要求 Lepton 处于灰度模式且未设置颜色调色板——线性的像素到温度映射仅在原始灰度输出上成立。若要为显示着色,请单独进行,方法是使用 Image.draw_image 并配合 color_palette= image.PALETTE_IRONBOW 将灰度帧绘制到 RGB 输出缓冲区上:
out = image.Image(csi0.width(), csi0.height(), image.RGB565)
out.draw_image(img, 0, 0, color_palette=image.PALETTE_IRONBOW)