OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)
Posted showswoller
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)相关的知识,希望对你有一定的参考价值。
需要源码和图片请点赞关注收藏后评论区留言私信~~~
Local Binary Pattern Histofram简称LBPH,即局部二进制模式直方图,这是一种基于局部二进制模式算法,这种算法善于捕获局部纹理特征
开发者需要通过以下三种方法来完成人脸识别操作
1:通过cv2.face.LBPHFaceRecognizer_create()方法创建LBPH人脸识别器对象 语法如下
recognizer=cv2.face.LBPHFaceRecognizer_create(radius,neighbors,grid_x,grid_y,threshold)
radius:可选参数 圆形局部二进制模式的半径,建议使用默认值
neighbors:可选参数,圆形局部二进制模式的采样点数目,建议使用默认值
grid_x:可选参数 水平方向上的的单元格数,建议使用默认值
grid_y:可选参数 垂直方向上的的单元格数 建议使用默认值
threshold:可选参数 人脸识别时使用的阈值,建议使用默认值
2:创建识别器对象后,需要通过对象的train方法训练识别器,建议每个人都给出两幅以上的人脸图像作为训练样本,train方法的语法如下
recognizer.train(src,labels)
参数说明
recognizer 已有的LBPH人脸识别器对象
src 用来训练的人脸图像样本列表,格式为list,样本图像必须宽高一致
labels 样本对应的标签,格式为数组,元素类型为整数,数组长度必须与样本列表长度相同,样本与标签按照插入顺序一一对应
3:训练识别器后就可以通过识别器的predict方法识别人脸,该方法对比样本的特征,给出最接近的结果和评分,语法如下
label,confidence=recognizer.predict(src)
参数说明
src 需要识别的人脸图像 该图像宽高必须与样本一致
label 与样本匹配程度最高的标签值
confidenct 匹配程度最高的信用度评分,评分小于50匹配程度较高,0分表示两幅图像完全一样
下面使用LBPH识别人脸实战
下面以两个人的照片作为训练样本
待识别照片如下
程序输出如下
confidence=45.0823265
RuiRui
程序对比样本特征分析得出,被识别的人物最接近的是RuiRui
部分代码如下
import cv2
import numpy as np
photos = list() # 样本图像列表
lables = list() # 标签列表
photos.append(cv2.imread("face\\\\lxe1.png", 0)) # 记录第1张人脸图像
lables.append(0) # 第1张图像对应的标签
photos.append(cv2.imread("face\\\\lxe2.png", 0)) # 记录第2张人脸图像
lables.append(0) # 第2张图像对应的标签
photos.append(cv2.imread("face\\\\lxe3.png", 0)) # 记录第3张人脸图像
lables.append(0) # 第3张图像对应的标签
photos.append(cv2.imread("face\\\\ruirui1.png", 0)) # 记录第4张人脸图像
lables.append(1) # 第4张图像对应的标签
photos.append(cv2.imread("face\\\\ruirui2.png", 0)) # 记录第5张人脸图像
lables.append(1) #图像对应的标签
photos.append(cv2.imread("face\\\\ruirui3.png", 0)) # 记录第6张人脸图像
lables.append(1) # 第6张图像对应的标签
names = "0": "LXE", "1": "RuiRui" # 标签对应的名称字典
recognier = cv2.face.LBPHFaceRecognizer_create() # 创建LBPH识别器(photos, np.array(lables)) # 识别器开始训练
i = cv2.imread("face\\\\ruirui4.png", 0) # 待识别的人脸图像
label, confience = recognizer.predict(i) # 识别器开始分析人脸图像
print("confidee= " + str(confidence)) # 打印评分
print(names[str(lael)]) # 数组字典里标签对应的名字
cv2.waitKey() #下任何键盘按键后
cv2.destroyAllWindows() # 释放所有窗体
总结
人脸检测和人脸识别是相辅相成的,这是因为在进行人脸识别前,要先判断当前图像内是否出现了人脸,这个判断过程需要由人脸检测完成。只有在当前图像内检测到人脸,才能判断出这张人脸属于哪个人,这个判断是由人脸识别器完成的。因此,人脸识别指的是程序先在图像内检测人脸,再识别这张人脸属于哪个人的过程
创作不易 觉得有帮助请点赞关注收藏~~~
以上是关于OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)的主要内容,如果未能解决你的问题,请参考以下文章