基于STM32与K210的人脸口罩识别非接触式测温系统设计
2024-08-03张志成
摘 要:该文旨在设计并实现一种基于STM32微控制器和K210开发板的人脸识别非接触式测温系统,以解决传统测温方式在效率和准确性上的不足,同时提高测温的便捷性和安全性。系统通过STM32微控制器进行整体控制,结合K210开发板进行人脸和口罩的识别。红外测温传感器用于非接触式地测量人体温度,而人工智能技术则用于提升识别精度。详细的工作流程包括图像采集、预处理、特征提取、匹配与识别以及温度测量。实验结果表明,该系统能够实现快速准确的人脸与口罩识别,并在非接触式测温中展现出良好的稳定性和准确性。其性能在多种测试场景下均表现优异,显示出在人脸识别和温度测量领域的广泛应用前景。综上所述,该文设计并实现的人脸识别非接触式测温系统具有较高的实用价值和广泛的应用范围。未来,该系统可进一步应用于公共场所的测温管理、医疗诊断、安全监控等领域,为相关领域的研究和实践提供有力支持。同时,也需持续优化算法和提高硬件性能,以应对更复杂的应用场景和更高的识别要求。
关键词:人脸口罩识别;非接触式测温;K210;STM32;系统设计
中图分类号:TP391.41 文献标志码:A 文章编号:2095-2945(2024)22-0038-04
Abstract: This paper aims to design and implement a face recognition non-contact temperature measurement system based on STM32 microcontroller and K210 development board, in order to address the inefficiencies and inaccuracies of traditional temperature measurement methods, while improving the convenience and safety of temperature measurement. The system is controlled by the STM32 microcontroller, combined with the K210 development board for face and mask recognition. An infrared temperature sensor is used for non-contact measurement of human body temperature, and artificial intelligence technology is used to improve recognition accuracy. The detailed workflow includes image acquisition, preprocessing, feature extraction, matching and recognition, as well as temperature measurement. Experimental results show that the system can achieve fast and accurate face and mask recognition, and exhibit good stability and accuracy in non-contact temperature measurement. Its performance is excellent in various test scenarios, showing a wide range of application prospects in face recognition and temperature measurement. The face recognition non-contact temperature measurement system designed and implemented in this paper has high practical value and a wide range of applications. In the future, the system can be further applied to temperature measurement management in public places, medical diagnosis, security monitoring, and other fields, providing strong support for research and practice in related fields. At the same time, continuous optimization of algorithms and improvement of hardware performance are needed to cope with more complex application scenarios and higher recognition requirements.
Keywords: face and mask recognition; non-contact temperature measurement; K210; STM32; system design
随着人工智能技术的不断发展,人脸识别技术已经成为一项重要的应用。人脸识别技术通过识别人脸特征,实现身份验证、安全控制等目的,被广泛应用于测温、口罩识别等方面。同时,非接触式测温技术是一种通过红外线或其他非接触方式测量人体温度的技术,这种技术可以在不接触人体的情况下快速测量体表温度,避免了传统体温计需要接触口腔或腋下的风险,被广泛应用于公共场所、医院、学校等场所。基于此,从技术进步和创新的角度考量,人脸识别与非接触式测温系统的结合能实现2种不同功能的整合和系统的全方位升级,这不仅推动了相关技术的发展,也为其他领域的创新提供了借鉴和参考。总之,人脸识别与非接触式测温系统的结合可以提高识别准确性和效率、促进智能化发展等方面都具有重要的意义和价值[1]。
1 系统设计
1.1 总体方案设计
人脸口罩识别与非接触式测温系统由STM32F103C8T6单片机、K210图像视觉识别模块、TN901红外测温传感器、OLED屏幕、按键模块、蜂鸣器等组成。系统的实物图与总体框图如图1、图2所示[2]。
系统上电之后,K210图像视觉识别模块开始检测识别人脸,当用户第一次识别时,需要按下K210的学习按键进行人脸学习,学习成功后K210模块的LCD屏幕显示用户名称,并提示用户戴口罩。佩戴好口罩后,K210将再进行口罩识别,并在K210模块的LCD屏幕显示用户名称,学习、识别过程完成,K210将识别结果通过串口发送给STM32单片机,然后TN901测温传感器开始检测当前人体温度,将检测温度值通过SPI通信协议发送给STM32单片机,并在OLED屏幕上显示当前用户身体测试部位的温度,如果超过正常体温或者没戴口罩,蜂鸣器报警提示[3]。
1.2 系统硬件设计
本次系统设计,采用模块化设计的思想,人脸识别与非接触式测温系统由STM32F103C8T6单片机、K210图像视觉识别模块、TN901红外测温传感器、OLED屏幕、按键模块和蜂鸣器等组成。
人脸识别与口罩识别需要用到核心硬件是K210的内置KPU,是一种专门用于边缘计算设备的神经网络处理器,具有高度并行的处理能力和低功耗的特点,能够在边缘设备上高效地完成神经网络的训练和推理任务。本次系统使用的主芯片Kendryte K210是双核64位RISC-V处理器,具备视听一体、自主IP内核与可编程能力强的特点,支持机器视觉与听觉的多模态识别。
系统测温硬件选用的是红外测温仪TN-901,测量温度范围为:-33~220℃(-27~428°F),±0.6℃的测量精度,分辨率为1/16℃,性能良好,能够满足本次系统设计的要求。
1.3 系统软件设计
1.3.1 系统程序设计
主控程序的主要功能是进行人脸口罩识别和温度测量,并根据识别和测量的结果进行相应的操作。程序的主要流程如下:首先进行系统初始化,包括RCC、NVIC、GPIO、USART、TN901和OLED等硬件初始化。然后程序进入主循环,不断检测GPIOB引脚的状态,如果检测到引脚为低电平,则发送一个信号给USART1,表示扫描到口罩。扫描到口罩后,使用test_flag的变量来表示当前的状态,根据test_flag不同的状态值执行不同的操作。其中,状态0显示“scan mask”在OLED屏幕上,表示正在进行口罩识别。状态1发送10个信号给USART1,显示“again scan”在OLED屏幕上,表示需要重新进行口罩识别。状态2发送10个信号给USART1,显示“temp scan”在OLED屏幕上,表示正在进行温度测量。状态3显示“again temp”在OLED屏幕上,表示需要重新进行温度测量。状态4显示“open door”在OLED屏幕上,然后等待一段时间后重新开始扫描口罩。温度测量当test_flag等于2或3时,程序调用TN901_ReadData()和TN901_Temp()函数进行温度测量。当test_flag等于4时,程序结束并重新开始扫描口罩,等待下一次循环[4]。
1.3.2 人脸与口罩识别程序设计
本系统的人脸与口罩识别使用的是YOLOv2算法,是一种用于实时目标检测的卷积神经网络。需要将算法部署在K210的KPU中,YOLO算法是一种快速而准确的目标检测算法,通过将目标检测任务转化为回归问题,并利用卷积神经网络提取图像特征,实现对图像中目标的准确定位和分类,其网络结构包含了多个卷积层和池化层,能够全局地捕捉图像的上下文信息,并且支持多尺度和多类别的检测。YOLOv2相对于YOLOv1采用了更深的网络架构,引入了锚框和多尺度训练等新的技术,同时也加入了批量归一化和高分辨率分类器等常见技术来提高训练过程的稳定性和检测准确率[5]。
本系统人脸与口罩识别的YOLOv2算法模型,开发时首先需要先到MaixHub开放平台上创建人脸和口罩数据集,采集和在线标注人脸和口罩训练数据,接着配置训练参数,定制训练,选择部署平台和训练参数,然后开始训练,创建训练任务,自动在云服务器上进行人脸和口罩训练,然后实时查看训练情况,最后将训练的人脸和口罩模型部署在设备上。在部署时要按照平台提示说明下载训练的模型,获得加密版本的kmodel模型,也就是smodel模型,smodel模型包含了机器码,机器码是一机一码的一种加密方式,用于模型文件的加密,如果使用别的机器码去加密或者下载以smodel为文件后缀的模型文件,开发板无法使用该模型文件。从平台下载后得到3个smodel模型文件,将所有模型拷贝到SD卡,在编写完main.py脚本后,重启K210模块会自动执行main.py脚本,开发时通过手动执行查看终端的运行日志,排查错误。
在MaixHub开放平台上获得人脸与口罩识别的模型后,开始编写main.py脚本,本系统的人脸与口罩识别main.py脚本主要分为以下几个过程:首先加载人脸关键点检测模型、口罩识别模型、人脸特征提取模型。然后运行人脸口罩检测模型,在图片中找到人脸位置并框出人脸,将裁出的人脸图片转换成KPU接收的格式。接着运行人脸5点关键点模型,获取到左眼、右眼、鼻子、左嘴角和右嘴角的位置,并对原始图片人脸图片进行仿射变换,变换为正脸图像,将正脸图像转为KPU格式。最后使用人脸196维特征值模型计算正脸图片的196维特征值,计算得到最终的人脸特征Feature,将得到的人脸特征与之前保存过的人脸特征进行对比得到一组分数,选择其中最大的一个分数,且该分数超过75分就认为识别出该人,并根据对应下标从Names列表中得到该人的姓名,整个人脸与口罩识别的模型创建与部署流程结束[6]。
1.3.3 非接触式测温程序设计
整个测温程序主要分为读取数据与根据读取的温度数据进行转换2部分。
1)温度数据读取。在读取温度数据时,需要定义一个用于读取温度传感器数据的函数TN901_ReadData,这个函数主要通过连续读取传感器的数据,并检查数据的有效性,从而得到目标温度和环境温度。通过自定义函数Set901A、Reset901A、Read901C和Read901D等,来进行温度数据的读取。读取数据的程序大致流程如下:通过Set901A启动TN901A模块,通过Reset901A启动连续测温功能。等待一段时间后,连续读取5个字节的数据,每字节8位,一共读取40位数据,并检查读取的数据是否有效。在检查时,首先检查第一个字节是否为0x4c或0x66,以及第五个字节是否为0x0D,如果满足这2个条件,那么接下来的3个字节数据和第四个字节数据的总和应该相等。如果满足这些条件,说明读取的数据是有效的。然后根据第一个字节的值,判断是目标温度还是环境温度,如果是目标温度,则将数据存入Temp.target_temp数组,并增加目标温度读取次数,如果是环境温度,则将数据存入Temp.environment_temp数组,并增加环境温度读取次数,延迟一段时间后,再次进行上述操作。在函数结束时,再次调用Set901A,结束本次数据读取过程[7]。
2)温度数据转换。温度数据转换需要使用处理TN901温度传感器数据的函数TN901_Temp,这个函数将接收到的有效数据计算为实际温度,并根据温度值执行相应的操作。程序中的变量temp、tf_low、tf_high、tbody和tf都是用于计算和存储温度数据的。函数的主要流程如下:首先,TN901_Temp函数检查flag的值,如果为target,则表示需要处理目标温度数据,接着在目标温度的处理中,TN901_Temp函数首先将接收到的2个字节数据组合成一个16位整数temp,然后将其转换为浮点数,并减去273.15f,得到实际温度值Temp.target。接下来,TN901_Temp函数使用不同的公式计算出tf_low和tf_high的值,这2个值用于确定温度范围,并根据温度值Temp.target与tf_low和tf_high的比较,TN901_Temp函数计算出tbody的值。如果tbody的值在34.0f到37.0f之间,TN901_Temp函数将实际温度转换为字符串格式,并在OLED屏幕上显示出来。同时,设置test_flag的值为4,表示需要打开门。如果温度值低于tf_low,则显示“too far”;如果温度值高于37.0f且低于43.0f,则显示“Over”;然后设置相应的标志和进行延迟操作。如果flag的值不为target,则表示处理环境温度数据。TN901_Temp函数同样将接收到的2个字节数据组合成整数,并转换为浮点数,然后减去273.15f得到实际温度值tf,并根据温度值tf的大小,函数计算出tf_low和tf_high的值,整个数据转换流程结束[8]。
2 系统测试
2.1 实验测试设计
系统在测试时,应该从以下几个方面进行测试。①人脸识别准确性测试:召集多位测试人员,从不同图像中测试人脸与口罩识别的准确性。②温度测量准确性测试:已知测量物体的实际温度,用测量值与实际值测试物体温度的准确性。③系统响应时间测试:测试人员从人脸识别开始到温度测量结束,所需要的单次测量的时间。④环境适应性测试:在不同的光照条件下,测试人脸识别和温度测量的准确性。⑤系统稳定性测试:系统长时间运行,观察是否出现异常或故障。
2.2 测试数据
测试数据见表1—5。
2.3 实验结论
对表中的测试数据进行分析后,得出以下结论。①系统能够准确多次识别不同的人脸、口罩,识别的准确率较高,人脸识别算法表现良好。②系统能够准确测量物体的温度。测量误差较小,红外测温传感器性能稳定。③系统能够快速响应人脸口罩识别和温度测量操作,总响应时间较短,响应速度较快。④系统能够保持较高的识别准确率和温度测量误差较小,环境适应性良好。⑤系统在长时间运行过程中没有出现异常或故障,稳定性较好。通过以上多方面的测试实验,可以全面评估基于STM32与K210的人脸识别非接触式测温系统的性能和可靠性,为产品的进一步优化和改进提供依据。
3 结束语
本文介绍了一种基于STM32与K210的人脸口罩识别非接触式测温系统。该系统利用STM32微控制器和K210开发板,结合红外测温技术和深度学习算法,实现了人脸识别和温度测量的功能。通过硬件和软件的优化设计,该系统具有较高的准确性和稳定性,能够广泛应用于人脸识别和温度测量领域。同时详细介绍了系统的设计原理、硬件架构、软件实现和测试结果,为相关领域的研究和实践提供参考。该系统的设计理念和技术应用,对人脸识别和温度测量领域的发展具有重要意义。
参考文献:
[1] 何润韬.基于K210的口罩人脸检测与测温系统设计[J].中国科技信息,2023(11):74-76,79.
[2] 覃雪婷,黄梅春,林雪琼,等.基于STM32的红外防疫测温系统设计[J].电子制作,2023,31(18):51-54.
[3] 王孟强.基于人脸识别的红外测温系统实现[D].北京:北京交通大学,2022.
[4] 齐曼,胡乃瑞,安天洋,等.基于STM32的口罩识别及无接触测温系统的实现[J].工业控制计算机,2022,35(3):128-130.
[5] 胡徐胜,陶彬彬,曾胜.基于STM32的测温与身份识别系统设计[J].天津理工大学学报,2021,37(4):36-39.
[6] 丁一峰,李永铖,尹宏钊,等.基于STM32的智能身份识别与红外防疫测温系统[J].现代信息科技,2022,6(10):57-60.
[7] 谭俭辉.基于K210人脸身份识别与测温系统设计[D].广州:广东工业大学,2021.
[8] 周惠,刘洋,朱秀委,等.基于红外传感与图像处理的无线通道测温系统的设计[J].医疗装备,2022,35(23):38-42,45.
作者简介:张志成(1994-),男,工学硕士,助教。研究方向为物联网、人工智能。