opencv学习:人脸识别器特征提取BPHFaceRecognizer_create算法的使用

BPHFaceRecognizer_create算法

在OpenCV中,cv2.face.LBPHFaceRecognizer_create()函数用于创建一个局部二值模式直方图(Local Binary Patterns Histograms,简称LBPH)人脸识别器。LBPH是一种用于人脸识别的特征提取方法,它结合了局部二值模式(LBP)和直方图的概念,以生成一个对光照变化和遮挡具有一定鲁棒性的特征表示。

参数threshold=80是这个函数的一个可选参数,它指定了在人脸识别过程中使用的决策阈值。这个阈值用于确定一个预测是否足够可靠,即当预测的置信度高于这个阈值时,预测被认为是可靠的。置信度是一个介于0到100之间的值,表示识别器对其预测的信心水平。如果置信度低于阈值,预测可能被认为是不确定的。

下面是对cv2.face.LBPHFaceRecognizer_create(threshold=80)的详细解释:

  • cv2.face:这是OpenCV库中的一个模块,专门用于人脸识别任务。

  • LBPHFaceRecognizer_create:这是cv2.face模块中的一个函数,用于创建一个LBPH人脸识别器对象。

  • threshold=80:这是一个命名参数,用于设置置信度阈值。在这个例子中,阈值被设置为80,这意味着只有当预测的置信度高于80%时,预测才会被认为是可靠的。

创建LBPH人脸识别器后,你可以使用train方法来训练它,使用训练好的图像和对应的标签。训练完成后,你可以使用predict方法来预测新图像中的人脸属于哪个类别。

代码步骤

复制代码
使用灰度模式读取图像并添加到列表中,并创建一个标签列表,与图像列表对应(最好选取头像照片)
python 复制代码
import cv2  # 导入OpenCV库

# 初始化一个空列表来存储图像
images = []

# 使用灰度模式读取图像并添加到列表中
# cv2.IMREAD_GRAYSCALE 标志确保图像以灰度模式读取
images.append(cv2.imread('hg1.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('hg2.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('hjh1.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('hjh2.png', cv2.IMREAD_GRAYSCALE))

# 创建一个标签列表,与图像列表对应
labels = [0, 0, 1, 1]

# 创建一个字典来映射标签到对应的类别名称
dic = {0: "hg", 1: "hjh", -1: 'error'}
复制代码
读取要预测的图像,同样使用灰度模式
python 复制代码
# 读取要预测的图像,同样使用灰度模式
predict_image = cv2.imread('hg.png', cv2.IMREAD_GRAYSCALE)
复制代码
创建一个LBPH人脸识别器对象,使用训练好的识别器预测要预测的图像的标签和置信度
python 复制代码
# 创建一个LBPH人脸识别器对象
recognizer = cv2.face.LBPHFaceRecognizer_create(threshold=80)

# 使用图像列表和标签列表训练识别器
recognizer.train(images, np.array(labels))

# 使用训练好的识别器预测要预测的图像的标签和置信度
label, confidence = recognizer.predict(predict_image)

# 打印预测结果和置信度
# 使用字典来获取对应的类别名称
print('这人是', dic[label])
print('置信度', confidence)

运行结果

完整代码

python 复制代码
import cv2  # 导入OpenCV库

# 初始化一个空列表来存储图像
images = []

# 使用灰度模式读取图像并添加到列表中
# cv2.IMREAD_GRAYSCALE 标志确保图像以灰度模式读取
images.append(cv2.imread('hg1.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('hg2.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('hjh1.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('hjh2.png', cv2.IMREAD_GRAYSCALE))

# 创建一个标签列表,与图像列表对应
labels = [0, 0, 1, 1]

# 创建一个字典来映射标签到对应的类别名称
dic = {0: "hg", 1: "hjh", -1: 'error'}

# 读取要预测的图像,同样使用灰度模式
predict_image = cv2.imread('hg.png', cv2.IMREAD_GRAYSCALE)

# 创建一个LBPH人脸识别器对象
recognizer = cv2.face.LBPHFaceRecognizer_create(threshold=80)

# 使用图像列表和标签列表训练识别器
recognizer.train(images, np.array(labels))

# 使用训练好的识别器预测要预测的图像的标签和置信度
label, confidence = recognizer.predict(predict_image)

# 打印预测结果和置信度
# 使用字典来获取对应的类别名称
print('这人是', dic[label])
print('置信度', confidence)

局限性:

  1. 对光照变化敏感:Haar特征对人脸的光照条件非常敏感,光照的不均匀或变化可能导致检测失败。

  2. 遮挡问题:当人脸被遮挡,例如戴墨镜或口罩时,检测的准确性会受到影响。

  3. 姿态变化:对于侧脸或者姿态变化较大的人脸,检测效果可能不佳。

  4. 计算资源消耗:虽然级联分类器设计得相对高效,但在处理高分辨率图像或视频时,尤其是在实时应用中,可能需要较多的计算资源。

  5. 训练过程复杂:创建Haar级联分类器需要大量的正负样本进行训练,这个过程可能需要大量的计算资源和时间。

  6. 特征描述能力有限:Haar特征对复杂形状和纹理的描述能力有限,容易受到遮挡和噪声的影响。

  7. 参数调整困难 :detectMultiScale方法的性能受到多个参数的影响,如scaleFactor和minNeighbors,这些参数需要根据具体应用场景进行调整,以达到最佳效果。

  8. 误检和漏检:在复杂场景中,如多人脸、相似背景等情况下,可能会出现误检或漏检的情况。

  9. 对图像质量要求较高:对于模糊或分辨率较低的图像,检测质量会下降。

相关推荐
海绵宝宝转agent4 分钟前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
每天都要写算法(努力版)19 分钟前
【行业前沿报告】DAgger:让智能体在自己走到的状态上学习
人工智能·学习·机器学习
liron7121 分钟前
智能实体演化系统的统一性概念
人工智能·深度学习·神经网络
呆萌很34 分钟前
常用骨干网络预训练输入尺寸
人工智能
Yolanda_202234 分钟前
19.神经网络-最大池化的使用
人工智能·深度学习·神经网络
W***25921 小时前
2026 企业 AI 办公平台选型指南:可完成全链路任务的 AI 工具评估
人工智能
RockHopper20251 小时前
面向工业现实的原生数字化工程框架概要说明
人工智能·智能体·世界模型·工业数字化
红海云1 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba2 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
FL16238631292 小时前
智慧医疗X光图像小儿手腕外伤检测数据集VOC+YOLO格式2538张9类别
人工智能·yolo·机器学习