需要源码和图片请点赞关注收藏后评论区留言私信~~~
Fisherfaces是由Ronald Fisher最早提出的,这也是它名字的又来,它基于LDA线性判别分析技术,该方法将人脸数据转换到另外一个空间维度做投影计算,最后根据不同人脸数据的投影距离判断其相似度。开发者同样需要通过以下三个方法完成人脸识别操作
1:通过cv2.face.FisherFaceRecognizer_create(num_components,threshold)
参数说明如下
num_components:可选参数 通过Fisherface方法判断分析时保留的分量个数,建议使用默认值
threshold 可选参数 人脸识别时使用的阈值 建议使用默认值
2:创建识别器对象后 需要通过对象的train方法训练识别器,建议每个人都给出两张以上的人脸图像作为训练样本
recognizer.train(src,train)
参数说明如下
src 用来训练的人脸图像样本列表 格式为list 样本图像宽高必须一致
labels 样本对应的标签,格式为数组,元素类型为整数
3:训练识别器后可以通过识别器的predict方法识别人脸。该方法对比样本的特征,给出最相近的结果和评分
label,confidence=recognizer.predict(src)
label 与样本匹配程度最高的标签纸
confidence 匹配程度最高的信用度评分,评分小于5000程度较高,0分表示两幅图像完全一样
下面以两个人的照片作为训练样本
待识别照片如下
程序输出如下
confidence=2327.1708678
Mike
程序对比样本特征分析得出,被识别的人物特征最接近的是KaiKai
部分代码如下
import cv2 import numpy as np photos = list() # 样本图像列表 lables = list() # 标签列表 photos.append(cv2.imread("face\\Mike1.png", 0)) # 记录第1张人脸图像 lables.append(0) # 第1张图像对应的标签 photos.append(cv2.imread("face\\Mike2.png", 0)) # 记录第2张人脸图像 lables.(0) # 第2张图像对应的标签 photos.append(cv2.imread("face\\Mike3.png", 0)) # 记录第3张人脸图像 lables.append(0) # 第3张图像对应的标 photos.append(cv2.imread("face\\kaikai1.png", 0)) # 记录第4张人脸图像 lables.append(1) # 第4张图像对应的标签 photos.appen(.imread("face\\kaikai2.png", 0)) # 记录第5张人脸图像 lables.append(1) # 第5张图像对应的标签 photos.apv2.imread("face\\kaikai3.png", 0)) # 记录第6张人脸图像 lables.append(1) # 第6张图像对应的标签 names = {"0": "Mike", "1": "kaikai"} # 标签对应的名称字典 recognizer = cv2.face.FisherFaceRecognizer_create() # 创建线性判别分析识别器 recognizer.train(photos, np.array(lables)) # 识别器开始训练 i = cv2.imrad("face\\Mike4.png", 0) # 待识别的人脸图像 label, confdce = recognizer.predict(i) # 识别器开始分析人脸图像 print("cofidence = " + str(confidence)) # 打印评分 print(name[strbe) # 数组字典里标签对应的名字 cv2.waitKey() # 按下何键盘按键后 cv2.destroyAllWindows() # 释放所有窗体
创作不易 觉得有帮助请点赞关注收藏~~~