目录
摘 要
本系统与此次新冠疫情息息相关,是一个由视觉部分、红外测温部分、CPU处理部分组成的简易无接触温度测量与身份识别装置。选用STM32F103单片机进行数据处理和报警控制,并配合TFT LCD屏和轻触按键搭建了可实时显示温度相关信息的简易GUI;同时利用OpenMV模组进行视觉识别,实现识别被测者身份、是否符合防疫要求(如佩戴口罩)功能。测试表明,在题目所给定的要求下,本系统能实现误差范围内温度测量及超标报警,身份识别模块在满足要求同时还能进行一定的机器学习。
关键词:红外测温、机器视觉、身份识别、机器学习
1.系统方案
1.1.机器视觉模块选择
方案一:OV7670摄像头
OV7670是一种图像传感器,提供单片VGA摄像头和影像处理器的所有功能。其VGA图像最高达到30帧/秒。可以控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、饱和度、色度等都可以通过SCCB接口编程。但对人脸识别等时需要另加单片机处理,会加重控制系统负担。
方案二:OpenMV摄像头模组
OpenMV有方便的机器视觉方法库,采用Python编程,简单易用。它基于STM32H7处理的机器视觉模块,集成了OV7725摄像头芯片和镜头。简单的视觉处理可以达到80帧,可以处理Haar模板进行通用对象检测,并配有内置的Frontal Face 模板和Eye Haar模板来检测人脸和眼睛,结合多种特征检测算法可以实现身份识别等功能。
综合以上考虑,本组选择方案二。
1.2. 红外测温模块选择
方案一:MLX90614红外测温传感器
MLX90614 是一款红外非接触温度计。TO-39金属封装里同时集成了红外感应热电堆探测器芯片和信号处理专用集成芯片。由于集成了低噪声放大器、17 位模数转换器和强大的数字信号处理单元,使得高精度和高分辨度的温度计得以实现。温度计具备出厂校准化,有数字 PWM 和 SMBus(系统管理总线)输出模式。续传送温度范围为-20-120 ˚C 的物体温度,其分辨率为 ±0.14 ˚C。
方案二:AMG8833红外热像仪传感器
AMG8833红外热像仪传感器是一个8x8的红外热传感器阵列。当连接到微控制器时,它将通过I2C返回一组64个单独的红外温度读数。结构紧凑而简单,便于集成,比AMG8831提供了更高的性能。测量温度为0-80°C,精度为± 2.5°C。可从远达7米的距离检测人类。大帧频为10Hz,适合创建人体探测器或迷你热像仪。但从减小误差角度考虑,其精度不及MLX90614。
综合以上考虑,本组选择方案一。
2.设计与论证
2.1.红外测温方法
MLX90614 是由STATE MACHINE控制物体温度和环境温度的测量和计算。MLX81101 采集到的人体温度先与环境温度进行计算,然后经过低噪声低偏置增益可调斩波放大器放大,再经过ΔADC调制器转换成单一比特流,之后传输到 DSP 进行进一步处理,最后的结果通过 PWM 或 SMBus 模式进行输出。其中,通过 EEPROM配置的可编程有限脉冲响应数字滤波器和无限脉冲响应数字滤波器减少输入信号的带宽,以实现预期的信噪比和刷新率。有限脉冲响应数字滤波器的输出最终存储在内置 RAM 中。并将结果通过 PWM 或是SMBus模式输出。
2.2.身份识别方法
Haar特征分为三类:边缘特征、线性特征以及中心和对角线特征,这些组合形成特征模块。特征模块的特征值为模块内白色矩形的像素之和减去黑色举行的像素之和,反映的图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。通过Adaboost算法的应用可以判断使用何种特征模块能更好地实现对人脸和非人脸的区分。
局部二值模式(LocalBinaryPattern,LBP)是一种有效的纹理描述算子,它具有旋转不变性和灰度不变性等显著的优点。基于LBP的人脸识别方法一般是将图像划为几个互不重叠的区域,分别进行LBP算法处理,通过各区域的统计直方图完成识别。
(3)自建人脸库
曾经有考虑过使用随意一张人的照片作为人脸库中照片,这样对人脸库图片的要求将大大降低。但为保证识别的可靠性,在进行人脸检测与识别时不仅要对OPENMV拍摄的图像进行人脸检测,而且对人脸库的图片也进行人脸检测,以确保整个识别过程是拍摄到的人脸是在与人脸库中的人脸进行识别。
因此对于人脸库的人脸图片,需要满足要求:图片仅包括完整人脸,背景统一为白色或黑色。对图片需要进行的操作有:人脸居中—裁剪图片—直方图均衡。
对于检测人是否戴口罩的识别,我们只需利用上述的方法,先给不同颜色、形状、颜色的口罩做特征点检测,建一个类似于人脸库的口罩库,用分类器优化排序,最后进行模板匹配。
2.3红外测温相关参数计算
IR 传感器包含有若干个串接的热电偶,热电偶的冷接头置于芯片衬底上,热接头置于薄膜上。薄膜通过吸收或是辐射 IR 使自身加热会冷却。
(1)理想热电堆输出信号为:
(1)
其中To是物体的绝对温度(开尔文),Ta是传感器芯片的绝对温度,A是敏感度。
一个附加的片上温度传感器用来测量芯片的温度。测量完两个传感器的输出后,对应的环境温度和物体温度被计算出。计算是由内部 DSP 处理的,它可产生数字输出,并和测量温度成线性比例。
(2)温度值换算:
微处理器通过相应的写命令和读数据指令,从MLX90614的RAM中地址为07H的存储单元里读出16位温度数据,由高8位(DataH)和低8位(DataL)组成,数据范围从0x27AD到0x7FFF。读出的数据(DataH:DataL)(:表示将高8位和低8位接合在一起组成16位数据)按照式(2)换算为温度T(单位为℃)。
T=(DataH:DataL)×0.02-273.15 (2)
例如:DataH:DataL=0x27AD,代入式(2)中T=-70.01℃.
2.4 OpenMV相关参数计算
Adaboost算法是通过无数次循环迭代来寻求最优分类器的过程,通过下列积分式可快速得到Haar特征值:
(3)
ii(x,y)为经过计算后积分图上的各个像素点的像素值。一个完整的图像包括每个像素的左方及上方的区域总和。
3.电路及程序设计
3.1.系统组成与原理框图
本系统主要以STM32主控芯片组为核心,由红外测温模块、机器视觉模块、蜂鸣器报警模块、LCD显示模块、超声波测距模块、12V电池组以及12V-5V稳压模块供电组成。
图3.1 系统组成与原理框图
3.2.单元电路设计
通过 SMBus 将 MLX90614 的 RAM 与主控芯片 STM32F103 连接起来,以读取其测得的温度。MLX90614 与 STM32 接口电路如图 4.4 所示。MLX81101 只有四个引脚,即电源端 VDD,接地端 VSS,时钟信号输入端 SCL 和数字信号输入输出端 SDA。VDD与 3.3V 电源相连进行供电,为了确保 SDA 和 SCL 能够在总线空闲时都处于高电平状态,电路中设计了两个上拉电阻。为了使电流低于 1.3mA,阻值选用常用的 4.7kW。电路图3.2。
图3.2 MLX90614与STM32连接图 图3.3 OpenMV与STM32的串口连接图
我们需要把采集到的数据信息传到主控STM32上,所以只用到了串口通信。电路图3.3。
电路图3.4。
图 3.4 LCD与STM32的连接图 图3.5 报警模块电路
当温度过高时,BEEP 为高电平,三极管处于放大状态,蜂鸣器响;当温度处于正常范围内,BEEP 为低电平,三极管处于截止状态,蜂鸣器不工作。电路图3.5。
U1为总电源开关,F1 为 1000mA 自恢复保险丝,用于保护 USB。U2是 12V转5V稳压芯片,分别为最小系统板和OpenMV提供 5V 电源。
图3.6 电源模块电路
3.3. MLX90614程序流程图
非接触式红外温度传感器测额温或是体表温度和实际体温是有一定的差异的。因此本系统采用迈来芯原厂提供的一个额温转体温参考算法(low&if high),来提高测温精度,以补偿后的温度作为人体体温输出,其它物体温度不变。
图3.7 MLX90614程序流程图
3.4. OpenMV程序流程图
图3.8 OpenMV程序流程图
4.测量方案与测量结果
4.1.测量方案及测试条件
4.1.1红外测温模块
温度采集形式有水银温度计、DS18B20温度传感器、测温枪和MLX90614等,最终选用适用范围和精度较好的医用厂商测温枪和MLX90614对比测试,并在不同距离情况下进行测量。
采集温度的对象包括室温、人体额头温度、烧杯中水的温度。
采集对象 采集形式 | 室内温度 | 室外温度 | 额头温度 | 额温转体温 | 手掌温度 | 烧杯温水 | 烧杯热水 |
测温枪(3cm) | 24.4 | 28.4 | 33.4 | 36.8 | 31.4 | 20.6 | 48.4 |
测温枪(4cm) | 24.5 | 28.4 | 33.4 | 36.8 | 31.3 | 20.5 | 48.3 |
测温枪(5cm) | 24.6 | 28.3 | 33.2 | 36.7 | 31.1 | 20.5 | 48.1 |
MLX90614(3cm) | 24.3 | 28.2 | 33.1 | 36.5 | 31.1 | 20.3 | 48.3 |
MLX90614(4cm) | 24.1 | 28.0 | 32.9 | 36.3 | 31.0 | 20.1 | 48.2 |
MLX90614(5cm) | 23.9 | 27.9 | 32.8 | 36.1 | 30.8 | 20.1 | 48.2 |
注:为符合题目基本要求1-4cm,距离测试范围最终选择3-5cm。温度单位:℃
4.1.2身份识别模块
在不同距离,不同角度,不同光照,不同背景下,对不同被测者进行身份识别测试,以及检测是否戴口罩,分析准确率。
测试者 测试者 | 默认环境 | 距离20cm | 距离30cm | 距离50cm | 侧对 | 光线过曝 | 光线过暗 | 黑墙背景 | 人群背景 | 能准确检测是否戴口罩 |
组员1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
组员2 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
组员3 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
陌生人1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
陌生人2 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 |
注:默认环境为距离40cm,角度正对,光线良好,白墙背景。1代表成功,0代表失败。
4.2. 测量结果及分析
经过上述方案的检测,误差均没有超过题目要求的最大允许误差。
(1)测量距离的远近会对人脸识别和测温的准确性产生很大影响。
对人脸识别主要体现在LBP值的差异上。当人脸与镜头距离不合适时,有出现过对10个样本人脸进行识别时出错。推荐人脸与镜头的距离为30厘米并正对镜头,可适当进行调整。在镜头固定的情况下,可通过测距模块或者划线提示人脸与镜头的恰当距离。
对红外测量主要体现在两方面。一方面当测量距离增加时,由于红外温度测量系统的视场不变,如果被测物体不能填满视场,那么系统检测到的来自被测物体的红外辐射能量就会减少,从而导致测量精度降低另一方面,当测量距离增加时,在大气吸收的影响下,温度测量系统接收的辐射将减少,导致测温系统产生误差。推荐距离为4cm。
(2)光线造成的影响也是重要因素。
主要体现在人脸检测环节,过曝或过暗都会导致人脸检测的不准确,即框出的人脸仅为实际人脸的一部分或根本框不出人脸。在该情况下人脸识别的准确率大大降低。在进行人脸检测和识别时,应尽量保持自然光,必须确保没有反光现象,同时也要保证光线不能过暗。
根据测试数据,可以得出以下结论:
1、测物以及测液体(水)时,红外测温可以完成测量,误差小于0.5℃。
2、在测人额温以及体表温度时,红外测温可以完成测量,误差小于1℃。
3、识别被测者身份以及检测是否戴口罩时,可以准确识别并显示,在环境较差、距离较不合适,或者采样人数超过10组会出现误差。
综上所述,本设计达到设计要求。
5.参考文献
[1]李遥,丁艺涛,潘登,郁金明,郭丙君.基于机器视觉的银行ATM机风险报警系统[J].科技视界,2019(19):53-55.
[2]张日欣.基于MLX90614的非接触式体温测量系统设计[J].软件导刊,2009,8(03):105-107.
[3]葛泽勋.医用红外测温仪及其关键技术研究[D].长春理工大学,2019.
6.附录
附录A 测温模块MLX90614程序部分代码
voidMLX90614_Init(void){
IIC_Init();//初始化IIC接口
}
//在MLX90614指定地址读出一个数据
//ReadAddr:开始读数的地址
//返回值:读到的数据
u16MLX90614_ReadOneByte(u8ReadAddr){
u16data;Datastorage(DataHataL)
u8Pec;
u16DataL=0;
u16DataH=0;
IIC_Start();
IIC_Send_Byte(ReadAddr);//发送器地址0XB4,写数据
if(!IIC_Wait_Ack())
IIC_Send_Byte(0x07);//发送Command0X07
else
return90;
if(!IIC_Wait_Ack())
IIC_Start();//重开始
else
return91;
IIC_Send_Byte(ReadAddr+1);//写器件地址(读)
if(!IIC_Wait_Ack())
DataL=IIC_Read_Byte(1);//读低8位
else
return92;
DataH=IIC_Read_Byte(1);//读高8位
Pec=IIC_Read_Byte(0);//读PEC
IIC_Stop();//产生一个停止条件
data=(DataH<<8)|DataL;
returndata;
}
voidMLX90614_PwmToSMBus(void)//data=DataHatal{
IIC_SCL=0;
delay_ms(5);。。。
IIC_SCL=1;
}
附录B 初始化模块程序部分代码
附录C OpenMV人脸识别和机器学习部分代码
人脸识别部分
机器学习部分
附录D LCD显示屏GUI设计部分代码
模式切换界面设计
按键控制部分设计
7.实物作品展示
依稀记得我们最后的成绩离省一只差了零点几分,除了拓展部分的5分,其它都是满分,确实有点意难平吧。