【进阶OpenCV】 (16)-- 人脸识别 -- FisherFaces算法

文章目录

FisherFaces算法

PCA方法是EigenFaces人脸识别的核心,但是其具有明显的缺点,在操作过程中会损失许多人脸的特征信息。因此在某些特殊的情况下,如果损失的信息刚好是用于分类的关键信息,必然导致结果预测错误。于是我们推出来新的方法:

FisherFaces算法 ,也称为线性判别分析(LDA)在人脸识别领域的应用,是一种经典且有效的人脸识别方法

一、算法原理

FisherFaces算法基于LDA技术,其核心思想是将高维的人脸图像数据投影到低维的最佳矢量空间。

  • 基本原理 :在低维表示下,首先将训练集样本集投影到一条直线A上,让投影后的点满足:同类间的点尽可能地靠近异类间的点尽可能地远离,以达到抽取重要分类信息和压缩特征空间维度的效果。投影后的模式样本在新的子空间中具有最大的类间距离和最小的类内距离,即模式在该空间中有最佳的可分离性。
  • 具体来说 :算法首先提取人脸图像的特征 ,这些特征可以包括人脸的形状、眼睛、嘴巴、鼻子等部位的几何特征,以及纹理、颜色等特征。然后,利用这些特征构建类内散度矩阵和类间散度矩阵类内散度矩阵 反映的是同一类人脸特征的相似性 ,而类间散度矩阵 反映的是不同类人脸特征的差异性 。通过求解这两个矩阵的广义特征问题,可以得到投影系数,这些投影系数可以将原始的人脸特征投影到低维空间中

  • 实际应用中:FisherFaces算法已经广泛应用于人脸认证、人脸追踪、人脸合成等领域。

二、算法优势与局限

  1. 优势
    • 能够有效降低计算复杂度,提高识别速度。
    • 保持较高的识别准确率。
    • 对光照和表情变化具有一定的鲁棒性。
  2. 局限
    • 在处理大规模数据集时,可能需要较长的训练时间和较高的计算资源。
    • 对于极端姿态或遮挡情况下的人脸识别,效果可能不佳。

三、算法实现

1. 图像预处理

准备好训练图像以及对应的标签,还有待识别图像:

注意!!! :在使用FisherFaces算法进行人脸识别时,传入图像的大小(即尺寸)需要保持一致

因为FisherFaces算法基于线性判别分析(LDA)技术,它需要将人脸图像投影到低维空间 以提取重要分类信息。在这个过程中,如果图像的大小不一致,那么转换后的矩阵或向量的维度也会不同,这将导致算法无法正确处理这些数据。此外,算法在计算类内散度矩阵和类间散度矩阵时,也需要所有输入图像的维度保持一致。

python 复制代码
import cv2
import numpy as np
def image_re(image):
    a = cv2.imread(image,0)
    a = cv2.resize(a,(75,100))
    return a

images = []
a = image_re('f1.jpg')
b = image_re('f2.jpg')
c = image_re('z1.jpg')
d = image_re('z2.jpg')

images.append(a)
images.append(b)
images.append(c)
images.append(d)

labels = [0,0,1,1]
pre_image = image_re('f_test.jpg')

2. 创建FisherFace人脸特征识别器

python 复制代码
recognizer = cv2.face.FisherFaceRecognizer_create()

3. 训练模型

python 复制代码
recognizer.train(images,np.array(labels))

4. 测试图像

置信度需要低于五千才有说服力,越小越准确。

python 复制代码
label,confidence = recognizer.predict(pre_image)
dic = {0:'yifei',1:"zrn"}
print('这人是',dic[label])
print('置信度',confidence)
aa = cv2.putText(cv2.imread('f_test.jpg').copy(),dic[label],(10,30),cv2.FONT_HERSHEY_SIMPLEX,
                 0.9,(0,0,255),2)
cv2.imshow('xx',aa)
cv2.waitKey(0)
-------------------
这人是 yifei
置信度 1806.3739273411293

总结

本篇介绍了,如何通过FisherFaces算法来实现人脸识别,其中需要注意的是:

  1. 在使用EigenFaces算法进行人脸识别时,传入图像的大小(即尺寸)需要保持一致。
  2. 训练以及测试图像最好使用大头照,减少身体的部分。
  3. 置信度需要低于五千才有说服力,越小越准确。
相关推荐
姜西西_6 分钟前
递归 算法专题
算法·深度优先
nurupo1238 分钟前
C++学习路线(二十五)
c++·学习·算法
爱思德学术-IAAST10 分钟前
中欧科学家论坛暨第六届人工智能与先进制造国际会议(AIAM 2024)在德国法兰克福成功举办,两百余名中外科学家共襄盛举
人工智能·学习·制造·学习方法·学术
deephub44 分钟前
过采样与欠采样技术原理图解:基于二维数据的常见方法效果对比
人工智能·python·机器学习·采样技术
HyperAI超神经1 小时前
对标Hugging Face?GitHub Models新增OpenAI o1/Llama 3.2等, 新功能支持模型并排比较
人工智能·机器学习·github·llama·huggingface
Topstip1 小时前
GitHub Copilot 转型采用多模型策略,支持 Claude 3.5 和 Gemini
人工智能·ai
Devil枫1 小时前
腾讯云云开发深度解读:云数据库、云模板与AI生成引用的魅力
数据库·人工智能·腾讯云
姚杰献1 小时前
机器学习、深度学习和强化学习的区别
人工智能·深度学习·机器学习
love_and_hope1 小时前
Pytorch学习--神经网络--线性层及其他层
人工智能·pytorch·python·深度学习·神经网络·学习·pip
LNTON羚通1 小时前
算法定制LiteAIServer视频智能分析平台裸土检测技术实现、应用场景与优势概览
大数据·算法·目标检测·音视频·监控