OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)

简介: 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()  # 释放所有窗体

总结

人脸检测和人脸识别是相辅相成的,这是因为在进行人脸识别前,要先判断当前图像内是否出现了人脸,这个判断过程需要由人脸检测完成。只有在当前图像内检测到人脸,才能判断出这张人脸属于哪个人,这个判断是由人脸识别器完成的。因此,人脸识别指的是程序先在图像内检测人脸,再识别这张人脸属于哪个人的过程

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
19天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
19天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
43 10
|
1月前
|
算法 Unix 数据库
Python编程入门:从基础到实战
本篇文章将带你进入Python编程的奇妙世界。我们将从最基础的概念开始,逐步深入,最后通过一个实际的项目案例,让你真正体验到Python编程的乐趣和实用性。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你提供有价值的信息和知识。让我们一起探索Python的世界吧!
|
1月前
|
并行计算 调度 开发者
探索Python中的异步编程:从基础到实战
在Python的世界里,异步编程是一种让程序运行更加高效、响应更快的技术。本文不仅会介绍异步编程的基本概念和原理,还将通过具体代码示例展示如何在Python中实现异步操作。无论你是初学者还是有经验的开发者,都能从中获益,了解如何运用这一技术优化你的项目。
|
1月前
|
数据处理 Python
探索Python中的异步编程:从基础到实战
在Python的世界中,“速度”不仅是赛车手的追求。本文将带你领略Python异步编程的魅力,从原理到实践,我们不单单是看代码,更通过实例感受它的威力。你将学会如何用更少的服务器资源做更多的事,就像是在厨房里同时烹饪多道菜而不让任何一道烧焦。准备好了吗?让我们开始这场技术烹饪之旅。
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
1月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
48 0
|
JSON Java C#
阿里云人脸识别Python3调用示例参考
本文主要介绍Python3调用阿里云人脸识别服务,参数等的获取参考阿里云人脸识别使用流程简介。
|
JSON 数据格式 计算机视觉
阿里云老版人脸识别Python3调用示例参考
前面分别给出了关于阿里云人脸识别Java调用示例参考、阿里云人脸识别C#调用示例参考 。本文主要介绍Python3调用阿里云人脸识别服务,参数等的获取参考阿里云人脸识别使用流程简介。
396 0
|
20天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!