基于LBP的人脸图像识别检索算法
2018-12-18江西经济管理干部学院江西省电子商务与产业升级2011协同创新中心
江西经济管理干部学院 江西省电子商务与产业升级2011协同创新中心 付 念
提出了基于LBP的图像检索算法,根据图像的特征抽取、特征分析、特征匹配的过程进行设计的算法。主要流程是从计算机视觉处理入手,采用Python编程语言,通过使用OpenCV的视觉处理模块处理图像特征,通过NumPy矩阵处理框架进行设计相关处理模型,处理提取的特征值,建构特征处理模型,进而设计训练集来分析和执行识别步骤,最后分析数据结果并进行人脸表情识别的工作。
1.引言
随着现代化进程的不断推进,信息技术也随着不断发展。科学技术带给了人们生产力提升的同时,也带来了更多的需求。信息技术的衍生产品不断进入人们的生活中,由此带来的就是人们的身份、隐私、财产等不断地与互联网及信息技术连接在一起,这些内容都需要得到管理和保障。保障这些数据的方法是身份认证,通过不同的身份认证可以确保每个用户都能行使个人的权益并保护自己的账户安全。身份认证的方式多种多样,从早期的账户ID、邮箱、密码验证到手机号、短信验证,再到指纹、人脸识别等新技术。
人脸识别是一种基于图像识别及检索的综合识别技术,是基于内容的图像检索技术的延伸,通过结合生物特征采样技术,能够有效的检测和追踪人脸特征,识别和认证个人信息(苏煜,山世光,陈熙霖,高文.基于全局和局部特征集成的人脸识别[J].软件学报,2010,21(8):1849-1862)。早在20世纪60年代,人脸识别技术被提出,但当时限于计算机技术及光学成像技术的落后,无法应用于实际的生活场景中。直到20世纪90年代,通过高性能计算机技术、人工智能、模式匹配、机器学习以及高性能的算法的协作下,人脸识别技术进行真正可实施的阶段。人脸识别技术是通过计算机算法来统一和协调各个步骤,通过采集、预处理、特征提取、识别匹配四个步骤分部进行(R Datta,D Joshi,J Li,JZ Wang.Image retrieval:Ideas,influences,and trends of the new age[J].Acm Computing Surveys,2010,40(2,article 5):2007),这四个步骤也是目前主流的人脸识别方案的操作方法。
目前,人脸识别技术运用在信息世界及真实生活的很多地方,例如金融支付系统的人脸识别验证,支付宝产品的刷脸支付使用的是一个名为Face++的人脸识别的成熟解决方案。除此之外,人脸识别还运用在系统登录、疑犯身份验证等多种情景,包括Windows 10的Windows hello技术,公安系统中的人脸识别分析技术等。随着模式识别技术及人工智能技术的不断发展,人脸识别技术还能进入智能仿生、机器人技术等更多新兴领域,为人类科技进步及信息技术革命做出更多的贡献。
2.算法设计
人脸识别算法分为面部检测、建立面部识别对象、面部识别实现三个部分(HT Nguyen,A Caplier.Local Patterns of Gradients for Face Recognition[J].IEEE Transactions on Information Forensics & Security,2015,10(8):1739-1751),其中面部检测主要内容是建立面部检测级联数据,建立面部识别对象是人脸识别算法的主要工作,包括了面部识别建模和识别算法设计,最后的面部识别实现是对象两个部分组成创建训练集、执行训练集两部分组成。
2.1 建立面部检测级联数据
本文所采用的面部检测级联是基于OpenCV的Haar Cascade,它包含了基础特征描述类FeatureEvaluator,FeatureEvaluator的主要作用就是获取面部特征,它包含了read、clone、getFeatureType等功能,通过级联分类器CascadeClassifier可以有效地分配不同的面部特征区域,根据需求获取相对于的面部区域的特征。
cascadePath = “haarcascade_frontalface_default.xml”
faceCascade = cv2.CascadeClassifier(cascadePath)
其中,haarcascade_frontalface_default.xml是OpenCV的Haar Cascade分类器,使用haarcascade_frontalface_default.xml来存储面部特征,特征数据通过Scheme XML方式存储,
2.2 建立面部识别对象
面部检测算法设计的第二步是建立面部识别对象,面部识别对象是用户识别和分析面部特征的对象,它与OpenCV的FaceRecognizer.train训练集功能类似,是面部识别算法广泛采用的方式(A.R.韦布,K.D.科普西.统计模式识别(第三版)[M].电子工业出版社,2015-01-01)。OpenCV中主要用于建立面部识别对象的方法有三种:(1)特征脸识别(Eigenface Recognizer)- createEigenFaceRecognizer();(2)费歇尔识别(Fisherface Recognizer)- createFisherFaceRecognizer();(3)局部二元模式直方图脸部识别(Local Binary Patterns Histograms Face Recognizer)- createLBPHFaceRecognizer()。本文所采用的是局部二元模式直方图脸部识别方式,调用方式为:
recognizer = cv2.createLBPHFaceRecognizer()
局部二元模式是在计算机视觉用于纹理匹配的一个重要特征描述方法,早在1990就被提出并运用。局部二元模式简称为LBP(曹林.人脸识别与人体动作识别技术及应用[M].电子工业出版社,2015-08-01),LBP是一种比较算法。LBP可以从任何相邻的像素开始,然后横向或在顺时针或逆时针的方向进行比较,但是对于所有的像素必须使用同样的像素,在每个比较中,分别存入8个相邻像素,比较的结果都将存入一个8位的二进制数中。
当完成了LBP的像素值比较计算后,可以进入下一步设计LBP直方图。LBP直方图的值域是(0,255),因此LBP图的大小是1*256,计算步骤为:(1)加载彩色图像。(2)转换为灰度图像。(3)计算LBP值4.计算LBP直方图并一般化。
3.算法实现
面部识别实现主要是训练集(Training set)的实现,分为创建训练集和执行训练集两个部分(沈理,刘翼光,熊志勇.人脸识别原理及算法:动态人脸识别系统研究[M].人民邮电出版社,2014-10)。
创建训练集首先需要定义图像绝对路径的函数,命名为get_images_and_labels,该函数主要功能是实现通过绝对路径输入图像信息。其次需要定义两个列表,分别是images和labels,分别指代图像采集的人脸信息以及该人脸对应的标签。
在确定图像的绝对路径的时候去除了“sad”扩展名,Yale大学的Yale faces人脸采集项目在每个图像都备注了相对应的标签,这些标签指代了人脸的表情信息,而本文的主要研究内容就是分析人脸特征,通过表情分类筛选相对应的结果,因此在通过建立训练集程序进行识别器设计的过程中需要排除掉某个表情类型,这里选取了“sad”表情。由于OpenCV不支持GIF压缩格式的图片,因此采用基于PIL的image_pil进行转换,图像信息统一采用局部二元模型阵列存储,程序的存储形式是基于NumPy的二维矩阵,NumPy阵列是一种适应性非常强的图像存储形式,能够被OpenCV识别。
在图像处理方面,使用Python的os.path.split获取图像的标签信息,使用个位数来存储标签信息。检测面部数据采用的是face-Cascade.detectMultiScale,这是一种基于OpenCV的面部检测级联。faceCascade.detectMultiScale的结果信息存储在faces中,对于每种面部信息都会返回一个矩阵阵列的结果,即(x,y,w,h),其中x和y分别是图像的左上角的x轴和y轴的像素值,w和h则是检测图像矩形的宽度和高度,检测过程采取的是遍历的方式,从左上角的第一个像素点开始遍历,依此递增宽度和高度,将像素值依此添加到存储矩阵中,最终得到二元直方图的分析结果,并依此追加到images和labels中。
在完成了训练集的创建后,开始进行图像识别的最后一个步骤,即准备训练集目标图像,并执行训练集。准备训练集的主要过程就是覆盖待检测图像的路径,并设计函数存储下一步检测的图像信息和标签信息,分别存储在images和labels中。
完成了训练集的准备之后,需要执行训练集,该程序的训练集FaceRecognizer.train有两个参数,其中标签按照图像名称分别分配至相对应的label中,并通过np.array(labels)存储在数组中。
4.系统测试
本文选取了Yale大学的Yale faces人脸采集项目,该项目的人脸图片分别来自15个人,采集的人脸信息总计11种,分别配上标签centerlight(灯光中心),glasses(眼镜),happy(开心),leftlight(灯光左边),noglasses(无眼镜),normal(平常),rightlight(灯光右边),sad(悲伤),sleepy(睡着),surprise(惊喜),wink(眨眼)。
在训练集的设计中,除去了“sad”标签,目的是在测试过程中根据识别器进行分析,在测试程序中,使用了一个FaceRecognizer.predict功能,分配了一个新的标签,该标签的信息来自subject04.normal,将其命名为“confidence(信心)”,存储在nbr_predicted中。该变量表示其对“confidence”这个标签的符合程度,变量值越低,符合程度越高。
完成环境及程序代码的部署后,测试开始。运行face_recognizer.py程序,在测试样本中,subject04.normal和subject04.sad是完全一致的图像,因此可以作为图像检索测试对象,程序遍历所有图像,根据不同的标签分类显示并采集图像信息。采集完毕后,进入分析阶段,轮播展示“sad”标签的图片,并与“confidence(subject04.normal)”比较,并得出相似值,运行过程及结果示意图如图1所示。
图1 运行过程及结果示意图
通过结果可以看出,4号图片即“subject04.sad”识别“confidence”标签的相似度是0.0,及完全一致。而实际上两张图像也是完全一致的内容,差异只是文件扩展名,因此可以得出该图像识别程序是有效地。
5.结论
人脸识别是目前及未来新技术领域重要的研究方向和突破口,本文提出LBP匹配面部纹理的方式,通过执行和创建训练集的方式来识别人脸特征。随着图像识别、模式匹配、人工智能等技术的不断发展,人脸检测技术、安全防护技术、计算机拟合技术、机器学习、深度学习等技术都发生了巨大的变化,在模式识别的领域也能有更深远的发展。