(惠州学院 电子信息与电气工程学院,惠州 516007)
随着社会的发展,科学技术的进步,生活水平的提高,人们的生活出现越来越多的安全隐患,诸如盗窃造成财产损失,丢失证件、遗忘密码等特征物品的缺失给人们带来不便的同时也暴露出缺陷。但将每个人的生物特征充分运用,比如人脸,指纹等,则可以避免这个问题,这也使生物识别技术越来越受欢迎。而人脸识别技术就是最受欢迎的其中之一。
运用人脸识别的门禁系统,将会更灵活,更安全,更便捷。人脸识别是让机器思考并进行判断,是机器视觉领域最具有挑战性的课题之一。其自身容易推广、安全性高、方便、准确度高、可以自学等优势可以应用到公安侦查、安全鉴别、互联网等领域。人脸识别具有很大的研究价值。因为它的研究涉及到机器视觉、图像处理、数学等多门学科,常用于各种安全级别较高的系统,对提高系统安全程度和保障安全起到很大的作用。人脸识别的研究对推动系统安全的提升有着至关重要的意义。
1)图像采集
用Open CV打开摄像头,在屏幕上出现显示窗口,在窗口中使用Open CV的画图工具画一个正方形的框,只有当人脸在框内时才能进行人脸检测、特征点定位、特征提取和比较。当人脸对准在框内时,点击“样本采集按钮”捕捉一帧图像,然后程序开始执行,提取图像特征数据,将图片信息转换成数据信息存储在bin文件中。
2)图像灰度化
在程序中,首先,用一个if语句判断图像是否为灰度图,是单通道图像则直接使用;若返回的判断结果为多通道图像,则用cvtColor函数先把多通道图像变成单通道的灰度图后再进行操作。
图1 灰度化效果图
3)图片尺寸缩放
为了缩短计算时间,可以将图像缩小。图像缩小有两种方法:一、使用图像金字塔改变图片的像素进行缩放,图像越小,像素越低;二、用函数resize改变图像的长和宽进行缩放,但不改变图像的像素,是真实意义上的缩放,可以避免因像素降低,图片变模糊引起的识别率降低。
SeetaFaceEngine-master中的Face Detection模块,基于一种结合经典级联结构和多层神经网络的人脸检测方法[1],采用的漏斗型级联结构专门针对多姿态人脸检测而设计,其中运用的由粗到精的设计理念兼顾了精度和速度的平衡。如图2所示,漏斗型级联结构在顶部由多个针对不同姿态的快速LAB级联分类器[2]构成,紧接着是若干个基于SURF特征的多层感知机(MLP)级联结构,最后由一个统一的同样基于SURF特征MLP级联结构来处理所有姿态的候选窗口,整体上呈现出上宽下窄的漏斗形状。从上到下,虽然随着层次的递增,每个层次的分类器及其所采用的特征逐步变得复杂,但可以保留人脸窗口并排除难以与人脸区分的非人脸候选窗口。
图2 人脸检测原理
真实场景下的人脸特征点定位会受到姿态、表情、光照和遮挡等因素的影响。为此,SeetaFaceEnginemaster中的FaceAlignment模块采用一种由粗到精的自编码器网络来求解复杂非线性映射过程。如图3所示,特征点定位模块从像素低,分辨率较低的图片开始进行人脸形状的估算,用自编码器网络进行初步的特征点定位,得到第一级图像S0;然后提高输入图片的像素,进行人脸形状估算,并将S0中定位的特征进行局部提取,输入到自编码器网络中进行对齐,得到S1,此时S1的定位精度就远超过S0了,然后再选取更高像素的图片进行人脸形状估算,将S1中定位的特征进行局部提取,输入到自编码器网络中进行对齐,得到定位精度更高的S2。以此类推,当选取的图像像素达到最大是,级联的自编码网络级数越多,特征点定位就越准确。
图3 人脸特征点定位原理
FaceAlignment模块中的函数PointDetectLandmarks可以在检测出人脸并传回人脸区域的基础上标记人脸的五个(眼睛中心、鼻尖和嘴角)特征点。使用cvCircle函数画五个点将特征点位置标记出来,可以直观的看到所标记的地方,并判断人脸是否在规定区域内,只有人脸在规定的框内才进行下一步的特征提取和比较。该标记可以改变大小,颜色,样式等。
人脸特征点标记效果如图4所示。
图4 特征点定位效果图
SeetaFaceEngine-master中的FaceIdentification模块,提取特征向量,将图片信息转化成数据信息存储在二进制的Identification.bin文件中,留做样本数据。SeetaFace开源的人脸特征提取模块也是基于卷积神经网络的,其实现的是深度卷积神经网络:包含7个卷积层与2个全连接层。该网络将5×5的卷积核拆分为两层3×3的卷积核,从而增加了网络深度,且没有增加计算量。人脸特征直接采用VIPLFaceNet FC2层的2048个结点的输出,特征比对可简单采用Cosine计算相似度,如图5所示,将数据库中的人脸进行特征提取后,得到特征向量,数据1,然后将实时检测的人脸进行特征提取,得到特征向量数据2,然后将得到的向量数据1与向量数据2进行余弦值的比较,通过函数CalcSimilarity比较两向量的相似度并输出。最后进行阈值比较,将输出的相似度值与预先设置好的阈值进行比较,当相似度大于阈值时,判断识别成功,是管理员或者用户,若小于阈值则判断识别失败。从而达到人脸识别智能门禁的效果。SeetaFace在多数人脸识别场景下均具有良好的性能。
图5 人脸识别原理
使用SeetaFaceEngine-maste中的Face Detection模块和FaceAlignment模块检测并定位人脸特征点,采用SeetaFaceEngine-master中的FaceIdentification模块进行人脸特征点提取和比对,可以达到97.1%的识别正确率。速度方面,在单颗Intel i7-3770 CPU上,开源代码提取一张人脸之特征的时间约为120ms。
1)检测速度快:人脸检测+人脸特征点定位+人脸特征点的提取和比对所用时间仅为120ms。
2)检测准确率高:对人脸的识别率可达97.1%。
3)检测范围:该系统可用于平时生活中门禁,也可用于公安侦查等检验身份等领域。