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. 对图像质量要求较高:对于模糊或分辨率较低的图像,检测质量会下降。

相关推荐
张彦峰ZYF7 小时前
越过边界之前:Reward Seeker 实验如何改写智能体安全的时间逻辑
人工智能·ai agent·anthropic·智能体安全·reward seeker·“控制评价过程”泛化跨领域策略·envbom
拓恒技术7 小时前
无人机巡检AI算法的工程化落地:从需求到交付的5个核心环节
人工智能·算法·无人机
学长毕设9 小时前
基于SpringBoot的青少年编程学习平台系统-附源码
spring boot·学习·青少年编程
罗西的思考10 小时前
AI 时代的 “房谋杜断”:如何培养能力、品味与判断力
人工智能·算法·机器学习
字节跳动视频云技术团队10 小时前
720P 直升 8K,解密 2026 抖音美好奇妙夜巨幕超分黑科技
人工智能·音视频开发
打工仔折腾 AI10 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
逐米时代11 小时前
从试点验证到协同深化:制造业AI转型三年路线图设计方法
人工智能
GlobalInfo11 小时前
全球及中国风电叶片检测机器人行业研究报告(2026版):市场现状、行业前景与占有率分析
运维·网络·人工智能·机器人
stormzhangV11 小时前
AI 越强,失业越严重
人工智能·aigc
夏文强12 小时前
Rerank 与混合检索:怎么让 RAG 从「能用」变成「好用」
人工智能·大模型·向量数据库·rag·检索增强生成