APP下载

基于Python深度学习的人脸识别方法探究

2019-09-10徐浩浩

现代信息科技 2019年17期
关键词:人脸识别深度学习

摘  要:近年来,伴随着人工智能的迅速发展,深度学习也掀起一股发展浪潮,在图像、语音、大数据特征提取等多个方面获得广泛的应用。伴随着人工智能、深度学习的发展浪潮,人脸识别这一项安全性较高的生物识别技术,已经成为了当今的研究热点,在如智能家居、军事安防等等众多领域中得到了广泛的应用。本文主要提出了两种基于深度学习在Python语言实现人脸识别的方法。

关键词:Python;人脸识别;深度学习

中图分类号:TP391.41      文献标识码:A 文章编号:2096-4706(2019)17-0088-03

Abstract:In recent years,with the rapid development of artificial intelligence,the deep learning has also gained a steam,which has been widely used in many aspects,such as image,voice,big data feature extraction,etc. With the development of artificial intelligence and deep learning,face recognition,a highly secure biometric technology,has become a prevalent research topic and has been widely used in many fields such as smart home,military security and so on. This paper mainly proposes two methods of face recognition based on deep learning in Python language.

Keywords:Python;face recognition;deep learning

1  深度學习的发展阶段

1.1  深度学习的起源阶段

20世纪40年代到60年代,深度学习在控制论中出现萌芽。1943年,美国数学家沃尔特·皮茨(W.Pitts)和心理学家沃伦·麦克洛克(W.McCulloch)提出了M-P模型。在此基础上,美国人工智能专家弗兰克·罗森布莱特(F. Rosenblatt)于1958年,正式提出了由两层神经元组成的神经网络感知器,对神经网络的发展具有里程碑式的意义。

1.2  深度学习的发展阶段

20世纪80年代到90年代,是深度学习发展的第二次浪潮。美国物理学家约翰·霍普菲尔德(Hopfield)在1982年发明了Hopfield神经网络。1986年深度学习之父杰弗里·辛顿(Geoffrey Hinton)提出了一种适用于多层感知器的BP算法,该算法完美地解决了非线性可分问题,使得人工神经网络再次引起人们的广泛关注。

1.3  深度学习的爆发阶段

第三次浪潮始于2006年。杰弗里·辛顿以及他的学生鲁斯兰·萨拉赫丁诺夫正式提出了深度学习这个概念。他们在论文中详细地描述了无监督的逐层训练算法,再使用有监督的反向传播算法进行调优。深度学习一经提出,立即在学术圈引起了巨大的反响,又在工业界中迅速蔓延。在该阶段,人们已经开始放眼于深度学习在小数据集上的泛化。

1.4  深度学习现状

在世界级人工智能竞赛LFW(大规模人脸识别竞赛)上,应用深度学习进行计算机视觉研究的团队力压Facebook夺得冠军,使得人工智能在该领域的识别能力超越真人。在国际上,Google、IBM等公司都进行了DNN(深度神经网络)语音识别的研究。如今,深度学习已经在图像、语音、CTR预估、大数据特征提取等多个方面获得广泛的应用。

2  人脸识别介绍

人脸识别的实质就是一种基于人脸的特征信息进行身份识别的生物技术,当我们用摄像产品采集到人脸的图像时候,能自动地在图像中检测并追踪指定人脸,再将检测得到的人脸进行一系列相关操作。人脸识别主要由四个部分构成,分别为:图像采集和检测、图像预处理、人脸特征提取以及人脸匹配和识别。

人脸识别技术的研究跨越了多个领域学科。人脸识别技术是一项高端的技术研究工作,在其中包含了多个学科的专业知识,如计算机视觉、图像学、生理学、心理学等等学科知识。在人脸识别技术的研究中,目前主流的人脸识别分类方法一种是人脸特征统计的方法,主要有将图像降维的特征脸方法和根据人脸面部特征及其几何形状来进行的几何特征方法。另一种方法就是本文着重介绍的基于深度学习的人脸识别算法,通过深度学习,我们可以在大量人脸数据库中学习训练,从而获得大量的使计算机易于理解和区分的人脸特征,达到人脸识别的效果。

人脸检测是指通过分析人脸与其他物体不同的特征,对动态视频或者图像进行特征对比,判断其中是否存在人脸特征,若是存在,确定人脸在图像中的坐标,从而在图像中分离出相应的人脸。人脸检测的基本原理是:通过对人脸进行分析、建模,提取出属于人脸特有的特征,通过判断图像中是否存在与特征匹配的区域,得到人脸。

深度学习的崛起使得人脸识别技术获得了巨大的突破性的发展。人脸特征的选取是非常复杂且困难的,而深度学习的出现让我们不需要再选择特征,而是通过大数据自然训练学习得到。深度学习得到的人脸特征有着其他特征所不具备的特性:它对局部的遮挡具有良好的鲁棒性,而且没有在模型中加入后期处理和显式约束,这无疑更坚定了我们在将深度学习应用在人脸识别领域的决心。

3  基于Python深度学习人脸识别方法

3.1  Python基于OpenCV库实现人脸识别

这几年Python语言迅速发展。因为其有着丰富的第三方库,我们可以用Python语言调用第三方库帮助我们高效地实现人脸识别这个功能。OpenCV库提供了三种人脸识别器,分别为基于PCA的EigenFace人脸识别器、基于LDA的FisherFace人脸识别器,和利用局部二值模式直方图的LBPH人脸识别器。通过测试表明,光照的变化是导致人脸识别性能下降的主要原因之一。在实际应用中,环境变化非常大,其中光照的变化会使识别准确率大大下降。相比于其他两种算法,LBPH有受光源影响较小的优点。所以本文选用OpenCV中提供的LBPH人脸识别器来实现人脸识别。以下为该方法实现的主要函数。

方法实现:

(1)该函数为检测有效人脸。

def func1(img):

# 识别是否存在有效人脸,这里参数使用GitHub默认值

face_cascade=cv2.CascadeClassifier(r'./haarcas cade_ frontalface_default.xml')

# 读取图片

image = img

#对图片进行灰度转化

gray = cv2.cvtColor(image,cv2.COLOR_BGR2 GRAY)

# 探测图片中的人脸

face = face_cascade.detectMultiScale(

#我们可以随意指定里面参数的值,来达到不同精度下的识别。

gray,

scaleFactor = 1.15,

minNeighbors = 5,

minSize = (30,30),

flags = cv2.cv.CV_HAAR_SCALE_IMAGE

if len(face) == 0:

have_face == 0

if len(face) == 1:

have_face == 1

#返回圖像以及是否有人脸的数值

return image,have_face

(2)该函数是对被测图像进行采集。

def fun2(num):

number = 1

while(1):

#读取摄像头图像

ret,imga = cap.read()

org_img, face=test.func1(imga)

if face == 1:

# 命名存储图像

now_time = time.strftime (″%Y-%m-%d%H:%M:%S″,time.localtime())

picture_name = str(the_now_time)

old_filname = the_picture_name + '.jpg'

filname = old_filname.replace(″:″, ″ ″)

cv2.imwrite(filname,imga)

number +=1

if number == num:

break

(3)该函数将被测的照片贴上标签并将其脸部区域提取返回输入到分类器中。

deffunc3(img):

gray=cv2.cvtColor(img,cv2.COLOR_BGR2 GRAY) face_cascade=cv2.CascadeClassifier(r'./haarcas cade_frontalface_default.xml')

face = face_cascade.detectMultiScale(

gray,

scaleFactor = 1.15,

minNeighbors = 5,

minSize = (30,30),

flags = cv2.cv.CV_HAAR_SCALE_IMAGE

(a, b, w, h) = face_data[0]

return gray[b:b + w, a:a + h], face_data[0],1

3.2  Python基于Dlib库实现人脸识别

Dlib是一个开源工具包,包含了许多机器学习算法和工具,目前Dlib已经被广泛地应用在行业和学术领域,其中包括了嵌入式设备,机器人和大型高性能计算环境等。当然也可以帮助我们实现人脸识别。对Dlib库源码的查看,观察到Dlib的原理是先检测到人脸,然后通过深度残差网(ResNet)生成一个128维的向量,ResNet有几种不同深度的结构,而Dlib使用的是34层的网络,生成向量后再求两个向量之间的距离即可判定两个脸的相似程度。以下为利用Dlib库实现人脸识别的部分函数方法实现:

(1)该函数为加载人脸识别检测器和模型进行人脸检测。

def func1(imgname):

#加载检测器

fd = dlib.get_frontal_face_detector()

sp = dlib.shape_predictor(predictor_path)

#加载模型

frm= dlib.fae_recognition_model_v1(face_rec_model_path)

img = io.imread(imgname)

dets = detector(img,1)

#人脸检测

yo for k, d in enumerate(dets):

shape = sp(img, d)

face_descriptor = frm.compute_face_descriptor (img,shape)

test = numpy.array(face_descriptor)

returntest

(2)该函数是用来得到多张图像的特征值库。

def func2(dirname,filetype):

descriptors = []

for f in glob.glob(os.path.join(dirname, filetype))

vector = func1(f)

des.append(vector)

return des

(3)该函数计算两个向量之间的欧氏距离,距离越小者两个脸越相似。

def func3(vector,des)

dist = []

for k in des:

dist_ = numpy.linalg.norm(j-vector)

dist.append(dist_)

print("The person is:",dist.index((min(dist)))+1)

4  结  论

本文介绍了深度学习的发展。对人脸检测,人脸识别进行了简单的介绍。最主要的是介绍了两种基于Python深度学习实现人脸识别的方法:第一种结合OpenCV提供了一种简单易操作的人脸识别方法,但是由于该方法在动态识别图像中仍存有很大的问题,所以仍然需要改进相关的算法,在更大数据集中进行训练学习。第二种使用Dlib实现了简单的人脸识别方法,也有不足之处。如当特征值库较大时,计算向量之间的欧氏距离会花费很长时间,且代码效率低,需要引进并行等技术改进算法。

参考文献:

[1] 张枝令.Python实现基于深度学习的人脸识别 [J].电子商务,2018(5):47+96.

[2] 薛同来,赵冬晖,张华方,等.基于Python的深度学习人脸识别方法 [J].工业控制计算机,2019,32(2):118-119.

[3] 严严,陈日伟,王菡子.基于深度学习的人脸分析研究进展[J].厦门大学学报(自然科学版),2017,56(1):13-24.

[4] 何荣.基于OpenCV的人脸识别系统设计 [D].广州:华南理工大学,2013:7-31.

作者简介:徐浩浩(1998.07-),男,汉族,安徽潁上人,本科在读,研究方向:计算机科学与技术。

猜你喜欢

人脸识别深度学习
人脸识别的“国标”来了
中科视拓开放商业版本人脸识别算法
荣耀畅玩7C:人脸识别
MOOC与翻转课堂融合的深度学习场域建构
大数据技术在反恐怖主义中的应用展望
深度学习算法应用于岩石图像处理的可行性研究
基于深度卷积网络的人脸年龄分析算法与实现
“人脸识别”人工智能测谎仪研发成功