OpenCV-Python开发指南(43)---EigenFaces人脸识别

EigenFaces原理

EigenFaces通常也被称为特征脸,它使用主成分分析(Principal Component Analysis,PAC)方法将高维的人脸数据处理为低维数据后,在进行数据分析和处理,获取识别结果。

EigenFaces简单来说就是对原始数据使用PCA方法进行降维,获取其中的主成分信息,从而实现人脸识别的方法。

EigenFaces识别步骤

在OpenCV中,它给我们提供函数cv2.face.EigenFaceRecognizer_create()生成特征脸识别器,然后应用cv2.face_EigenFaceRecognizer.train()函数完成训练,最后用cv2.face_FaceRecognizer.predict()导入要识别的人脸图像,获取预测结果。

是不是与上一篇博文人脸识别的步骤一摸一样呢?不过,虽然最后一个方法相同,但前面两个方法还是不同的,我们也同样介绍一下函数的定义与使用。

cv2.face.EigenFaceRecognizer_create(num_components=None, threshold=None)

num_components:在PCA中要保留的分量个数。当然,该参数值通常要根据输入数据来具体确定,并没有一定取值。一般程序中,取80即可

threshold:进行人脸识别所采用的阈值

cv2.face_EigenFaceRecognizer.train(self, src, labels)

这里的src,labels参数与LBPH人脸识别的train函数一摸一样,这里就不在赘述。

EigenFaces实战人脸识别

了解了EigenFaces人脸识别步骤。下面,我们还是使用前文的2张图片作为训练集,进行瑞克与尼根的判断,具体代码如下:

import cv2
import numpy as np

images = []
images.append(cv2.imread("42_1.jpg", cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("42_2.jpg", cv2.IMREAD_GRAYSCALE))
labels = [0, 1]
recognizer = cv2.face.EigenFaceRecognizer_create()
recognizer.train(images, np.array(labels))
predict_image = cv2.imread('42_4.jpg', cv2.IMREAD_GRAYSCALE)
label, confidence = recognizer.predict(predict_image)
if label == 0:
    print("匹配的人脸为尼根")
elif label == 1:
    print("匹配的人脸为瑞克")
print("confidence=", confidence)

这里我们使用尼根的头像作为测试人脸识别的图像。运行之后效果如下:
结果

扫描二维码关注公众号,回复: 13121817 查看本文章

EigenFaces人脸识别唯一的缺陷就是不管是训练的图像,还是测试的图像,其大小必须一致。而LBPH人脸识别并不需要图像大小一致。还有EigenFaces人脸识别返回的confidence大小介于0到20000,只要低于5000都被认为是可靠的结果。这个有LBPH不同,需要额外注意。

训练集图像:
42_1
42_2
测试图像:
42_4

猜你喜欢

转载自blog.csdn.net/liyuanjinglyj/article/details/114451053