哪里网站建设便宜,WordPress功能模块排版,制作网站先做前端还是后端,一般公司网址都怎么写EigenFaces 通常也被称为 特征脸#xff0c;它使用主成分分析#xff08;Principal Component Analysis#xff0c;PCA#xff09; 方法将高维的人脸数据处理为低维数据后#xff08;降维#xff09;#xff0c;再进行数据分析和处理#xff0c;获取识别结果。 基本原理… EigenFaces 通常也被称为 特征脸它使用主成分分析Principal Component AnalysisPCA 方法将高维的人脸数据处理为低维数据后降维再进行数据分析和处理获取识别结果。 基本原理
在现实世界中很多信息的表示是有冗余的。例如表 23-2 所列出的一组圆的参数中就存在冗余信息。 在表 23-2 所示的参数中各个参数之间存在着非常强的相关性
直径 2*半径周长 2π半径面积 π半径半径
可以看到直径、周长和面积都可以通过半径计算得到。
在进行数据分析时如果我们希望更直观地看到这些参数的值就需要获取所有字段的值。
但是在比较圆的面积大小时仅使用半径就足够了此时其他信息对于我们来说就是“冗余”的。
因此我们可以理解“半径”就是表 23-2 所列数据中的“主成分”我们将“半径”从上述数据中提取出来供后续分析使用就实现了“降维”。
当然上面例子的数据非常简单、易于理解而在大多数情况下我们要处理的数据是比较复杂的。很多时候我们可能无法直接判断哪些数据是关键的“主成分”所以就要通过 PCA方法将复杂数据内的“主成分”分析出来。 EigenFaces 就是对原始数据使用 PCA 方法进行降维获取其中的主成分信息从而实现人脸识别的方法。 函数介绍
OpenCV 通过函数 cv2.face.EigenFaceRecognizer_create()生成特征脸识别器实例模型然后应用 cv2.face_FaceRecognizer.train()函数完成训练最后用 cv2.face_FaceRecognizer.predict()函数完成人脸识别。
函数cv2.face.EigenFaceRecognizer_create()
函数 cv2.face.EigenFaceRecognizer_create()的语法格式为 retval cv2.face.EigenFaceRecognizer_create( [, num_components[, threshold]] ) 式中的两个参数都是可选参数含义如下
num_components在 PCA 中要保留的分量个数。当然该参数值通常要根据输入数据 来具体确定并没有一定之规。一般来说80 个分量就足够了。threshold进行人脸识别时所采用的阈值。
函数cv2.face_FaceRecognizer.train() 函数 cv2.face_FaceRecognizer.train()对每个参考图像进行 EigenFaces 计算得到一个向量。 每个人脸都是整个向量集中的一个点。该函数的语法格式为 None cv2.face_FaceRecognizer.train( src, labels ) 式中各个参数的含义为
src训练图像用来学习的人脸图像。labels人脸图像所对应的标签。 该函数没有返回值。
函数cv2.face_FaceRecognizer.predict() 函数 cv2.face_FaceRecognizer.predict()在对一个待测人脸图像进行判断时会寻找与当前图像距离最近的人脸图像。与哪个人脸图像最接近就将待测图像识别为其对应的标签。该函数的语法格式为 label, confidence cv2.face_FaceRecognizer.predict( src ) 式中各个参数及返回值的含义为
src需要识别的人脸图像。label返回的识别结果标签。confidence返回的置信度评分。置信度评分用来衡量识别结果与原有模型之间的距离。
0 表示完全匹配。该参数值通常在 0 到 20 000 之间只要低于 5000都被认为是相当可靠的识别结果。注意这个范围与 LBPH 的置信度评分值的范围是不同的。
示例使用 EigenFaces 模块完成一个简单的人脸识别程序。
import cv2
import numpy as np
images[]
images.append(cv2.imread(face\\face2.png,cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread(face\\face3.png,cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread(face\\face4.png,cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread(face\\face5.png,cv2.IMREAD_GRAYSCALE))
labels[0,0,1,1]
#print(labels)
recognizer cv2.face.EigenFaceRecognizer_create()
recognizer.train(images, np.array(labels))
predict_imagecv2.imread(face\\face5.png,cv2.IMREAD_GRAYSCALE)
label,confidence recognizer.predict(predict_image)
print(label,label)
print(confidence,confidence)运行结果
报错了 说训练必须所有的图片大小要一致。
新代码 import cv2
import numpy as np
images[]
img1 cv2.imread(face\\face2.png,cv2.IMREAD_GRAYSCALE);
img1.resize((240,240))
images.append(img1)img2 cv2.imread(face\\face3.png,cv2.IMREAD_GRAYSCALE);
img2.resize((240,240))
images.append(img2)img3 cv2.imread(face\\face4.png,cv2.IMREAD_GRAYSCALE);
img3.resize((240,240))
images.append(img3)img4 cv2.imread(face\\face5.png,cv2.IMREAD_GRAYSCALE);
img4.resize((240,240))
images.append(img4)labels[0,0,1,1]
#print(labels)
recognizer cv2.face.EigenFaceRecognizer_create()
recognizer.train(images, np.array(labels)) # 识别器训练
predict_imagecv2.imread(face\\face6.png,cv2.IMREAD_GRAYSCALE)
predict_image.resize((240,240))
label,confidence recognizer.predict(predict_image)
print(label,label)
print(confidence,confidence)运行结果
label 1
confidence 11499.110301703204从结果来看比 LBPH 人脸识别 对比稍微准点。