陈建宇,尧千桂,林权,王楚楚,唐嘉伟,卢新祥
(绍兴文理学院 数理信息学院,浙江绍兴, 312000)
新冠疫情爆发以来,各地政府充分利用数字化,积极开展大数据分析管理,建立“一码通行”的精确防控机制,为疫情防控贡献了重大力量。在网格化、精细化的疫情防控下,健康码成了出入公共场所必需的电子通行证,但是有时候人们掏出手机打开健康码的时间过长,甚至不配合工作人员的工作,无视配合出示健康码的要求,导致商场、医院、超市等公共设施建筑的门口排队过长,容易形成拥堵影响通行效率,可能增加交叉感染的风险。另一方面,传统的打开手机出示健康码、体温测量等操作难以照顾到所有人员,尤其是儿童和老人等特殊群体,没有手机或者不会操作,因此研究开发简捷方便的通关验证系统具有重要意义和必要性。
本文提出了一种基于人脸识别和红外测温的健康码核验闸机设计,以树莓派作为硬件平台,识别算法为核心,用于进出需要健康码核验以及温度测量的公共场所,当核验通过时闸机打开闸门使人通行,并使用了PyQt5设计作为GUI实现,用于显示人脸和健康码的识别结果,可以方便用户实时观察筛查通行人员,有效提高通行效率。
本文将人脸识别、健康码核验与红外测温相结合,提出一种基于人脸识别和红外测温的健康码核验闸机设计,旨在完成健康码智能核验、体温测量、语音播报等功能,提高健康码核验的通行效率。
该设计以Python作为开发语言,树莓派作为硬件平台。当摄像头检测到人员接近时,使用基于OpenCV的Haar级联与Dlib库进行人脸检测及实时跟踪,并通过LBPH算法将检测得到的人脸数据与SQLite数据库存放的人脸数据进行对比识别,调用该人脸信息对应的健康码状态,同时红外测温传感器对当前人员进行体温测量;系统将体温测量结果与健康码状态结果返回到GUI界面由显示屏显示,若核验结果正常,语音播报识别结果且闸机开放通行。
本闸机的硬件主要包括有五个部分:主控板、检测模块、舵机、显示屏、语言播报模块。主控板与识别模块通过I2C总线进行数据传输,闸机与语音播报模块通过GPIO口与树莓派进行通信,显示屏和树莓派之间使用HDMI接口进行视频流的传输。
图1 闸机硬件组成
该系统选用树莓派4B作为主控板,它是一块基于ARM Cortex-A72的微型电脑主板,搭载四核处理器,1.5GHz CPU和4GB RAM,使用SD卡或者Micro SD卡作为硬盘,主板配套有一个网线接口和4个USB接口,拥有HDMI接口和视频模拟信号输出接口,可连接显示器,鼠标、键盘等外设,满足PC端的基本功能,可当作PC端使用,并且还有40个GPIO口。适合于本项目使用基于OpenCV的LBPH算法,完成健康码识别、红外测温、闸机开门和语音播报的功能实现。
检测模块由高清摄像头和MLX90614红外测温传感器两部分组成。
MLX90614红外测温传感器采用I2C的SMBUS协议与树莓派通信,数据通信格式如图2所示,通过上拉电阻将传感器上的SDA,SCL与树莓派的SDA.1和SCL.1引脚相连,工作温度范围为-40.00℃~125.00℃,分辨率为0.02℃,精度可达±1.00℃,检测实时性强,满足用于人体温度的检测的性能需求。
图2 SMBus读数据格式(上)和SMBus写数据格式(下)
图中白色部分代表数据由主器件发送到从器件,阴影部分代表数据由从器件发送到主器件,其中S为起始位,SlaveAddress为从器件地址,Wr为写标志位,Rd为读标志位,A为应答位,Command为命令字节,Sr为重复起始位,PEC为校验数据包,P为停止位[1]。
高清摄像头用于拍摄并采集人脸图像,可直接通过USB连接到树莓派,使用UVC标准协议,操作方便,规格选用1080p像素,成像素质更好,不会产生畸变,用于拍摄人脸图像,可使树莓派进行人脸检测的图像处理效果更好,提高识别算法的准确率。
SG90舵机是模拟舵机,它的力矩1.5kg/cm,工作电压为4.2~6V,采用脉冲宽度是0.5~2.5ms,周期为20ms的PWM信号作为控制信号,对应的角度为0~180度,因为它们的对应关系呈线性变化[2],因此只需外部输入一个脉宽信号,舵机就会转动到一个对应的角度,舵机的转动角度与输入脉宽的关系如表1所示。
表1 舵机的转动角度与输入脉宽关系表
舵机内部带有基准电路和比较器,基准电路可产生一个占空比为7.5%的基准信号与外加信号相比较,判断出舵机转动的大小和方向,产生电机的转动信号。由此树莓派只需要给舵机一个周期为20ms的脉冲信号,改变脉冲的占空比,便可以控制舵机转动的角度,从而达到闸机开门的目的。
显示屏采用的是一块7寸的ISP屏,使用HDMI接口,用于显示基于PyQt5的GUI设计界面和健康码识别结果以及体温测量结果。
该模块采用的是树莓派使用百度云的语音合成接口,将需要提示的文本信息进行语音合成,通过音响进行语音播报。
为了提高CPU资源的利用率,加快系统的运行反应速度,程序采用多线程的设计模式,同时执行UI线程和OpenCV线程。
UI线程用于实现摄像头的拍摄画面,以及将健康码识别结果和体温测量结果显示在拍摄画面上,实现人机交互。
OpenCV线程用于人脸检测和健康码识别算法,当摄像头抓取到人脸后对其进行跟踪识别并从SQLite数据库获取识别人脸的健康码信息。在识别过程进行的时候,红外测温传感器同时对人体的温度进行测量,并将测温结果与健康码识别结果一起显示在屏幕上,且结果会通过语音播报模块进行播报;当无人员通过时,系统会进入低功耗待机状态,直到摄像头检测到有人员通行,闸机恢复工作状态。当健康码异常或体温异常时,闸机报警发声,并通过语音播报模块指引相关人员去指定地点接受管控。
软件设计流程如图3所示。
图3 系统程序设计流程
人脸检测算法需要先进行人脸跟踪,定位人脸信息。采用Haar级联分类器,通过筛选式级联把强分类器连接到一起,能够使人脸检测更加精确。Haar级联算法提供了通过以下三种关键步骤完成的人脸检测:定义Haar-like特征、利用积分图加速运算、通过AdaBoost训练的强分类器级联。
常见的Haar-like特征如图4所示,黑色代表图像颜色较深的部分,白色代表图像颜色较浅的部分,可通过运算得到反应图像的灰度变换情况。
图4 Haar—like特征分类
为了缓减特征值计算压力,通过构造积分图提高计算速率[3]。积分图定义如下:
式中,i(k,l)表示图像在(x,y)位置的像素值。根据n个正样本和负样本的图像中的某个固定特征计算出每张图像该特征的特征值后,再使用Adaboost分类器得到最优的弱分类器,再通过算法训练出该特征的强分类器,最终将若干个分类器用级联的方式连接在一起,获得Haar级联分类器。
本系统识别算法选用了LBPH特征提取算法。将一张图像均匀分割成几块区域,并提取每块区域的直方图,将各区域的直方图依次连接,形成具有LBP特征的统计直方图,用于描述图像的局部特征。首先LBPH算法对面部图像进行灰度化处理,然后使用LBP算子来处理这些图像,得到相对应的灰度图像的LBP值,系统通过LBP值可以进行绘制出具有人脸特征信息的LBP统计直方图,最后把训练集统计直方图和测试集统计直方图进行比较,若得到的结果和测试的训练样本非常相似,那么该测试的训练样本就是人脸识别的结果。
LBPH算法具有计算量较小,时效性较高的优点,其光照不变性、灰度不变性和旋转不变性能够保证不同条件下的人脸识别的准确率[4]。
SQLite是一款遵守ACID的关系型的轻型数据库。与PostgreSQL和Mysql这两款数据库相比,它的处理速度较快。综合考虑选用SQLite数据库作为人脸数据的存储。
SQLite的整体架构可以分成两大部分,内核和后端,核心部分是内核,内核中的SQL命令处理还分为三部分,分别是词法分析、解析和代码生成,负责用户对数据库的预处理和高效快速地生成代码供虚拟机使用。后端内是经过优化的B树,这样有助于运行在可调整的页面缓冲上时,减少对磁盘的无效查找,再往下是页面缓存,它在OS的抽象层之上发挥作用,这样的体系结构使数据库的可移植性提供了一种可能。
在进行数据库的建立时,采用了身份证号、姓名、健康码信息等作为数据库存储的对象,当系统对人脸进行预采样会自动生成编号并通过卷积神经网络对采样信息进行训练,除此之外,工作人员还可以根据需求对数据库进行增删改查等操作,对信息的管理更加方便。
对于显示界面的设计,采用基于PyQT5的GUI界面设计,它拥有几百个类,包含千种函数和方法,主要分为QtCore模块、QtGui模块和QtWidget模块,分别包含核心的非GUI功能、窗口系统集成、事件处理、基本空间等内容,提供了一整套丰富的窗口控件库,并且PyQt5是Python语言对Qt框架的实现,因此在运行调用方面十分方便,可以直接在Python中直接声明为Qt的子类,避免了繁杂的开发流程,提高了系统的运行效率。
在设计过程中,本项目使用了与之配套的软件Qt Designer,作为一款用于辅助GUI设计的工具,它可以大大减轻在设计过程中的工作量,主要设计了摄像头拍摄画面窗口、系统日志窗口、健康码结果窗口和温度测量结果窗口,有了这些窗口,可以使筛查通行人员的工作更加方便快捷。
通过图5,对闸机系统进行多次实验,并进行结果分析。
图5 系统实验流程图
根据摄像头拍摄采集到的图像数据与数据库中的图像数据对比,系统会给一个满足条件的阈值,当计算值超过系统预设的阈值,证明数据库的人脸图像与检测的人脸图像是一个人,即识别出当前检测人脸的身份和健康码信息。
我们随机抽取了100位人员作为样本进行健康码核验,以20人为一组,通过多组实验,得到表2的健康码核验的准确率的关系[5]。
表2 健康码核验的准确率
如表可以看出,其平均准确率约为95.4%。
将MLX90614与树莓派的I2C接口进行连接通信,通过不断改变传感器与人的额头的距离,对人的额温进行测量,并采用一种通过最小二乘法进行多项式拟合进行温度补偿[6~7],减小误差。
补偿前后的温度曲线,如图6所示。
图6 补偿前后的温度曲线
实验证明,通过温度补偿后,平均误差0.027℃,相对误差为0.98%符合实验预期,满足人体测温精度需求。
本文研究并设计了一种基于人脸识别和红外测温的健康码闸机系统,详细介绍了该系统的软硬件设计,并对闸机系统进行了进一步的运行测试。根据实验数据结果来看,基于LBPH人脸识别算法的识别准确率较高,通过温度补偿后的MLX90614红外测温传感器的测温精度也得到了较大提升,验证了系统的正确性和完整性。相比目前的人工核验方式更加智能化,高效化,符合产业需求,具有现实意义。
但作为测试样机,还存在一些不足的地方,目前系统需要预先录入人脸和健康码信息,工程量较大,只能服务于小区域内人群,例如公司、小区等地。未来可接入国家卫生部门管理的健康码信息数据库,实现全国覆盖。