基于热成像的动态多目标温度智能监测仪设计
2022-06-07江朝晖朱家微邰其乐岳旭东洪石兰
江朝晖,朱家微,邰其乐,岳旭东,洪石兰
(1.安徽农业大学 信息与计算机学院,安徽 合肥 230036;2.安徽省智慧农业技术与装备重点实验室,安徽 合肥 230036)
新型冠状病毒感染肺炎已经成为威胁群众安全和社会稳定的重大公共卫生事件[1],患者常出现发热、干咳等呼吸道症状[2],所以体温监测是“抗疫”的重要手段之一。目前,温度的测量方法主要包括接触式测温和非接触式测温[3],红外体温枪测量额温的方式比较流行[4],但是体温枪测量额温时工作人员与监测人员距离近,易产生交叉感染[5]。热成像测温摄像头虽然可以快速无接触监测,但是市面上的热成像测温摄像头动辄上千元,限制了应用和推广。本文欲用低功耗、可搭载深度学习框架的MCU 和微型红外热成像模块,设计一种新型温度监测设备,旨在提高温度监测的效率和精确度,实现多目标温度实时智能监测的功能,并解决低功耗MCU 搭载深度学习框架由于算力较低导致的视频卡顿问题,降低生产成本。此设备可以推广至各类小型场所,实时监测室内人员体温。
1 硬件结构
温度监测仪结构如图1 所示,硬件部分由MCU、热成像模块、LCD 显示屏和电源组成。MCU选用STM32H743,STM32H7 系列是ARM Cortex-M系列中的超高性能MCU,支持各种深度学习框架。STM32H7 在Cortex-M7 内核的基础上又增加了Cortex-M4 内核,形成了双内核结构,可以有效地降低工作负荷,且成本较低。热成像模块采用FLIR的新型高分辨率WIR 微型热成像模块Lepton 3.5,最后成像显示在TFTLCD 显示屏上。整个设备由额定输出功率为2.035 W 的可充电锂电池供能,1 000 mAh 的容量可使设备持续工作约6 个小时。
图1 温度监测仪结构框图
1.1 彩色热红外图像生成
Lepton 3.5 是FLIR 公司推出的新型高分辨率LWIR 微型热成像模块[6]。160×120 列阵格式渐进式扫描物体,自动成热红外图像。热红外图像每个像素点对应一个具体的温度值,共19 200 个温度值,每个像素的温度精确度约为0.050 ℃,并且自动进行温度补偿,避免输出图像受热像仪温度的影响。Lepton 3.5 使用SPI 通信协议传输视频图像数据,CCI(类似I2C)为控制端口协议,控制成像模式等功能。
在初始化Lepton 3.5 时,需要设置其工作模式为高增益模式。高增益模式可将红外传感器的大动态范围缩小到更合适的显示热红外图像的范围,增强输出图像,提高每一像素点的温度值精确度。测量物体温度时,通过映射操作设置合适的被监测物体的温度范围(例如,测量人体时温度范围设置为20~40 ℃左右),用来过滤其它发热源的温度,避免成像模糊的情况,然后设置成像模式为灰色图像。通过设置监测温度范围值,把Lepton 3.5 生成的红外温度图像限制在最大值和最小值之间,并缩放为0~255 之间的值。根据物体温度确定每个像素的灰度值,把灰色图像映射为彩色热红外图像。Lepton 3.5 显示的原始照片和修改后的彩色热红外图像如图2 和图3 所示。很明显,图3 的显示效果较好,更易于观察和目标识别。
图2 原始图像
图3 彩色热红外图像
1.2 物体温度计算
式(1)中,max 和min 分别为监测温度设置范围的最大值和最小值。
1.3 彩色热红外图像显示
彩色热红外图像由1.8 寸、像素为160×128的显示屏显示。显示屏是色彩模式为RGB565 的TFT LCD 显示模组,并且可以控制背光。LCD 显示屏支持3.3 V 供电,通过SPI 通信协议控制显示屏的读写功能,并有一GPIO 实现LCD 复位功能。
2 软件设计
软件部分的主要设计目的是实现目标检测的功能,并在算力相对较低的Cortex-M 系列处理器上搭载深度学习框架,实现无掉帧实时监测摄像头拍摄对象。
深度学习推进了计算机视觉领域的发展,用来解决人们预期的特定问题[7],目前在图像识别、场景识别和物体追踪等方面都已取得显著的效果[8]。一些深度学习框架也随之产生,TensorFlow、Caffe、Theano、Torch 等[9]受到青睐,其中TensorFlow 是目前最知名的支持各种神经网络算法的平台[10]。TensorFlow 适用于服务器端、大功率设备,但是随着微控制器广泛应用于各个领域,出现了在微控制器上运行深度学习的需求,于是TensorFlow 团队在2017 年底开源了TensorFlow Lite(TF Lite)[11]。运行在微控制器上的TF Lite 的机器学习模型仅有数百KB,使微控制器智能化成为可能。本系统的软件部分采用的即为TF Lite 框架训练识别人体模型。TF Lite 提供了多种语言的API,正式支持的有Java、C++和Python,Google 官方为Keil 等嵌入式开发平台提供了预生成项目文件的功能[11],直接调用与项目有关的头文件即可使用TF Lite 框架,并且已经针对Arm Cortex-M 系列架构的处理器进行了广泛的测试[11]。
2.1 数据采集和模型训练
如图4 和图5,采集243 张包含人体的环境图像和201 张不包含人体的环境图像并分类保存到独立文件夹中。
图4 包含人体的环境图像
图5 不包含人体的环境图像
根据热红外成像中的主要监测目标,为了提高人体识别的准确度,201 张不包含人体的环境图像中要尽量包含带有温度且温度与人体温度相似的不同物体。在模型训练中,444 张图像随机按5:1 的比例划分为训练集和测试集。如果使用TensorFlow 训练人体图像模型,接下来还需要把TensorFlow 模型格式(.pb)通过TOCO 转换工具转换为TensorFlow Lite 格式(.tflite),所以使用在线训练工具Transfer learning 直接生成TensorFlow Lite 格式的模型。训练周期为10,学习速率为0.000 5,允许训练结果最低准确率为60%,且使用数据增强功能提高准确率。
2.2 人体识别算法
目标检测和目标识别是两种不同的概念。目标检测是找出图像中所有感兴趣的目标,确定类别和位置[12];目标识别是判断图像中是否存在感兴趣的目标。大多数产品直接进行目标检测,确定人体位置、计算并显示人体温度。使用这种方法来确定人体位置较为可靠性,但是可能会消耗更多的资源,因此需要高算力的MCU。但MCU 强调的是低功耗、低成本,往往算力较低,所以在MCU 上一般都要精简AI 模型,合理取舍精度与算力,改进已有算法的性能[13]。为了能在低算力MCU 上实现目标检测的效果,设计了新的人体识别算法,算法流程如图6 所示。
图6 人体识别算法流程
彩色热红外图像像素点的灰度值与温度有关,根据人体温度在图像中对应的灰度值,定义RGB颜色值R 的范围是200 至255 的颜色区域为感兴趣区(ROI)。先判断彩色热红外图像中是否存在ROI,如不存在ROI 则不识别,继续判断下一帧图像;如存在ROI 则将其设置为“待检测窗口”,找到所有“窗口”后,对各个“窗口”进行目标识别操作,然后计算“窗口”的位置和大小,最后绘制框图添加相应的标签。
算法的初步思想是利用多尺度滑动窗口全局扫描输入图像[14]。“滑动窗口”中,“窗口”为设置的ROI,roi 格式包括ROI 的左上角顶点坐标、ROI 的宽度和ROI 的高度等位置信息,通过设置ROI 四个顶点的坐标,控制“窗口”移动的步长和“窗口”的伸缩比。预定义步长与伸缩比使“窗口”滑动。“滑动窗口”具体过程如图7 所示,图片大小为160×120,图片左上角坐标为(0,0)。扫描窗口①时,设置“滑动窗口”的四个顶点的坐标值分别为(0,0)、(0,60)、(80,60)、(80,0),识别窗口中是否包含人体,如果包含则计算出窗口的位置,将其框出并添加标签,然后以此方法依次扫描其他窗口。图7 中,依次识别①、②、③、④四个窗口,最后得出只有②和④包含人体。“窗口”的缩放比例和滑动步长需要人为设置且固定大小,所以最终的目标识别框图大小也是固定的,效果不算圆满,而且经过多次目标识别,最终也会因为微处理器算力不够导致视频卡顿。所以,还需要在“滑动窗口”的基础上进一步设计,主要为了减少“滑动”的次数,提高视频显示的流畅度,确定框图的大小和位置,使框图恰好包含人体。
图7 “滑动窗口”示意图
在设计硬件部分的时候,设置了监测的温度范围——温度阈值,生成了彩色热红外图像,在温度阈值内的物体是“彩色”的,其他物体全是黑色。如图8 所示,图中存在多个在温度阈值内的物体,定义RGB 值中R 在200 到255 之间的区域为ROI,设置扫描的窗口是整个ROI。如图8 的两个小图框为两个需要被扫描的窗口,分别对窗口进行目标识别,然后计算出窗口的位置将其框出,为包含人体的窗口添加标签。如果图中没有ROI,继续处理下一帧图像。简单的ROI 查找对微控制器来说非常容易。因此,这种人体识别的算法可以明显减少微控制器的工作量,且最终效果也非常符合要求,达到了目标检测的效果。
图8 热红外图像目标检测
3 实验结果
为便于观察,需进一步改进上述方法的显示问题。先隐藏图中所有的框图和标签,对于非监测目标,将其温度标记在其左上方;对于监测目标,先将其用白色框图框出,然后在框图左上方内侧标记其温度,在室温25 ℃和19 ℃左右时的显示效果分别如图9 和图10 所示。环境温度较高时背景非常模糊,而环境温度较低时背景较为清楚,但是对被监测物体的温度影响不大,监测出的温度仍然具有参考价值。从实验结果中得出,人体识别的准确率为99.7%,设计的算法能够实现无卡顿温度监测至少6 个目标。
图9 室温25 ℃时显示结果
图10 室温19 ℃时显示结果
4 结论
设计的温度监测仪由热成像模块Lepton 3.5采集热红外图像,在MCU(STM32H743)上搭载TensorFlow Lite 深度学习框架,找到热红外图像中的人体,计算并标记图中所有在温度阈值内的发热源温度。针对热红外图像以“滑动窗口”技术为基础设计出新的人体识别算法,解决了由于MCU 算力不足造成的视频掉帧问题,实现了多目标温度实时监测功能。与市面上价格昂贵的测温热成像摄像头相比,此设备不仅具有相同的温度监测功能,而且制造成本低,非常适合在办公室、实验室或者家庭等小型场所中安装,监测室内多人体温,实时掌握室内人员体温是否异常。
在图9 中,虽然一次性出现6 个检测目标仍然可以保证视频流畅。但是理论上,如果屏幕中出现的监测目标太多,以及高频目标监测也会导致视频流畅度下降。另外,当两个被监测目标重叠时,只能标记为一个目标,所以此监测方法还需进一步改进。