搜档网
当前位置:搜档网 › 基于Opencv的人脸识别考勤系统

基于Opencv的人脸识别考勤系统

基于Opencv的人脸识别考勤系统

2019.06 综 述

电脑乐园

473

基于Opencv 的人脸识别考勤系统

孙成浩 钱璐 汪令轩

中国矿业大学(北京)机电与信息工程学院,北京 100089

摘要:随着计算机技术的发展,计算机视觉的子领域已经应用到生产生活中的方方面面。本文利用开源计算机视觉库Opencv 所含有的基于Haar 特征的级联分类器进行人脸检测,使用Keras 构建卷积神经网络,完成了面部图像采集、人脸识别模型训练、特定人脸匹配和记录打卡信息的功能,同时通过Tkinter 库进行了用户界面的设计,提高了程序操作的便捷性。程序实现了人脸识别考勤系统的基本功能,经拓展后可应用到不同场景中。

关键词:Opencv;人脸识别;卷积神经网络

1.概述

人脸识别技术是一种基于面部生物特征的图像识别技术,通过

脸部特征信息在视频流或图像中检测、跟踪人脸以及特定人脸匹配

等相关识别技术。近年来,随着人脸识别算法的优化提升,人脸特

征提取的效率和特定人脸匹配的精度不断提高,人脸识别技术也越

来越多地应用于考勤、门禁、刷脸支付等系统中,在提高生活工作

便捷度的同时也使安全性能得到了增强。本文主要从人脸检测、模

型训练、人脸匹配的过程对人脸识别考勤系统进行介绍。

2.基本流程 (1)新建人脸录入 新建人脸录入需要借助Opencv 库中的用于人脸检测的基于Haar 特征的级联分类器。Haar-like 特征具有多尺度不变性和计算效率高等的特点,最基本的分类器只包含一个Haar-like 特征,由于一个特征很难做到准确有效地区分人脸与非人脸区域,因此有必要训练出多个级联组成的强分类器。经测试选用其中对正面人脸的检测准确度相对较高的haarcascade_frontalface_default.xml 做为检测人脸的分类器文件。 采集面部图像时,首先建立以人员姓名命名的文件夹用来存放人脸,之后连接摄像头,读取一帧视频,每一帧视频可以看作一幅图片,将图片灰化,以降低计算复杂度。计算出读入视频流或图像每一个区域的特征,然后利用训练好的级联分类器对特征进行筛选,一旦通过筛选,则判定该区域为人脸。截取出标记为脸部区域的图像,按顺序编号并保存。

图1通过摄像头截取人脸图像

利用Haar 特征训练的级联分类器对人脸进行检测,部分代码如下:

//将图片灰度化,加载级联分类器进行人脸检测并记录人脸位置。

frame_gray=cv2.cvtColor(self.img_bgr, cv2.COLOR_BGR2GRAY) cascade=cv2.CascadeClassifier(self.cascade_path)

facesRects=cascade.detectMultiScale(frame_gray,scaleFactor=1.2, minNeighbors=3,minSize=(32, 32)) if len(facesRects)>0: for face in facesRects: x,y,w,h=face

(2)模型构建和训练

使用Keras 创建神经网络进行模型训练。Keras 是一个由纯Python 编写并基于Tensorflow、Theano 两种引擎后端的高层神经网络API,支持CNN、RNN 或两者的组合,具有良好的模块性,并且

能够更加迅速地搭建网络结构。采用CNN 作为人脸识别的神经网

络,它在模式识别和计算机视觉领域应用较为广泛,能够直接提取

面部图像中的像素灰度值特征,极大地保留人脸信息。系统中的神

经网络由输入层、激活函数层、卷积层、池化层、丢弃层、全连接

层、分类层和输出层构成。

训练开始前需要对输入的图像进行预处理,首先加载数据集并

将其按照交叉验证的原则按照一定比例划分为训练集、验证集和测

试集;根据Keras 库的引擎后端决定输入图像的维度顺序;确定损

失函数为categorical,将类别标签进行one_hot 编码使其向量化,将

图像数据浮点化进而归一化。训练模型时,借助数据生成器对输入

图像数据使用实时数据提升,训练后得到含有训练数据的face.model 文件。 构建模型时的部分代码如下: //通过model.add 添加CNN 网络的二维卷积层,其他各层皆由add 添加。 self.model.add(Convolution2D(32, 3, 3, border_mode='same', input_shape=dataset.input_shape)) (3)人脸识别

开启摄像头,建立两个并行的进程,一个负责从摄像头中逐帧读取画面,并借助人脸检测器将图像中的人脸框出,调整画面大小后,将其置于用户界面中,实现采集视频流的实时显示;另一个进程则将视频流中探测到的人脸区域截取并保存起来,作为将要识别的人脸。视频流中的面部图像保存成功之后,将其交给面部识别模型进行识别,返回识别可信度和成员姓名,当可信度大于95%时,

系统提示打卡成功,并在打卡记录中写入打卡时间和该成员姓名。

图2进行人脸识别打卡

人脸识别过程的部分代码如下:

//记录模型预测的可信度以及对应的人员姓名 with self.graph.as_default():

probability, num=self.model.face_predict(self.image) name=self.contrast_table[str(num)]

3.结语:

本文基于Opencv 库所含有的人脸识别分类器,结合Keras 和CNN 神经网络,实现了具有面部信息录入、模型训练、特定人脸识别并记录的考勤系统,人脸识别耗时少,识别准确率大于98%,也可直接将准备好的人脸图像文件输入模型进行训练,基本满足实际应用的要求。后期结合不同的场景,可以应用于各类考勤系统中,具有较大的应用潜力。

参考文献

[1]师阳,闫丽丽,文韬,何峤.基于OpenCV 的人脸识别应用[J].电脑编程技巧与维护,2018(07):140-141+144.

相关主题