EigenFace通常也被称为特征脸,他使用主成分分析(PCA)的方法实现将高纬度的人脸处理数据处理为低维数据(降维),再进行数据分析和处理,获取识别结果。

EigenFaces降维原理

在现实中,有很多信息是冗余的,从机械设计的角度来说,就是过定义的。例如下面的圆中,有直径半径等各个参数。

一组圆的参数

在这组圆中,尽管参数很多,实际上各个参数之间有很多联系,例如直径是半径的2倍周长=2*π*半径等。因此,半径这个参数就是整个表的主成分

在实际中,数据会比较复杂,因此需要通过PCA方法进行主成分分析。

EigenFaces就是通过使用主成分分析对数据进行降维处理,再进行人脸识别

函数介绍

1、函数cv2.face.EigenFaceRecognizer_create()生成特征脸识别器示例模型

retval = cv2.face.EigenFaceRecognizer_create( [, num_components[, threshold]] )
  • num_components:在 PCA 中要保留的分量个数。(一般来说, 80 个分量就足够了。)
  • threshold:进行人脸识别时所采用的阈值。

2、函数cv2.face_FaceRecognizer.train()完成训练

函数 cv2.face_FaceRecognizer.train()对每个图像进行训练通过 EigenFaces 计算,得到一个向量。每个人脸都是整个向量集中的一个点。

None = cv2.face_FaceRecognizer.train( src, labels )

其中:

  • src:训练图 像,用来学习的人脸图像。
  • labels:人脸图像所对应的标签。
    该函数没有返回值。

3、 函数cv2.face_FaceRecognizer.predict()完成人脸识别

将最适合的标签贴到被识别的图像中。函数语法:

label, confidence = cv2.face_FaceRecognizer.predict( src )
  • src:需要识别的人脸图像。
  • label:返回的识别结果标签。
  • confidence:返回的置信度评分。0 到 20 000 之间, 只要低于 5000, 都被认为是相当可靠的识别结果

案例演示

import cv2
import numpy as np
images=[]
images.append(cv2.imread("e01.jpg",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("e02.jpg",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("e11.png",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("e12.png",cv2.IMREAD_GRAYSCALE))
labels=[0,0,1,1]
#print(labels)
recognizer = cv2.face.EigenFaceRecognizer_create()
recognizer.train(images, np.array(labels))  
predict_image=cv2.imread("eTest.jpg",cv2.IMREAD_GRAYSCALE)
label,confidence= recognizer.predict(predict_image) 
print("label=",label)
print("confidence=",confidence)

运行的结果:

label= 0
confidence= 0.0

由于测试的图像就是训练集里的,自然是绝对可靠,为0标签。

案例用到的图像

需要注意,这个函数训练时要求必须所有的图像是一样尺寸的大小,不然会报错:

In the Eigenfaces method all input samples (training images) must be of equal size! Expected 0 pixels, but was 10304 pixels.

下面的图片都是经过我处理的,是200X200的图片,可以直接另存为使用:

e01

e02

e11

e12

eTest


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/CVEigenFaces.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 05 月 24 日
如果觉得我的文章对你有用,请随意赞赏