OpenCV计算机视觉技术(Python语言描述)(微课版)课件 第六章-人脸识别_第1页
OpenCV计算机视觉技术(Python语言描述)(微课版)课件 第六章-人脸识别_第2页
OpenCV计算机视觉技术(Python语言描述)(微课版)课件 第六章-人脸识别_第3页
OpenCV计算机视觉技术(Python语言描述)(微课版)课件 第六章-人脸识别_第4页
OpenCV计算机视觉技术(Python语言描述)(微课版)课件 第六章-人脸识别_第5页
已阅读5页,还剩36页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

人脸识别人脸识别是一种基于人的脸部特征信息进行身份识别的生物识别技术。通常是指用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的技术。人脸识别的基本步骤是人脸检测和匹配识别,即是对检测的人脸进行分类。本章节将会从人脸检测入手完成一个基本的人脸识别程序。Section人脸检测人脸识别程序人脸匹配和识别人脸检测人脸检测是对图像中的人脸进行定位。进行人脸检测时通常使用Haar分类器对图像进行人脸检测。本质上是通过先验知识得到专用于对人脸进行特征提取的模板,使用提取的特征进行分类器的训练,最后训练好的分类器可以高准确率地分辨出提取的特征是否为人脸。Haar分类器主要由Haar-like特征、积分图、级联AdaBoost算法组成。其中Haar-like特征对应人脸特征提取,积分图用来优化提取到的大量参数,级联AdaBoost对目标图像的特征点进行降维,选择出利于图像分类的最优特征点,并进行组合成为级联检测器,从而利用其检测器进行判断目标图像中的内容是否为人脸。Haar分类器中的级联AdaBoost训练需要大量的数据,但是OpenCV已经为我们准备好了训练好的分类器参数xml文件,并存放在Python安装目录下的Lib\site-packages\cv2\data路径下。可以参考右图。可以看到路径下存放了haar分类器对各种检测目标训练的分类器参数,这里我们选择默认人脸检测参数haarcascade_frontalface_default.xml和人眼检测的参数haarcascade_eye.xml,将两份文件到工程目录下方便调用。接下来我们来实现实时人脸检测的程序,效果如图。程序中我们创建分类器对人脸进行检测,并在检测到的人脸ROI区域上检测人眼区域,最后绘制检测到的ROI区域。用于传入xml参数文件的路径生成级联分类器实例。cv2.CascadeClassifier()用于获取对应分类器图像检测结果:第一个参数,numpy.ndarray类型的img,表示待检测图像。第二个参数,float类型的scaleFactor,表示指定图像压缩比例。第三个参数,int类型的minNeighors,表示构成检测目标的相邻矩形的最小个数,默认值为3,可以通过增加数值来降低误识别率。cv2.CascadeClassifier.detectMultiScale(image,scaleFactor,minNeighbors,flags,minSize,maxSize)->objects第四个参数,bool类型的flags,无实际意义。第五个参数,tuple类型的minSize,表示最小的矩形候选框大小,小于此值的矩形候选框会忽略。第六个参数,tuple类型的maxSize,表示最大的矩形候选框大小,大于此值的矩形候选框会忽略。第一个返回的参数,numpy.ndarray类型的objects,表示检测到的矩形候选框集合,元素为[x,y,w,h]分别表示矩形候选框的(x,y)坐标以及大小(w,h)。cv2.CascadeClassifier.detectMultiScale(image,scaleFactor,minNeighbors,flags,minSize,maxSize)->objects人脸识别程序我们通过学习人脸检测这节的内容,了解了如何使用OpenCV进行对人脸检测。在接下来的程序中,我们将利用上节所学知识,实现一个具有完整功能的人脸识别程序,即具有人脸采集、人脸检测和人脸识别功能。人脸识别程序主要包括人脸采集及检测模块和人脸的匹配识别模块,即先从图像或视频资源中检测人脸并保存,并使用OpenCV提供的模型进行训练保存训练参数,最后应用这些训练参数完成对人脸的判别实现识别。人脸识别程序的项目结构如下:其中generate.py为人脸检测及采集模块,train.py和face_recognition.py属于人脸的匹配识别模块。faces、test和train文件夹分别用于存放人脸数据、用于测试人脸识别程序的视频文件和用于人脸检测和采集的视频文件。人脸识别程序还提供了从摄像头获取视频流来采集人脸数据的选项。人脸检测模块与人脸采集模块读取train文件夹中人脸数据并进行采集,程序运行效果如图,并将采集到的人脸数据以.pgm格式存放。程序中对定位到的人脸进行裁剪并缩放为200×200的大小,最后保存为.pgm灰度图格式,在检测过程中设定了20帧的检测间隔以便能截取到不同姿态的人脸,从而提高人脸识别程序的识别率。用于对图像进行缩放:第一个参数,numpy.ndarray类型的src,进行缩放的图像。第二个参数,tuple类型的dsize,表示缩放目标的具体大小,例如(width,height)分别表示缩放目标的宽、高。第三个参数,numpy.ndarray类型的src,表示缩放后的目标图像,需要与原图拥有相同大小和类型。cv2.resize(src,dsize,dst,fx,fy,interpolation)->dst第四个参数,float类型的fx,表示缩放目标x轴方向的缩放因子。当数值为0时,按照dsize参数进行缩放。第五个参数,float类型的fy,表示缩放目标y轴方向的缩放因子。当数值为0时,按照dsize参数进行缩放。第六个参数,int类型的interpolation,表示缩放过程中的缩放插值算法。默认为cv2.INTER_LINEAR。第一返回的参数,numpy.ndarray类型的dst,表示缩放后的目标图像,同第三个参数。cv2.resize(src,dsize,dst,fx,fy,interpolation)->dst其中增加了coolgirl和coolgirl_1两个文件夹以及复数的.pgm人脸图像,对应coolgirl和coolgirl_1两个人。人脸匹配和识别

通过人脸检测一节人脸检测及采集后,我们获得了人脸数据,在对人脸进行匹配和识别的应用之前,我们还需要利用该人脸数据进行模型的训练,才能应用在人脸识别模块中。接下来我们来学习什么是训练模型,如何进行训练模型,并如何利用训练好的模型进行人脸识别。这里说的模型是指机器学习中的概念,即是指能对数值化的图像、文字、语言等生活中的数据的变化和关联进行运算的一个复杂的复合函数。例如,我们对程序输入一幅coolgirl图像,程序可以“认出”coolgirl。训练模型则是指通过输入多个或者大量的数值化后的生活中的数据,对模型进行参数优化,来提升这个模型的准确率。所以训练模型就是指对模型参数优化的过程。 训练模型的程序通过传入faces文件夹中采集的人脸数据来训练OpenCV库中的LBPH模型,最后将优化的模型参数保存在face_recognizer.yml文件中。以便后续人脸识别程序的使用。训练模型训练模型程序中,字典names记录每个人名字对应的唯一序列号,用于在训练模型时标识人脸数据,序列号labels在机器学习中称之为标签label。使用pickle库将标签与人名的键值保存在names.pickle文件中,用于在后续人脸识别中通过标签找到对应的人名。程序处理过程如图所示。训练模型训练模型在程序中我们使用cv2.face.LBPHFaceRecognizer_create创建人脸识别模型对象recognizer,调用recognizer.train()函数和recognizer.save()函数完成对模型的训练和训练参数的存储。训练模型用于对传入的图像集合进行训练recognizer.train()函数训练模型用于对传入的图像集合进行训练:第一个参数,list类型的src,表示进行模型训练的图像集合。第二个参数,numpy.ndarray类型的labels,src图像集合对应的标签的集合。需要注意因每个图像和标签一一对应,故len(src)==labels.shape[0],即src和labels集合长度必须相等。cv2.face.LBPHFaceRecognizer_create().train(src,labels)训练模型用于保存训练的参数:第一个参数,str类型的src,表示模型的参数信息保存地址,模型参数文件为.xml或.yaml格式。cv2.face.LBPHFaceRecognizer_create().save(src)训练模型识别部分程序使用存储在face_recognition.yml中的训练后的参数来加载模型,使用模型对定位到的人脸区域进行预测并判别实现识别,如下图所示。人脸识别人脸识别人脸识别人脸识别在程序中我们使用cv2.face.LBPHFaceRecognizer_create()函数创建人脸识别模型对象recognizer,调用recognizer.read()函数和recognizer.predict()函数分别完成对模型的读取和预测。在程序中我们使用cv2.face.LBPHFaceRecognizer_create()函数创建人脸识别模型对象recognizer,调用recognizer.read()函数和recognizer.predict()函数分别完成对模型的读取和预测。人脸识别完成对模型的读取:第一个参数,str类型的src,表示加载的模型参数信息的地址,模型参数文件为.xml或.yaml格式。人脸识别recognizer.read(filename)完成对模型的预测

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论