李智慧,刘明亮,*,王 伟,刘峻伯
(1.黑龙江大学 电子工程学院,哈尔滨 150080;2.黑龙江省气象数据中心,哈尔滨 150030)
近年生物识别技术的迅猛发展,使得门禁系统得到了飞跃式的发展。生物特征识别技术主要是根据人类本身所固有的特征来对人的身份实现辨别,且由于生物特征呈现唯一性、稳定性及普遍性,生物识别门禁系统具有很高的可靠性[1]。相对比其它的生物识别方式,人脸识别方便快捷,判断准确可靠,且认证介质不会丢失,安全性高[2];用于进行图像采集的设备价格较为便宜,成本较低,可适用性强。相较于传统社区门禁系统,笔者设计的应用于社区大门的人脸识别门禁系统具有准确、无接触等良好特性,且在准确性、经济性等方面有较大优势。
本文设计的智能门禁系统是面向社区物业使用,安装使用在社区门口,该智能门禁系统主要有以下功能:①实时监控功能:物业门卫处可实时监控门禁进出情况;②图像采集功能:对进入摄像范围内的人物进行抓拍;③人脸识别功能:对抓拍的人物图像快速进行检测识别;④门禁控制功能:通过图像识别结果发出的开关门指令控制继电器来驱动电磁锁;⑤人脸系统管理功能:管理员可通过操作台管理整个系统,进行人脸查询及管理,增减人脸信息,上传人脸图片,查看行人记录及状态信息。
除了以上基本功能外,该门禁系统在软件、硬件上需具有一定的可扩展性,无网络的情况下可保证系统能够单机运行,并将门禁记录汇总为Excel表格的形式存储,以便系统管理员统计和分析。
根据系统的需求分析与设计原则,智能社区门禁系统的总体架构设计见图1。门禁系统分为:视频监控模块、门禁控制模块、管理监控平台3部分。由PC架构本地服务器进行数据的记录与存储,视频监控模块负责采集目标图像,并将图像进行检测、识别等一系列处理,将处理后的数据与数据库中的人脸数据进行匹配,根据比对结果发送指令控制门禁系统操作。
图1 系统总体架构Fig.1 System architecture
本人脸识别系统的嵌入式平台为NVIDIA公司的Jetson Nano开发板,是一款外型小巧的嵌入式主板,以Linux为操作系统,系统环境为Ubuntu 14.1系统,搭载4核Cortex-A57处理器,GPU为128核NVIDIA CUDA核心的NVIDIA Maxwell架构显卡,4 GB的LPDDR4内存,存储则为16 GB eMMC 5.1,支持4 K 60 Hz视频解码。其计算性能可以很好地保证门禁系统的实时性,性价比很高,便于以后拓展功能,且符合安全性设计原则。
智能门禁端的硬件部分主要由Jetson Nano开发板、视频监控模块、门禁控制模块组成,其中视频监控模块分为人脸监控模块和车牌监控模块,视频图像采集设备使用的是USB摄像头,两个摄像头采集的人脸和车牌图像通过TCP/IP协议传输到服务器中[3]。Jetson Nano开发板是嵌入式门禁端的核心部分,所有程序的执行和门禁端的控制都由开发板来完成。
Jetson Nano开发板配置4个USB 3.0标准接口,DC电源后方还有个独立安装CSI摄像头的接口,另外一个USB 2.0 Micro B型接口,除可以作为5 V电源输入之外,也是在Nano上进行开发环境OpenCV安装的必要通讯接口。通过2个4K显示输出口(HDMI高清接口和DISPLAYPORT接口)连接显示器,为了更好散热,在水槽顶部安装了一个风扇。
由于本文系统摄像头所采集的图像需要进行目标的检测与识别,为了保证识别精度、经济性和实时性,视频监控模块选择USB工业摄像头SY003HD进行图像采集,即插即用,无需安装驱动,该摄像头的分辨率为1 920×1 080 P,支持Linux、Ubuntu、Win10等系统,帧率为30,可通过USB2.0和3.0接口与Jetson Nano开发板相连。
本文采用人脸识别技术与电磁锁相结合的门禁系统,其原理为利用电磁效应在通电导体周围产生磁场,通过Jetson Nano开发板控制继电器来驱动电磁锁实现开关锁的操作。系统选择12 V的门禁电磁锁,配合12 V的电源适配器使用,当GPIO口输出高电平时,触发门锁电路打开门锁。
根据系统设计的功能需求,结合实际情况,本文人脸识别智能门禁系统的软件设计部分见图2,分为以下几个模块:通过USB摄像头进行人脸图像的采集,并执行人脸检测模块,若检测摄像头采集到的图像中包含人脸,再执行活体检测模块[4]。通过眨眼检测来判断该人脸图像是否来自活体,若该人脸图像来自活体,再读取人脸数据库中的人脸图像信息并进行比对,以判断该人脸图像是否存在于现有人脸数据库中,从而判定用户的身份是否合法,并将门禁信息储存到XML格式文件中。
图2 人脸识别门禁系统模块Fig.2 Face recognition access control system module
门禁系统主要功能为将摄像头采集的目标视频在Jetson Nano开发板上进行检测与识别,通过TCP/IP网络通讯协议连接本地服务平台,对比SQL Server数据库中住户信息来判定为本社区住户。系统的总体运行流程为:搭建好相关的开发环境后编写应用程序,能够实现视频图像的采集,对摄像头采集到的图像选用视频关键帧提取的帧间差分法从监控视频中提取重要帧进行处理,对获取的人脸图像进行检测与识别等相关处理,最后匹配数据库中人脸信息,判定来访者身份的合法性,并根据处理结果向系统发出既定指令来控制电磁锁的开关。
为了保证构建的系统具有良好的平台移植性,本系统使用Qt Designer编写管理员系统界面,Python 作为主要编程语言,用PyQt5编程完成了整个人脸识别系统的搭建,通过Qt Designer可以快速地制作UI,并生成Python的代码和XML格式的文件[5]。
通过Qt界面设计实现查询,添加、删除人脸图像功能,输入住户姓名、住房门牌号即可查询数据库中现存信息,可通过管理界面随时对现存信息进行添加与删除操作。
门锁作为门禁系统的最终执行机构,根据人脸识别的结果来控制门锁,嵌入式门禁端的控制程序使用NVIDIA官方提供的Jetson GPIO Library包来控制数字的输入和输出,根据接收的数据库人脸比对结果,若判断结果为“是”,则控制开发板的 GPIO 口输出高电平,触发外部门锁电路打开电磁锁;若判断结果为“否”,则返回等待重新识别的结果。
YOLO算法(You Only Look Once)是一种用于物体检测的深度神经网络模型,是基于卷积神经网络的算法,使用了端到端的设计思路,将目标的定位和识别作为一个整体,利用目标分割边界框和类别概率直接进行回归[6]。
YOLOv3将输入图像缩放到指定大小416*416后,将其划分为S*S个网格,每个网格负责检测中心点落在其内的目标物体,每单个网格中存在B个目标边框,每个边框均由一个五维度的预测值组成,x,y,w,h和置信度,(x,y)为小网格边界框的中心点坐标,w、h为整张图片框的宽和高,置信度为预测出的box和ground truth box 的 IOU[7]。定义为
(1)
(2)
根据式(2)可以得到每个边框的置信度得分,该得分表示类别出现在框中的概率,同时也表示这些预测的 box 适合物体的程度。pr为每个小网格预测是否含有某种物体的条件概率。
为了防御照片攻击,人脸识别系统中常使用活体检测来增强系统的可靠性与防欺诈性,传统的眨眼检测方法是根于人眨眼时眼白部分的面积变化来判定的,这种方法对人眼眼白部分面积变化的判断易产生错误,并且计算复杂度高。使用了一种采用人的眼部关键点来判定是否有眨眼动作的方法,这种方法计算简单且提高了精度,还具有良好的实时性。选用人脸部特征点提取技术,用DLIB函数库定位出人脸的68个面部特征点,如眉毛、眼睛、鼻子、嘴巴以及脸部外轮廓,该技术利用回归树集合来定位人脸特征点,速度很快,检测一张人脸的68个面部特征点点耗时大约为1 ms[8]。
选取的上眼睑、下眼睑和眼角共6个特征关键点,A、B间的距离不会发生改变,当眨眼动作发生时,C、D和E、F之间的距离会快速降低为0,同时A、B间的距离约等于A、E间的距离和B、E间的距离和。使用的人脸活体鉴别方法就是以此为基础的,对每一帧图像进行特征点定位来获取眼部6个特征关键点,根据式(3)与式(4)计算得到的值对应着眼部不同的状态,为增大分子权重便于阈值的调整,对两个公式的分子取平方,并对L1、L2设定相应的阈值,当L1、L2在阈值上下波动时,以此来判定是否有眨眼动作的发生。
(3)
(4)
眨眼检测使用通用USB摄像头进行图像采集,拍摄速度为25 fps,帧间间隔为40 ms,在一次眨眼动作的发生可以拍到6~7张图像,当L1、L2在阈值上下波动两次时,即判定发生眨眼动作两次,则通过活体验证。
为了解决one-shot learning(一次学习)问题,选用基于卷积神经网络的Siamese Network进行人脸识别[9],Siamese网络使用的损失函数为对比损失函数,可以缩小同类别的样本数据,增大不同类别的样本数据[10]。
损失函数如式(5)、式(6):
(5)
L(W,(Y,X1,X2)i)=(1-Y)LG(EW(X1,X2)i)+YL1(EW(X1,X2)i)
(6)
式中:Y为样本标签,当图像X1和X2属于同一类别时Y为1,当图像X1和X2不属于同一类别时Y为0;LG为相同类别对图片的损失函数;L1为不相同类别对图片的损失函数;P为训练的样本数量[11]。
采用的模型训练平台环境见表1。
表1 模型训练平台环境Table 1 Model training platform environment
在构建好目标检测模型后,要使用收集好的数据集对模型进行训练,然后进行测试。在本文的研究过程中,图像数据主要通过现场采集、网站搜集等方式获得,因为搜集到的图像数据存在格式、尺寸等的不统一,而且没有统一的类别标签,不能直接拿来进行模型训练。因此,需对人脸图像进行标注,使用标注工具labeling,对5 000张人脸图像进行标注,将待标记图片以xxxx.jpg形式命名,x为0~9之间的数字,命名为0000~5000。
实验使用的数据集为自建库,选用FERET库、LFW库等部分人脸组成,约有1 000个目标对象,每个对象约5个图像样本。数据集中包含明亮和昏暗条件下的场景、部分遮挡目标的图像,通过手动标注后用于YOLOv3模型的人脸检测训练和测试。
训练池大小为5 000,进行25 000次迭代,训练批次大小由.cfg文件中设置的subdivision参数决定,实验每一训练批次(batch)的输入为64张图像,.cfg文件中batch=64,subdivision=16输出见图3。图为第25 387、25 388、25 389次共3次迭代的输出,在Region 16 Avg IOU、Region 23 Avg IOU两个尺度上预测不同大小的边界框,16卷积层为最大的预测尺度,使用较大的mask;32卷积层为最小的预测尺度,使用较小的mask。
图3 迭代输出数据Fig.3 Iterative output data
通过测试结果可知,在侧脸和有遮挡物的情况下都可以很好地定位出面部特征点,定位出人脸的特征器官,接着对人脸识别效果进行测试。将提取到的面部特征向量与数据库中存储的128维特征向量进行比对来确认行人的身份信息,并对识别出的人脸图像大小、位置进行标注。实验选用自建库600张,共60人,每人10张多角度图像,选用400张进行人脸识别模型训练,200张进行测试,本文设计的人脸识别系统对现有数据集的人脸识别准确率可达到98%。根据面部特征点来确认来访者的身份信息,并对识别出的人脸图像大小、位置进行标注,本文人脸的测试结果见图4。
图4 人脸识别效果图Fig.4 Effect of face recognition
通过测试结果可知,本设计在轻微遮挡面部特征、闭眼以及人脸姿态左右偏移40°以内都可以精准的定位识别人脸,人脸检测运算时间约0.2 s,人脸识别运算时间约0.8 s,整体识别流程运算时间总用时约1 s,基本上能满足实时人脸检测的需求。
本文设计的智能门禁系统为社区大门的出入口,人脸的识别是在目标主动配合的情况下实现,实验选取了3种不同光照(正常、强光、弱光)环境下的目标图像作为测试图像,衡量系统性能,不同环境下的系统检测效果见图5。
图5 门禁系统功能测试效果图Fig.5 Function test effect diagram of access control system
本文设计的智能社区门禁系统利用深度卷积神经网络与Jetson Nano开发板来实现,测试结果表明,本系统识别成功率很高,功能性强、精确度高,满足该系统的使用需求,且通过提取每张图片中的128个双精度浮点数数据保存在系统中,比存储数字图像的方法节约了很多储存空间,不仅提高了系统的准确性,还能保证实时性的需求。相比于与传统的机器学习方法易受环境因素的影响导致识别精度过低,本文的算法结合了深度卷积神经网络可达到识别活体的目的,且可直接运行在小巧但功能强大的Jetson Nano开发板上,在人脸遮挡、拍摄角度、光照等影响情况下都有很高的识别精确度,此系统在智能社区门禁领域有一定的使用价值和发展前景。