快速搭建人脸识别系统方案的研究分析
2022-05-30吴友兰胡冬琴石俊峰
吴友兰 胡冬琴 石俊峰
摘要:本文介绍两种快速搭建人脸识别系统的方法。一种设计方法以OpenCV视觉库为核心的人脸识别系统,我们将摄像头采集的人的面部图像进行灰度化处理、特征值计算,并在此基础上训练出待测人脸的数据模型,然后对数据进行分析处理,用以识别出人脸。另一种方法是基于百度云API进行人脸检测,我们灵活利用百度云提供的大量模块化接口,可快速完成相关的开发,大大缩短开发周期。
关键词:人脸识别; OpenCV; 人工智能; 嵌入式;
一、引言
人脸识别是获得人的眼、口、鼻轮廓,从而识别多种人脸属性。它实现从输入的人脸图像或视频流中检测和跟踪人脸,首先判断其是否存在人脸,如果存在人脸就进行预处理,切割出其中的人脸照片,然后再给出每个人脸的位置、大小和各个主要面部器官的位置信息。最后依据这些信息,进一步提取每个人脸中所包含的身份特征数据,并将其与已知的人脸库中人脸进行对比,从而识别不同人脸的身份。人脸识别作为一种生物识别技术,具有非强制性、非接触性、并发性等特点,已经广泛应用于各行各业。
下面我们介绍二种方法用以快速搭建人脸识别系统,可以把它加载到现有的项目中快速实现人脸比对、人脸识别功能。我们的程序设计都采用了python语言来实现,如图1列出了人脸识别系统框图。
在很多设计开发項目中,我们需要通过人脸的比对来进行身份的验证。当前主流的人脸识别算法,在进行人脸比对时,主要依靠人脸特征值的比对。所谓特征值,即面部特征所组成的信息集,人工智能算法可以很精确的辨别和记住面部特征,从而实现人脸比对,人脸识别。
人脸识别就是给定一张脸,判断这张脸是谁。人脸识别是需要识别人的的人脸特征与数据库中已获取到的人脸特征模板进行比对,根据所比较的相似程度对人脸的身份信息进行判断。我们介绍二种方法来快速实现人脸识别和人脸比对。人脸识别步骤包括数据收集和预处理、训练模型、人脸识别三个部分。第一种方法是在本地拍摄待测人脸大约30张照片,照片在不同时间、不同光照、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下进行采集。然后用OpenCV中FaceRecognizer类对收集的待测人脸照片数据进行人脸检测和训练生成人脸数据集.yml文件,利用生成的.vml模型文件来实现人脸识别。第二种方法是将自己的照片上传到百度云平台上,由百度云平台负责收集你的脸部特征和对模型的训练,并将你摄像头中所录取的照片与人脸库比对从而实现人脸识别的功能。
第一种方法我们利用OpenCV中提供的人脸识别算法来实现人脸检测识别。OpenCV的全称是Open Source Computer Vision Library,是一个开放源代码的计算机视觉库,可以运行多种操作系统上,我们可以利用OpenCV快速的实现端对端的人脸识别。
实现步骤包括下面三步:
第一步:人脸数据图片的收集和预处理
数据的收集和预处理就是在得到待测人脸照片之后,对图片上的人脸进行检测和分割并添加数据标签。
执行步骤包括:
1.加载分类器,我们调用opencv中提供的“haarcascade_frontalface_alt2.xml”分类器文件,它对人脸的检测准确率和速度都比较好。
2.调用detectMultiScale()函数检测,调整函数的参数可以使检测结果更加精确。
3.把检测到的人脸用矩形画出来。
4. 记录每一个人脸对应的标签,就是为每一个人姓名编号。
实现人脸检测的核心代码如下:
face_detect = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces=face_detect.detectMultiScale(image_gray, scaleFactor=1.15, minNeighbors=5, minSize=(5, 5)) # 检测人脸
for (x, y, width, height) in faces:# 根据检测结果绘制矩形框
cv2.rectangle(image, (x, y), (x + width, y + height), (255, 0, 0), 2)
cv2.imwrite("dataset/User."+str(face_id)+'.'+str(count)+".jpg",gray[y:y+h,x:x+w])# 记录人脸标签
第二步:训练模型,图2是训练人脸模型流程图如下:
通过样本和类别标签进行训练,得到训练好的人脸模型,将模型保存为.xml文件。
现在待测人脸数据集准备好了,接下来就是训练模型了。这里我们用到了opencv的Facerecognizer类。FaceRecognizer类主要包含了三种人脸识别的方法:基于PCA变换的、基于Fisher变换的和基于局部二值模式的三种方法。
LBPH(Local Binary Pattern Histogram)将检测到的人脸分为若干个小单元,并将每个小单元与模型中的对应单元进行比较,对每个区域进行匹配,由所获得的匹配值产生直方图。由于这种方法的灵活性,LBPH是唯一允许模型样本人脸和检测到的人脸在形状、大小上可以不同的人脸识别算法。
我们从数据集中获取所有用户数据,并调用train函数进行并“训练”产生OpenCV 识别器。训练结束后,会产生一个 .yml 的模型文件,该文件将保存在“trainer/”目录中,供我们后面做人脸识别测试时用。
第三步:人脸识别、人脸测试
在模型训练好之后我们拿数据集中的最后几张图片做一个测试,根据获得的confidence值确定测试结果。
调整后的区域中调用 predict()函数, 该函数返回两个元素的数组:
第一个元素是所识别个体的标签, 第二个是置信度评分。 所有的算法都有一个置信度评分阈值,置信度评分用来衡量所识别人脸与原模型的差距, 0 表示完全匹配。 可能有时不想保留所有的识别结果,则需要进一步处理,因此可用自己的算法来估算识别的置信度评分。 LBPH一个好的识别参考值要低于 50,任何高于 80 的参考值都会被认为是低的置信度评分。
第二种方法我们调用百度提供的开放人脸api接口,帮助我们快速在自己的系统中集成人脸识别的功能,而且这个接口可以无限次调用。由于嵌入式开发系统的性能限制,运行神经网络来进行人脸模型的训练识别的难度较大,在嵌入式系统的开发中一般采用了百度提供的开源的人脸识别SDK来进行人脸的识别和检测。
开发步骤如下:
1.在百度智能云上申请注册,先获取APPID、API Key和secret key,添加人脸识别功能。
2.下载Python HTTP SDK安装百度的api。
输入以下代码安装:pip install baidu-aip
python setup.py install
3.新建分組
4.在分组中创建用户,用户名zhangsan,并且添加自己人脸照片进去,如在光线条件充足的条件下的正面照、侧面照片,以便识别时能准确识别。
5.访问API接口,上传图片的URL。
6.获取返回的信息数据
7.操作返回的信息数据
利用百度云实现人脸识别的核心代码如下:
import cv2
import urllib.request
import base64
import time
#百度人脸识别API账号信息
APP_ID = ‘添加自己创建的百度APPID
API_KEY = ‘添加自己创建的百度API Key
SECRET_KEY =添加自己创建的百度secret key ‘
client = AipFace(APP_ID, API_KEY, SECRET_KEY)#创建一个客户端用以访问百度云
#图像编码方式
IMAGE_TYPE=BASE64
def go_api(image):
result = client.search(str(image, ‘utf-8), IMAGE_TYPE, GROUP);
if result[‘error_msg] == ‘SUCCESS:
name = result[‘result][‘user_list][0][‘user_id]
score = result[‘result][‘user_list][0][‘score]
if score > 80:#如果相似度大于80
if name == ‘zhangsan:
print(“欢迎%s !” % name)
time.sleep(3)
return 1
else:
print(“对不起,我不认识你!”)
name = ‘Unknow
return 0
while True:
print(‘准备)
if True:
getimage()#拍照
img = transimage()#转换照片格式
res = go_api(img)#将转换了格式的图片上传到百度云
time.sleep(3)
以上两种方法都可以快速实现人脸识别系统的开发,可识别单张,多张人脸图片。我们可以根据项目的需要自行选择一种方法来实现人脸识别,后期我们可以将计算机视觉库移值到嵌入式系统中,可以利用计算机视觉技术实现监控设备、医疗设备、机器人设备等产品的开发。
作者单位:吴友兰 胡冬琴 石俊峰 北京电子科技职业学院
参 考 文 献
[1]杨军,张岳,刘燕峰.基于Python语言的数据挖掘课程的建设与研究[J].科技风,2021(14):80-82.
[2]高双喜,曹淑服.基于人脸识别的门禁系统设计[J].河北省科学院学报,2012,29(1).
[3]郝立涛,陈书旺,唐鸿武.基于人脸识别的门禁系统设计[J].河北工业科技,2009,26(5):339-341.
[4]张玉荣,王强强,吴琼,等. 基于Python-OpenCV图像处理技术的小麦不完善粒识别研究[J]. 河南工业大学学报(自然科学版),2021,42(6):1-13.