基于OpenMV的测温与身份识别系统
2022-10-31莫宇冰杨子靖赵康淞张成超周燕龙
莫宇冰,杨子靖,赵康淞,张成超,周燕龙
(广西民族师范学院 数理与电子信息工程学院,广西崇左,532200)
0 引言
随着世界科学的推动与社会、人民生活水平的提高以及生产技术的不断进步,工业的不断壮大,群众对生活的质量有了更高的追求。针对现在的疫情防控期间,非接触式红外测温的需求越来越大,尤其是无接触式的人体温度测量和身份识别都发挥了巨大作用。体温作为我们人体健康的一个重要标准,当人体体温过高或者体温过低都是属于不健康现象,而如何快速有效地测量人体体温成为当前研究的热点,也成了我们要研究的方向。基于此,本文设计了一种有关人体追踪温度检测系统,本系统结合了当下疫情对身份识别和无接触式红外测温的需求,实时监测人员的体温状态,对疫情增加了一定的防控作用,可以有效提高管理水平。
1 系统方案设计
1.1 选择设计方案
1.1.1 主控芯片的选择方案
主控芯片主要使用STM32最小系统和STM32F103ZET6推出的基于Cortex-M3为内核的32位微控制器。STM32F 103ZET6有着144个接入口,存储器共64kb,有8种定时器。闪存微控制器还有着低率、低电压的极佳功能。主芯片内的CPU包含了两个全速接口CAN和USB,有着高效的速度以及其他出色的表现。
STM32最小系统拥有40个引脚,flash和RAM(64&20),4个定时器,各2个I2C、SPI通信,3个串口通信信息功能,由ST公司推出的STM32系列的芯片都能很好地完成好本项目的数据处理和制作,但针对项目的低成本高效率来说,最小系统足矣。
1.1.2 无接触温度测量模块的选择方案
方案一:采用一种以红外线辐射量的热电堆型号的红外传感器模块AMG8833。AMG8833模块矩阵为8×8。能通过数据返回64个独立温度数据读数,内容紧凑而简单且容易集成,但该传感器只能支持I2C。内含有配置的中断引脚,可以触发。刷新数据为10kHz。测温温度范围为-20°C~80°C,分辨率0.25°C。该传感器只支持I2C。
方案二:采用红外测温模块MLX90614。MLX90614的物体温度范围为-70°C~382.2°C,环境温度范围在-40°C~125°C,分辨率/精度为0.02°C。其中里面有着DSP功能非常强大和17比特的adc和其他元件能实现高精度的温度测量,红外测温能根据物体的是红外辐射量返回温度数据、数据温度分辨率较高、响应速度快、测温范围和对象广、测温上限的限制对他没有影响、稳定性好等特点。
针对以上的相对比较,基于 MLX90640 传感器分辨率比 AMG8833高多了,且物体温度范围与环境温度范围较大,所以选择方案二。
1.1.3 身份识别模块选择方案
OpenMV是一个造价低,功能极其强大的机器视觉处理模块。它以STM32F427CPU为主要核心,集成了OV7725摄像头芯片,在极小的硬件模块上高速地运行着机器视角算法,为Python提供编程接口。OpenMV针对MCU,对标ARM Cortex M犀利内核架构。对于我们项目所需要的功能来说很合适。
1.2 方案设计结构分析
基于OpenMV的快速温度测量与身份识别系统利用MLX90614红外传感器、面部识别模块可以获取人的体温和人脸信息,判断他是否符合防疫标准和身份是否正确,经过信息调理之后,便把数据发送给STM32单片机进行运算处理与判断,并将人的身份和人的体温送OLED显示,人体体温不在正常范围内就会进行相应的动作。
STM32作为主控芯片,用于读取温度传感器传输过来的数值,通过进行数据转换处理,再让在OLED与数码管上显示处理后的温度信息,将获取到的温度数值与设定的温度上下限进行比较,当输出的数值过高时STM32主控芯片给蜂鸣器发送信号,使其报警;当输出的数值过底时则STM32主控芯片给LED发送信号,使LED进行闪烁提示。与此同时,接收视觉模块发送过来的信息,并显示在OLED屏上。
2 控制系统开发及原理图
2.1 主控模块
STM32F103C8T6是采用LQFP48封装,属于ST公司微控制器中的STM32系列。STM32读取温度传感器通过串口通信传输过来的数值,进行数据编码、译码等处理,然后将处理后的温度信息通过I2C通信传输到OLED上,把当前传输过来的温度数值与配置好的温度值进行比对,当大于设定上限时蜂鸣器进行报警警示,当小于设定温度下限时进行LED闪烁提示。
2.2 OpenMV模块
OpenMV是一个功能庞大的机器视角模块,有相关例程,且容易上手,提供人脸识别、口罩识别等相关知识,与其他硬件通信时可以选择通过UART,I2C,SPI和GPIO等接口,该模块集成了0V7725摄像头芯片,相比于市场上的OpenCV拥有丰富的视觉开发,在硬件上,通过算法的编程高精度的核心视觉算法。我们需要运用到Python语言,通过编写代码来完成各种机器视觉相关的任务。使得OpenMV可以进行无接触式人脸识别。编程的便利性能够用Python语言开发机器视觉函数。
该模块在硬件上拥有丰富的开源代码,使开发人员能方便地学习并能高效地专注于算法的编程。该系统使用TensorFlow生态系统进行训练和优化,并将深度学习的模型使用到设备上。神经网络模型可以通过Edge Impulse平台所具有的一些神经网络模型来训练,使用Edge Impulse在线训练适用于OpenMV的神经网络模型主要可以分为:数据集采集、上传、训练以及部署,训练好之后,将使用收集到的测试数据来检验模型。可以很好地配合OpenMV内置的识别算法,放入模型进行特征化的识别。人脸识别采用Haar算子,匹配采用训练模型。基于OpenMV模型的图像采集设备通过预先输入身份信息,利用Haar特征的cascade分类器和image模块下构造函数实现初始化模块的身份识别,加载模型检测、采集图像特征值、提取局部特征值文件进行对比。通过STM32F103C8T6主控芯片向OLED输出人的身份信息。
图1 温度测量及身份识别系统结构框图
2.3 MLX90614 红外测温模块
红外测温模块是通过被测物体发出的红外辐射光来确定其物体的温度可测范围在70°C~382.2°C,环境的可测范围在-40°C~125°C之间。MLX90614 只作为从动器件使用。一般来讲,MD是通过从动地址 (SA)选择从动器件并开始数据传输。通过不断的测试温度与体温枪不断地对比得出结果,确定温度的计算公式。主函数中只需使用SMBus_ReadTemp()这一函数即可得到所测得的温度值。
float SMBus_ReadTemp(void);
2.4 Micro Python语言
MicroPython有多个不同硬件平台的移植版本,用户实现硬件底层的访问和控制完全可以通过Micro Python脚本的语言,比如说控制红外遥控、LED灯泡、OLED、读取电压响应数据、控制霍尔电机、访问SD卡等。
3 系统程序设计
前端MCU程序采用的是Micro Python语言获取摄像头的一张照片,通过运算人脸模型对获取的照片进行人脸识别,对获取的数据整合通过串口发送到主控芯片,主控芯片在进行运行判断,把结果输出到OLED进行数据显示。
图2 原理图
3.1 人脸识别设计
系统开机启动,完成初始化摄像头的各项参数,加载Haar cascade模型,进行捕捉图像,从本地获取特征值文件进行比对,把比对到的数据传给主控芯片,其流程图如图3所示。
图3 人脸识别流程图
3.2 测温流程
MLX90614红外测温,采用MLX90614,主要是因为它可以无接触测温,并且它的精度能精确到0.02°C。它通过探器探测其工作范围,从而得出测量热辐功率,总结出目标的温度。在这里使用的是SMBus协议,通过不断地测试温度,并将结果与体温枪进行比较,确定温度的计算公式。在主函数中,只有使用SMBus_ReadTemp()函数,才能得到所测得的温度值。
4 实验结果及分析
系统通过使用OpenMV的集成开发环境运行Mircro Python脚本相结合。在实验测试数据中,只要摄像头捕获到人脸,人脸识别系统就能够正确识别出人脸并进行特征值的判断。使用在线训练模型网站Edge Impulse的特征值判断平台提供的一些神经网络模型进行训练,这些模型可以与OpenMV的内置识别算法很好地配合,并放入模型中进行特征化的识别,对进行训练好的模型可以直接使用。利用mlx90614测温模块,通过保持一定的距离进行测量人体体温,获取相应数值返回给主控芯片,进行数值运算,主控芯片通过I2C通信方式把得到的准确数据发送给OLED进行显示。
图4 测温流程图
图5 和图6是网络训练和温度测量的一些成果图,训练验证的识别准确率97%。运行帧率在2fps左右。网络训练好的模型可以直接供OpenMV4 Plus使用,视觉模块再将捕捉到的人脸进行特征值识别,传到主控芯片判断后通过串口发送到OLED显示结果。与此同时,测温模块进行温度测量,把测量到的数据传给主控芯片并与之设定值进行比较,把比较得到的数据通过I2C通信方式传给OLED进行显示,当与设定值相比较高时,蜂鸣器进行动作,报警警示,与设定温度值较低时,LED进行动作,闪烁提示。
图5 模型训练成果
图6 测温温度显示
5 结束语
本文介绍了通过硬件设计与图像处理技术相结合的人体快速测温和身份识别系统,采用STM32芯片作为总控制器,通过红外传感器、面部识别模块可以获取人的体温,判断他身份是否正确,经过信息调理之后,便把数据发送给STM32单片机进行运算处理与判断,并将人的身份和人的体温送到OLED显示,人体体温不在正常范围内就会报警。系统的开发使用当前已经十分成熟的Mircro Python语言与其自带强大的库函数,实现了人脸识别目的,用C语言设计与测温模块的结合实现了无接触测温功能,本方案使得现如今对于疫情测温与人脸识别的防控管理有了一定的提升,对于防疫人员增加了安全保障,工作压力也得到了减少,管理水平得到有效的提高。