目录
本代码将使用EigenFace算法实现人脸识别功能,并将其与已知的人脸进行匹配。
1.实现效果
2.读取图像
import cv2
import numpy as np
images=[]
images.append(cv2.imread("a1.png", cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("a2.png", cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("b1.png", cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("b2.png", cv2.IMREAD_GRAYSCALE))
# 转为灰度图
labels = [0,0,1,1] # 给训练图像贴标签
predict_image = cv2.imread("a3.png", cv2.IMREAD_GRAYSCALE) # 待识别人脸
3.创建人脸特征识别器
recognizer = cv2.face.EigenFaceRecognizer_create()
参数介绍:
cv2.face.EigenFaceRecognizer_create(num_components=None, threshold=None)
num_components:在PCA中要保留的分量个数。该参数值通常要根据输入数据来具体确定,并没有一定取值。
threshold:进行人脸识别所采用的阈值。
4.训练模型
recognizer.train(images, np.array(labels))
参数介绍:
None = cv2.faceFaceRecognizer.train(src, labels)
src:训练图像,用来学习的人脸图像。
labels:人脸图像对应的标签。
5.预测
label, confidence= recognizer.predict(predict_image)
# confidence: 大小介于0到20000,只要低于5000都被认为是可靠的结果。
6.打印出识别的标签和置信度
print("识别标签label=", label)
print("置信度confidence=", confidence)
7.可视化输出
name=["andy", "joe"] # 创建一个名单列表,将标签索引映射到具体的人名
cv2.putText(predict_image, name[label], (0,30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255,255,255), 2)
# 使用cv2.putText函数将识别到的人名name[label]绘制在图像的(0, 30)位置,文本使用白色,字体为cv2.FONT_HERSHEY_SIMPLEX,字号为0.8,线条粗细为2
cv2.imshow("result", predict_image)
cv2.waitKey()
cv2.destroyAllWindows()