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)
这里我们使用尼根的头像作为测试人脸识别的图像。运行之后效果如下:
1.png
EigenFaces人脸识别唯一的缺陷就是不管是训练的图像,还是测试的图像,其大小必须一致。而LBPH人脸识别并不需要图像大小一致。还有EigenFaces人脸识别返回的confidence大小介于0到20000,只要低于5000都被认为是可靠的结果。这个有LBPH不同,需要额外注意。
训练集图像:
42_1.jpg 42_2.jpg
测试图像:
42_4.jpg
网友评论