OpenCV计算机视觉处理 课件 模块十一 人脸检测及人脸识别_第1页
OpenCV计算机视觉处理 课件 模块十一 人脸检测及人脸识别_第2页
OpenCV计算机视觉处理 课件 模块十一 人脸检测及人脸识别_第3页
OpenCV计算机视觉处理 课件 模块十一 人脸检测及人脸识别_第4页
OpenCV计算机视觉处理 课件 模块十一 人脸检测及人脸识别_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

OpenCV计算机视觉处理Computervisionprocessing模块十一人脸检测及人脸识别模块概述在数字化时代的浪潮下,人脸检测与识别技术已经成为了信息科技领域的热点之一。随着计算机视觉和人工智能的不断进步,人脸检测与识别技术不仅在安防领域发挥着重要作用,还被广泛应用于商业、医疗、教育等各个领域。以安防领域为例,人脸检测与识别技术被广泛应用于监控系统中,帮助警方或企业实现对人员的精准识别和追踪,提升了公共安全和防范能力。在商业领域,人脸识别技术也被用于零售行业的客流统计、会员管理等方面,为企业提供了更便捷和智能的服务手段。在医疗领域,人脸识别技术可以帮助医院提高患者信息管理的效率,减少医疗事故的发生。然而,人脸检测与识别技术也面临着一系列挑战和争议,比如隐私保护、数据安全、算法偏差等问题。因此,了解人脸检测与识别技术的原理、方法以及应用场景,不仅有助于我们深入理解这一新兴技术的发展趋势,还能够帮助我们更好地应对相关的伦理、法律和社会问题。本模块将介绍人脸检测和识别的原理以及基本方法。学习导航学习目标1.知识目标(1)了解人脸检测原理;(2)掌握基于级联分类器的人脸检测使用方法;(3)了解人脸识别原理;(4)掌握三种OpenCV提供的人脸识别训练和预测方法。学习目标2.能力目标(1)通过完成人脸检测和识别功能代码的编写,培养学生对人脸检测和识别库函数的使用能力;(2)通过人脸识别学习,使学生掌握分类问题通用解决方案,具备数据集准备、训练和预测完整流程开发能力。学习目标3.素质目标(1)通过算法原理的学习,培养学生对知识的深度学习能力;(2)培养学生通过逻辑分析和推理解决问题的能力;(3)培养学生合作能力。任务一人脸检测

任务导入Haar特征级联分类器(HaarCascadeClassifier)是OpenCV中提供的经典人脸检测方法。Haar特征级联分类器是一种基于Haar特征的方法。Haar特征基于图像局部区域的简单特征,它们可以帮助识别图像中的目标。Haar级联分类器由一系列用于区分目标和非目标区域的弱分类器组成的。通过使用训练好的级联分类器模型,可以在图像中快速检测到人脸区域。OpenCV中提供了预训练的Haar级联分类器模型,可以直接用于人脸检测。OpenCV也提供了易于使用的API,可以轻松地调用这些人脸检测器来检测图像或者视频中的人脸区域,并且提供了一系列的函数来进行人脸区域的标定、绘制和后续处理,能够很方便地构建基于人脸检测的应用程序。任务实施案例代码1.import

cv2

2.#

用于绘制图像

3.import

matplotlib.pyplot

as

plt

4.#

加载级联

5.face_cascade

=

cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

6.#

读取输入图像

7.img

=

cv2.imread('lena.png')

8.#

检测人脸

9.faces

=

face_cascade.detectMultiScale(image=img,

scaleFactor=1.1,

minNeighbors=5)

10.#

在人脸周围绘制边界框

11.for

(x,

y,

w,

h)

in

faces:

12.

cv2.rectangle(img,

(x,

y),

(x+w,

y+h),

(255,

0,

0),

2)

13.#

显示图像中检测到的人脸数量

14.print(len(faces),"faces

detected!")

15.#

绘制检测到人脸的图像

16.finalimg

=

cv2.cvtColor(img,

cv2.COLOR_RGB2BGR)

17.plt.figure(figsize=(12,12))

18.plt.imshow(finalimg)

19.plt.axis("off")

20.plt.show()

基于Haar级联分类器的人脸检测结果知识拆解1.Haar特征分类器原理Haar特征级联分类器可以在训练过程中学习到如何区分人脸和非人脸,并构建一个高效的级联分类器模型,用于在新的图像上快速检测人脸区域。Haar特征是一种基于图像局部区域的简单特征。它们可以是矩形区域中像素值的差异,例如,一个白色矩形区域减去一个黑色矩形区域的像素值之和。这些矩形区域可以是不同大小、不同位置、不同方向的。Haar特征可以描述图像中的边缘、线条、角等特征知识拆解1.Haar特征分类器原理使用AdaBoost(AdaptiveBoosting)算法,选择一组最佳的特征来区分人脸和非人脸区域,如图11-3所示。AdaBoost会通过多轮迭代,逐步训练一系列弱分类器,每个弱分类器都是基于单个特征的简单分类器。在每一轮迭代中,AdaBoost会调整样本的权重,使得之前被错误分类的样本在下一轮迭代中受到更多的关注。知识拆解1.Haar特征分类器原理将多个弱分类器级联组成一个强分类器。级联分类器由多个阶段组成,每个阶段包含多个弱分类器,如图11-4所示。级联分类器中的每个阶段都会按照一定的顺序进行分类,如果某一阶段的弱分类器判定某个区域为非人脸,则直接将该区域排除,不再进行后续的特征计算和分类,从而提高检测速度。知识拆解1.Haar特征分类器原理级联分类器初始化:cv2.CascadeClassifier()作用:实现预训练XML级联分类器的初始化。语法格式:cv2.CascadeClassifier(filename)filename:预训练XML文件路径。OpenCV提供了多种预训练的级联分类器模型,并不限于人脸,可以在官方github仓库(/opencv/opencv/tree/4.x/data/haarcascades)中下载使用。知识拆解1.Haar特征分类器原理人脸检测函数:cv2.detectMultiScale()作用:检测出目标对象的矩形边界框。语法格式:cv2.detectMultiScale(image,scaleFactor,minNeighbors,minSize=None,maxSize=None,flags=None)cv2.CascadeClassifier(filename)image:待检测的输入图像,通常为灰度图像。scaleFactor:每次图像尺寸缩小的比例。默认情况下,该参数为1.1,表示每次缩小图像尺寸11%。该参数用于在不同尺度上检测对象,允许检测到不同尺寸的对象。minNeighbors:每个目标应该被检测到多少次才能被认定为有效目标。该参数影响最终的检测结果质量,通常为一个整数值,可以调整以获得更好的结果。minSize:目标的最小尺寸,即最小允许检测到的对象的尺寸。默认为None,表示没有限制。maxSize:目标的最大尺寸,即最大允许检测到的对象的尺寸。默认为None,表示没有限制。flags:有关对象标志的可选参数。可以是以下几种情况的组合:cv2.CASCADE_SCALE_IMAGE:使用缩放图像进行检测(默认)。cv2.CASCADE_FIND_BIGGEST_OBJECT:只检测图像中最大的对象。cv2.CASCADE_DO_ROUGH_SEARCH:使用粗略的检测算法以加速检测。函数返回一个由检测到的对象的矩形边界框组成的NumPy数组,每个矩形由(x,y,w,h)表示,其中(x,y)是矩形左上角的坐标,(w,h)是矩形的宽度和高度。知识运用OpenCV同时提供了人脸、鼻子、眼睛等人脸关键信息检测的模型文件。尝试使用openCV训练好的xml格式的级联分类器进行人脸、眼睛以及鼻子的识别。人脸关键信息检测的应用不仅可以用于疲劳监测、情感分析等场景,更可以在社会治理、公共安全等领域发挥积极作用。我们应当充分认识到技术的进步所带来的社会责任,将其运用于构建更加和谐、安全、高效的社会环境。

知识运用1.import

cv2

2.#

用于绘制图像

3.import

matplotlib.pyplot

as

plt

4.

5.#

加载级联模型,更多级联分类器模型可从/opencv/opencv_attic/tree/master/opencv/data/haarcascades下载

6.target

=

{

7.

"face":

"haarcascade_frontalface_default.xml",

8.

"eye":

"haarcascade_eye.xml",

9.

"nose":

"haarcascade_mcs_nose.xml",

10.}

11.#

读取输入图像

12.img

=

cv2.imread('man.jpg')

13.

14.for

k,

v

in

target.items():

15.

face_cascade

=

cv2.CascadeClassifier(v)

16.

#

检测人脸

17.

target_num

=

face_cascade.detectMultiScale(image=img,

scaleFactor=1.1,

minNeighbors=5)

18.

19.

#

在人脸周围绘制边界框

20.

for

(x,

y,

w,

h)

in

target_num:

21.

cv2.rectangle(img,

(x,

y),

(x

+

w,

y

+

h),

(255,

0,

0),

2)

22.

23.#

绘制检测目标的图像

24.final_img

=

cv2.cvtColor(img,

cv2.COLOR_RGB2BGR)

25.plt.figure(figsize=(12,

12))

26.plt.imshow(final_img)

27.plt.axis("off")

28.plt.show()任务小结

Haar级联分类器的原理人脸检测方法使用Haar级联分类器进行人脸区域检测什么是Haar特征如何使用Haar特征进行分类任务一

人脸检测对鼻子眼睛的检测鼻子、眼睛等人脸关键信息检测任务二人脸识别

任务导入OpenCV提供了3种人脸识别算法,分别是LBPH、Eigenfaces和Fisherfaces。这3种算法都是通过对比样本的特征最终实现人脸识别。OpenCV为三种识别算法都供了创建识别器、训练识别器和识别3种方法。对应的OpenCV构造函数是分别是cv2.face.LBPHFaceRecognizer_create()、cv2.face.EigenFaceRecognizer_create()和cv2.face.FisherFaceRecognizer_create()。任务实施案例代码

1.import

cv2

2.import

numpy

as

np

3.

images

=

[]

4.labels

=

[]

5.#

读取用于训练的图像

6.images.extend([cv2.imread(f"output_faceRImage/s1/{i

+

1}.bmp",

cv2.IMREAD_GRAYSCALE)

for

i

in

range(9)])

7.images.extend([cv2.imread(f"output_faceRImage/s2/{i

+

1}.bmp",

cv2.IMREAD_GRAYSCALE)

for

i

in

range(9)])

8.#

为训练图像分配标签

9.labels.extend([0

for

i

in

range(9)])

10.labels.extend([1

for

i

in

range(9)])

11.

12.#

初始化三种人脸识别器

13.recognizers

=

{

14.

"LBPH":

cv2.face.LBPHFaceRecognizer_create(),

15.

"EigenFace":

cv2.face.EigenFaceRecognizer_create(),

16.

"FisherFace":

cv2.face.FisherFaceRecognizer_create(),

17.}

18.for

k,

v

in

recognizers.items():

19.

#

使用图像和标签进行训练

20.

v.train(images,

np.array(labels))

21.

#

读取要预测的图像

22.

predict_image_1

=

cv2.imread("output_faceRImage/s1/10.bmp",

cv2.IMREAD_GRAYSCALE)

23.

predict_image_2

=

cv2.imread("output_faceRImage/s2/10.bmp",

cv2.IMREAD_GRAYSCALE)

24.

#

使用识别器预测标签

25.

label,

confidence

=

v.predict(predict_image_1)

26.

print(f"recognizer={k}\tlabel={label}\tconfidence={confidence}")

27.

label,

confidence

=

v.predict(predict_image_2)

28.

print(f"recognizer={k}\tlabel={label}\tconfidence={confidence}")

任务实施

案例结果

知识拆解1.人脸识别原理三种人脸识别方法都是基于特征匹配,对训练集中不同类别的数据特征进行学习。在预测阶段,将要预测的图片提取特征与训练集特征进行比较,选择特征相似的分类作为最后的分类结果。三种方法的特征提取方法不尽相同。知识拆解1.人脸识别原理LBP局部二值模式(LocalBinaryPatterns)是一种用来描述图像局部纹理特征的方法。它将每个像素的周围邻域与该像素值进行比较,并将比该像素值大的像素置为1,小的置为0,从而得到一个二进制模式。通过这种方式,图像中的纹理信息得到了有效的编码。在图像中,对于每个局部区域提取的LBP特征,可以得到一个LBP模式直方图。直方图描述了每个LBP模式在该区域中出现的频率。LBPH人脸识别算法基于对人脸图像中提取的局部二值模式直方图进行建模和比较。对于每张人脸图像,首先将其分成若干个局部区域,然后在每个区域中提取LBP特征,并构建其对应的LBP模式直方图。通过将这些局部直方图连接起来形成一个全局直方图,LBPH算法能够有效地捕获图像中的纹理信息。在识别阶段,将待识别的人脸图像提取特征,并与已知的人脸特征进行比较,通常使用欧氏距离或者其他相似度度量方法进行比较,找到最相似的人脸特征。知识拆解1.人脸识别原理Eigenface是一种基于主成分分析(PrincipalComponentAnalysis,PCA)错误!未找到引用源。的人脸识别方法。该方法将每个人脸图像视为一个高维向量,将所有图像组成一个大的数据矩阵。对这个数据矩阵进行PCA,以降低数据的维度。PCA会找到数据中的主要方差,并将数据投影到一个新的低维空间中,这些新的维度称为主成分。这些主成分是数据中的特征向量,其对应的特征值表示了在这个方向上的方差大小。在人脸识别任务中,主成分实际上代表了图像中的重要特征,而特征值则表示了这些特征的重要性。主成分对应的特征向量可以被视为“特征脸”,它们代表了人脸数据中的一些重要模式或特征。这些特征脸是通过线性组合原始人脸图像得到的,每个特征脸包含了一种人脸的特定表情或结构信息。在预测时,首先将预测图像投影到主成分空间中,得到相应的特征向量。然后,将这个特征向量与训练集中的特征向量进行比较,根据最相似的训练集样本的标签,来确定待识别的人脸属于哪个人。知识拆解1.人脸识别原理Fisherface是一种改进的人脸识别方法,它是基于Fisher线性判别分析(FisherLinearDiscriminantAnalysis,FisherLDA)的。与Eigenface方法类似,Fisherface也是通过特征提取和分类来实现人脸识别的,但它相比于Eigenface方法在一些方面有所改进。与PCA不同,Fisherface使用FisherLDA来提取特征。FisherLDA的目标是将数据投影到一个新的低维空间,以最大化不同类别之间的类内散度同时最小化类间散度。在人脸识别中,这意味着投影后的特征能够更好地区分不同的人脸。与Eigenface中的特征脸类似,Fisherface也会生成一组特征脸。这些特征脸是在FisherLDA投影的新空间中生成的,它们代表了最能区分不同人脸的特征。预测阶段与Eigenface基本一致。知识拆解2.识别器创建函数:cv2.face.LBPHFaceRecognizer_create()、

温馨提示

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

评论

0/150

提交评论