《深度学习》OpenCV EigenFaces算法 人脸识别

目录

一、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、完整代码

python 复制代码
import cv2
import numpy as np

images = []
a = cv2.imread('pyy1.png',0)   # 读取图像,改变其尺寸,将图像存入列表
a = cv2.resize(a,(170,180))
b = cv2.imread('pyy2.png',0)
b = cv2.resize(b,(170,180))
c = cv2.imread('zly1.png',0)
c = cv2.resize(c,(170,180),)
d = cv2.imread('zly2.png',0)
d = cv2.resize(d,(170,180))
images.append(a)
images.append(b)
images.append(c)
images.append(d)

labels = [0,0,1,1]   # 设置列表中图像标签

pre_image = cv2.imread('zly3.png',0)
pre_image = cv2.resize(pre_image,(170,180))

"""创建EigenFace人脸识别器"""
# cv2.face.EigenFaceRecognizer_create(num_components=None, threshold=None)
# num_components:指定在特征脸分解过程中要保留的特征向量(即主成分)的数量,特征向量的数量决定了识别器的复杂度和准确性,如果不指定,则默认使用所有可用的特征向量。
# threshold:进行人验识别所采用的阈值,识别是通过计算待识别图像与每个已知人脸之间的欧氏距离来实现的。如果最小距离小于指定的阈值,则认为识别成功,并返回对应的标签;否则,返回-1表示未识别
recognizer = cv2.face.EigenFaceRecognizer_create()

recognizer.train(images,np.array(labels))

# 对预测图像(pre_image)进行人验识别预测
# confidence:大小介于0到20000,只要低于5000都被认为是可的结果。
label,confidence = recognizer.predict(pre_image)
dic= {0:'pyy',1:'zly'}
print("这人是:",dic[label])
print('置信度为:',confidence)

"""在图像上写上标签内容"""
aa = cv2.putText(cv2.imread('zly3.png').copy(),dic[label], (10,30),cv2.FONT_HERSHEY_SIMPLEX, 0.9,  (0,0,255), 2)
cv2.imshow("xx",aa)
cv2.waitKey(0)
运行结果:
相关推荐
ml魔力信息15 分钟前
活体检测与防伪技术的安全与隐私分析
大数据·人工智能·安全·隐私保护·生物识别·活体检测
赴33517 分钟前
基于pth模型文件,使用flask库将服务端部署到开发者电脑
人工智能·flask·客户端·模型部署·服务端
hhhhhlt18 分钟前
【代码大模型-后门安全】Backdoors in Neural Models of Source Code
人工智能·安全
智驱力人工智能19 分钟前
工厂抽烟检测系统 智能化安全管控新方案 加油站吸烟检测技术 吸烟行为智能监测
人工智能·算法·安全·边缘计算·抽烟检测算法·工厂抽烟检测系统·吸烟监测
liaomin41610056920 分钟前
transformers音频实战02-基于 Speech Commands 数据集的语音识别实战项目全流程
人工智能·音视频·语音识别
爱思德学术35 分钟前
中国计算机学会(CCF)推荐学术会议-B(计算机网络):SenSys 2026
人工智能·计算机网络·嵌入式·传感系统
a1111111111ss1 小时前
添加最新的LSKNet遥感目标检测网络主干
人工智能·目标检测·计算机视觉
relis1 小时前
llama.cpp Flash Attention 论文与实现深度对比分析
人工智能·深度学习
盼小辉丶1 小时前
Transformer实战(21)——文本表示(Text Representation)
人工智能·深度学习·自然语言处理·transformer
艾醒(AiXing-w)1 小时前
大模型面试题剖析:模型微调中冷启动与热启动的概念、阶段与实例解析
人工智能·深度学习·算法·语言模型·自然语言处理