人脸识别(fisherface)的原理及代码实现

目录

fisherface的原理

代码实现

完整代码


Fisherface人脸识别原理是基于线性判别分析(Linear Discriminant Analysis,LDA)的一种方法。线性判别分析是一种经典的线性学习方法,最早由Fisher在1936年提出,也被称为“Fisher判别分析法”

简易过程:

fisherface的原理

基本原理:在低维表示下,首先将训练集样本集投影到一条直线A上,让投影后的点满足同类间的点尽可能地靠近,异类间的点尽可能地远离。

然而,这种方法在操作过程中可能会损失许多用于分类的关键信息。因此,在某些特殊的情况下,如果损失的信息刚好是用于分类的关键信息,必然导致结果预测错误。

代码实现

重要函数:cv2.face.FisherFaceRecognizer_create(threshold=1000)

作用:创建一个FisherFace的人脸特征识别器
threshold:进行识别时所用的阈值。如果最近的距离比设定的阈值threshold还要大,函数会返回“-1”。

完整代码

 代码用到的图片:

import cv2
import numpy as np

# 将训练图片统一放在列表里
images = []  # 读取训练图像


images.append(cv2.imread('./lbph/f01.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('./lbph/f02.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('./lbph/f11.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('./lbph/f12.png', cv2.IMREAD_GRAYSCALE))

# 与训练图集一一匹配
labels = [0, 0, 1, 1]  # 给训练图像贴标签

# 用来测试的图片
predict_image = cv2.imread('./lbph/fTest.png', cv2.IMREAD_GRAYSCALE)

# 定义FisherFace人脸特征识别器
recognizer = cv2.face.FisherFaceRecognizer_create(threshold=1000)

# None = cv2.faceFaceRecognizer.train(src, labels )
# 参数的含义如下:
#   src: 训练图像,用来学习的人脸图像
#   labels: 标签,人脸图像对应的标签。
recognizer.train(images, np.array(labels))

# confidence:大小介于0到20000,只要低于5000都被认为是可靠的结果。
label, confidence = recognizer.predict(predict_image)
# 打印识别结果
print("识别标签label=", label)
print("置信度confidence=", confidence)

代码结果:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值