引言
人脸识别是计算机视觉领域的一个重要应用,今天我将通过一个实际案例来展示如何使用OpenCV中的EigenFaces算法实现简单的人脸识别系统。
一、概述
本文演示了如何使用OpenCV的**EigenFaceRecognizer对预先准备好的面部图像进行训练,然后对新的测试图像进行识别。我们使用了名为为"linyuner"和"chendulin"的多张照片作为训练集,然后测试系统能否正确识别新输入的照片。
二、代码解析
1. 准备工作
首先导入必要的库:
import cv2
import numpy as np
2. 加载训练图像
我们创建了一个空列表images
来存储训练图像,并确保所有图像大小一致:
images = [] # 读取训练图像,注意:图片大小要一致
a = cv2.imread('linyuner 1.jpg', 0) # 以灰度模式读取图像
a = cv2.resize(a,(120,180)) # 统一调整大小为120×180
b = cv2.imread('linyuner 2.jpg', 0)
b = cv2.resize(b,(120,180))
c = cv2.imread('chendulin 1.jpg', 0)
c = cv2.resize(c,(120,180))
d = cv2.imread('chendulin 2.jpg', 0)
d = cv2.resize(d,(120,180))
images.append(a)
images.append(b)
images.append(c)
images.append(d)
3. 设置标签
为每张训练图像分配对应的标签:
labels = [0,0,1,1] # 0代表linyuner,1代表chendulin
4. 准备测试图像
加载并预处理待识别的图像:
pre_image = cv2.imread('chendulin 3.jpg', 0)
pre_image = cv2.resize(pre_image,(120,180))
5. 创建和训练识别器
使用OpenCV的EigenFaceRecognizer:
recognizer = cv2.face.EigenFaceRecognizer_create(threshold=5000)
recognizer.train(images,np.array(labels))
6. 进行预测
label,confidence = recognizer.predict(pre_image)
7. 显示结果
将识别结果标注在原始图像上并显示:
dic={0:'linyuner',1:'chendulin',-1:'无法识别'}
print("这人是:",dic[label])
print('置信度为:',confidence)
aa = cv2.putText(cv2.imread('chendulin 3.jpg').copy(), dic[label], (10, 30),
cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.9, (0,0,255), 2)
aa = cv2.resize(aa,dsize=None,fy=0.6,fx=0.6)
cv2.imshow('xx',aa)
cv2.waitKey(0)
我们选择一张陈都灵的照片来进行验证
三、代码要点
EigenFaces算法:这是基于PCA(主成分分析)的人脸识别方法,通过提取人脸图像的主要特征分量来进行识别。
图像预处理:所有图像被转换为灰度并调整为相同尺寸,这是大多数机器学习算法对输入数据的基本要求。
阈值设置:
threshold=5000
参数设置了识别阈值,当置信度超过此值时,识别结果为"无法识别"。置信度:置信度数值越小表示匹配度越高。
总结
通过这个简单的例子,我们展示了如何使用OpenCV快速实现一个基础的人脸识别系统。虽然EigenFaces算法相对简单,但它很好地演示了人脸识别的基本原理,对于理解更复杂的系统有很大帮助。
希望这篇博客对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言讨论。