深度学习OpenCV LBPH算法人脸识别:原理及案例解析
创作时间:
作者:
@小白创作中心
深度学习OpenCV LBPH算法人脸识别:原理及案例解析
引用
CSDN
1.
https://blog.csdn.net/qq_64603703/article/details/142982769
在计算机视觉领域,人脸识别是一项重要的技术应用。本文将详细介绍OpenCV中基于局部二值模式直方图(LBPH)的人脸识别算法原理,并通过一个具体的Python案例来展示其实际应用。
一、LBPH算法
1、概念
在OpenCV中,LBPH(Local Binary Patterns Histogram,局部二值模式直方图)算法主要用于人脸识别任务。LBPH是一种用于图像特征提取的算法。它首先将图像划分为小的局部区域,然后在每个区域中提取局部二值模式(Local Binary Patterns)。
局部二值模式是一种在像素邻域中将像素与其邻居像素进行比较的方法,根据比较结果将像素转换为二进制编码。在LBPH算法中,将每个局部区域中的二值模式编码组合起来形成一个直方图,用于表示该区域的特征。最后,将所有局部区域的直方图组合在一起,形成整个图像的特征向量。
2、实现步骤
- 以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像
- 再将LBP图像分为多个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图。 通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。
3、方法
1)步骤1
- 缩放
为了得到不同尺度下的纹理结构,可以使用圆形邻域,将计算扩大到任意大小的邻域内。圆形邻域可以用(P,R)表示,其中,P表示圆形邻域内参与运算的像素点个数,R 表示圆形邻域的半径。 - 旋转和平移
1、将中心点像素作为圆心,将周围的像素点按照顺时针方向依次移动一个位置。
2、再计算所有图像的LBP值,取其中最小值作为最终的值
2)步骤2
将LBP图像分为多个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图。
LBP特征与Haar特征很相似,都是图像的灰度变化特征。
二、案例实现
1、完整代码
import cv2
import numpy as np
# 提前训练的人脸照片
images = []
images.append(cv2.imread('pyy1.png', cv2.IMREAD_GRAYSCALE)) # 将图片导入列表
images.append(cv2.imread('pyy2.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('zly1.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('zly2.png', cv2.IMREAD_GRAYSCALE))
labels = [0,0,1,1] # 设置四张图片的标签
dic = {0:'ppy',1:'zly',-1:'无法识别'} # 设置一个字典用于打印结果名称
predict_image = cv2.imread('pyy3.png', cv2.IMREAD_GRAYSCALE) # 读取待识别人脸,灰度图
"""创建一个LBPH的人脸特征识别器"""
# cv2.face.LBPHFaceRecognizer_create(radius=None, neighbors=None, grid_x=None, grid_y=None, threshold=None)
# radius:可选参数,圆形局部二进制模式的半径,增加邻居数可以提高识别精度,但同样也会增加计算量,建议使用默认值
# neighbors:可选参数,圆形局部二进制模式的邻居数,建议使用默认值
# grid_x:可选參数 水平方向上的的单元格数,默认值为8,即将LBP特征图在水平方向上划分为8个单元,每个网格区域将独立计算其局部二值模式直方图
# grid_y:可逃参数 垂直方向上的的单元格数,默认值为8,建议使用默认值,若grid_x和grid_y都为默认值,则表示特征图划分为8*8人小,统计8*8大小的直方图。
# threshold:阈值,可选参数,用于设置识别器在判断两个人脸是否属于同一人时的置信度阈值,通常是在调用识别器的predict()方法时作为可选参数传入
recognizer = cv2.face.LBPHFaceRecognizer_create(threshold=80)
"""训练"""
# 函数train用给定的数和相关标签训练生成的实例模型。
# 各参数的含义如下:
# src:训练的图像,用来学习的人脸图像
# labels:标签,人脸图像对应的标签。
recognizer.train(images,np.array(labels))
"""预测"""
# 函数predict()对一个待识别人脸图像进行判断,寻找与当前图像距离最近的人脸图像。
# 与哪輻人貽图像距离最近,就将当前待测图像标注为该人脸图像对应的标答。
# 若待识别人脸图像与所有人脸图像的距离都大于特定的距离值(阈值),则认为没有找到对应的结果,
# 参数与返问值:
# src:需要识别的人脸图像
# label:返回的识别结果标签,返回-1示无法识别当前人。
# confidence:返回的置信度评分,用来衡量识别结果与原有模型之间的距离
# 评分越小表示匹配越高,但是若高于80,则认为识别结果与原有模型差距大
label,confidence = recognizer.predict(predict_image)
print('这人是:',dic[label])
print('置信度:',confidence)
1)图像内容:
2)运行结果:
本文原文来自CSDN
热门推荐
刘三姐:一位歌仙的大女主精神
《儒林外史》中的沈琼枝:一个具有个性解放意识的女性形象
美国本科有哪些学位类型及其特点
巧克力的保质期一般是多久
巧克力的变质原因与保存技巧
吃过期巧克力的危害
羽绒被 vs 羊毛被:谁才是冬季保暖的最佳选择?
游戏账号安全全攻略:八大措施防止虚拟财产损失
武汉两日游:从黄鹤楼到长江大桥,领略江城古今魅力
登临黄鹤楼,解锁武汉历史密码
吉林舒兰在抗日战争中打的最出名的一场战役是什么?
2024年属鸡人运势全解析:事业财运双丰收?
揭秘:农历三月、五月和九月出生的属鸡人,为何最有福气?
张学良晚年的生活来源揭秘:一位痴情妻子留下的遗产
父母情绪价值高,孩子更易成功
职场竞争中,情绪价值是男人赢得人心的关键
驾驶证暂扣仍开车?最高罚款2000元并处15日拘留
冰箱冷冻鲜姜,保鲜半年不是梦!
IMF报告:AI将颠覆一半工作岗位,如何应对这场就业变革?
AI赋能远程办公:从自动化管理到智能协作
算法工程师:AI时代的职场新宠儿
索尼电视卡机自救指南:从软件到硬件的全面解决方案
中山大学研究发现:苦参酮或成自身免疫性葡萄膜炎治疗新希望
冰公主:《精灵梦叶罗丽》中的冰雪之美
《精灵梦叶罗丽》角色时尚揭秘:冰公主的水晶鞋
中国地震带分布:八大地震带与11个不在地震带上的省份
新疆阿克苏地区库车市发生5.5级地震,影响与应对
初三孩子厌学如何开导
游戏有时并非洪水猛兽,也会成为解决孩子厌学情绪的利器
如何从心理学的角度,看待孩子的「厌学情绪」?作为家长,如何正确引导?