《深度学习》OpenCV EigenFaces算法 人脸辨认

[复制链接]
发表于 2024-10-20 13:58:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
目录
一、EigenFaces算法
1、什么是EigenFaces算法
2、原理
3、实现步骤
1)数据预处理
2)特征提取
3)构建模子
4)辨认
4、优缺点
1)优点
2)缺点
二、案例实现
1、完整代码
运行结果:


一、EigenFaces算法

1、什么是EigenFaces算法

        EigenFaces算法,又称为基于主身分分析(Principal Component Analysis,PCA)的人脸辨认方法,是一种在人脸辨认范畴具有重要职位的经典算法。
        主身分分析(PCA)是一种矩阵的压缩算法,在淘汰矩阵维数的同时尽大概的保留原矩阵的信息,简单来说就是将 n×m的矩阵转换成n×k的矩阵,仅保留矩阵中所存在的主要特性,从而可以大大节省空间和数据量。

2、原理

        EigenFaces算法的焦颔首脑是从统计的角度,寻找人脸图像分布的根本元素,即人脸图像样本集协方差矩阵的特征向量,以此近似地表征人脸图像。这些特征向量被称为特征脸(Eigenfaces),它们反映了隐含在人脸样本集合内部的信息和人脸的结构关系。
        EigenFaces算法首先将输入的人脸图像看作高维空间中的向量,然后对这些向量进行统计分析,盘算其协方差矩阵,并提取出该矩阵的特征向量和特征值。这些特征向量就是用于表征人脸的特征脸。

3、实现步骤

        1)数据预处理

                对人脸图像进行灰度化、归一化、去噪等使用,以消除图像中的噪声和差异,进步辨认准确性。
        2)特征提取

                将预处理后的人脸图像看作高维空间中的向量,通过统计分析这些向量的协方差矩阵,提取出人脸的主要特征向量(即特征脸)。
        3)构建模子

                将提取出的特征脸用于构建人脸辨认模子。该模子可以是一个分类器、神经网络或其他机器学习模子。
        4)辨认

                将待辨认的人脸图像输入到模子中,通过比对特征脸,实现人脸辨认。

4、优缺点

        1)优点

                • 简单直观:基于统计分析,可以直观地理解人脸特征的提取和辨认过程。
                • 高效性:能够快速处理大量的人脸图像,实现高效的人脸辨认。
        2)缺点

                • 对光照和心情变革的敏感性:在复杂情况下,光照和心情变革大概导致辨认效果不佳。
                •​​​​​​​ 对训练样本数量的依赖:需要大量的训练样本才华提取出有效的特征,限制了其在小样本情况下的应用。
                •​​​​​​​ 盘算复杂度较高:对于实时性要求高的应用场景大概不太得当。

二、案例实现

1、完整代码

  1. import cv2
  2. import numpy as np
  3. images = []
  4. a = cv2.imread('pyy1.png',0)   # 读取图像,改变其尺寸,将图像存入列表
  5. a = cv2.resize(a,(170,180))
  6. b = cv2.imread('pyy2.png',0)
  7. b = cv2.resize(b,(170,180))
  8. c = cv2.imread('zly1.png',0)
  9. c = cv2.resize(c,(170,180),)
  10. d = cv2.imread('zly2.png',0)
  11. d = cv2.resize(d,(170,180))
  12. images.append(a)
  13. images.append(b)
  14. images.append(c)
  15. images.append(d)
  16. labels = [0,0,1,1]   # 设置列表中图像标签
  17. pre_image = cv2.imread('zly3.png',0)
  18. pre_image = cv2.resize(pre_image,(170,180))
  19. """创建EigenFace人脸识别器"""
  20. # cv2.face.EigenFaceRecognizer_create(num_components=None, threshold=None)
  21. # num_components:指定在特征脸分解过程中要保留的特征向量(即主成分)的数量,特征向量的数量决定了识别器的复杂度和准确性,如果不指定,则默认使用所有可用的特征向量。
  22. # threshold:进行人验识别所采用的阈值,识别是通过计算待识别图像与每个已知人脸之间的欧氏距离来实现的。如果最小距离小于指定的阈值,则认为识别成功,并返回对应的标签;否则,返回-1表示未识别
  23. recognizer = cv2.face.EigenFaceRecognizer_create()
  24. recognizer.train(images,np.array(labels))
  25. # 对预测图像(pre_image)进行人验识别预测
  26. # confidence:大小介于0到20000,只要低于5000都被认为是可的结果。
  27. label,confidence = recognizer.predict(pre_image)
  28. dic= {0:'pyy',1:'zly'}
  29. print("这人是:",dic[label])
  30. print('置信度为:',confidence)
  31. """在图像上写上标签内容"""
  32. aa = cv2.putText(cv2.imread('zly3.png').copy(),dic[label], (10,30),cv2.FONT_HERSHEY_SIMPLEX, 0.9,  (0,0,255), 2)
  33. cv2.imshow("xx",aa)
  34. cv2.waitKey(0)
复制代码
        运行结果:








免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-10 01:32 , Processed in 0.134967 second(s), 32 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表