当前位置: 首页 > news >正文

【深度学习】OpenCV 人脸识别实战:LBPH 算法实现简单人脸识别

文章目录

  • 完整代码一览
  • 导入库与安装说明
  • 准备训练数据(图像和标签)
  • 创建 LBPH 识别器
  • 训练模型
  • 预测(识别)新图像
  • 输出结果

完整代码一览

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('qzl1.png',cv2.IMREAD_GRAYSCALE))images.append(cv2.imread('qzl2.png',cv2.IMREAD_GRAYSCALE))labels=[0,0,1,1]dic={0:'pyy',1:'qzl',-1:'无法识别'}predict_image=cv2.imread('pyy.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)

导入库与安装说明

import cv2 import numpy as np

cv2.face.LBPHFaceRecognizer_create 属于 OpenCV 的 contrib 扩展模块。如果你安装的是标准版 opencv-python,会报错 module ‘cv2’ has no attribute ‘face’。请使用以下命令安装:

bash

pip install opencv-contrib-python

如果已经安装了标准版,需要先卸载再安装 contrib 版。

准备训练数据(图像和标签)

python images=[]images.append(cv2.imread('pyy1.png',cv2.IMREAD_GRAYSCALE))images.append(cv2.imread('pyy2.png',cv2.IMREAD_GRAYSCALE))images.append(cv2.imread('qzl1.png',cv2.IMREAD_GRAYSCALE))images.append(cv2.imread('qzl2.png',cv2.IMREAD_GRAYSCALE))labels=[0,0,1,1]dic={0:'pyy',1:'qzl',-1:'无法识别'}




我们准备了 4 张人脸图像,分别是 pyy1.png、pyy2.png,qzl1.png、qzl2.png。

labels 是对应的数字标签:0 代表 pyy,1 代表 qzl。

dic 是一个字典,用于将数字标签映射回人名,方便打印。-1 是识别器返回的“无法识别”标签。

注意:这些图片应该是已经裁剪好的人脸图像(只含脸部区域),尺寸可以不一致(LBPH 会内部处理)。实际项目中,你需要先用人脸检测器裁剪出人脸。

创建 LBPH 识别器

recognizer=cv2.face.LBPHFaceRecognizer_create(threshold=80)

cv2.face.LBPHFaceRecognizer_create() 创建一个 LBPH 识别器对象。

threshold=80:这是识别阈值。当识别器预测时,如果计算出的置信度(距离)大于这个值,则认为“不认识”,返回标签 -1。阈值越小,识别越严格,但容易误拒;阈值越大,容忍度越高,但可能把陌生人认成熟人。80 是常用值,你可以根据实际情况调整。

训练模型

recognizer.train(images,np.array(labels))

train() 方法接受两个参数:

images:训练图像列表(灰度图)。

labels:对应的标签数组(NumPy 格式)。

训练过程会计算每张图像的 LBPH 特征直方图,并存储起来,供后续识别时比对。

预测(识别)新图像

predict_image=cv2.imread('pyy.png',cv2.IMREAD_GRAYSCALE)label,confidence=recognizer.predict(predict_image)

predict() 接受一张待识别的灰度图像,返回两个值:

label:识别出的标签(如果置信度超过阈值,则返回 -1)。

confidence:置信度评分,数值越小表示匹配度越高(距离越近)。一般小于 50 表示比较可信,50~80 可能勉强,超过阈值则视为不认识。

输出结果

print('这人是:',dic[label])print('置信度:',confidence)

通过字典映射标签到人名,如果标签是 -1,则显示“无法识别”。

运行结果:

这人是: qzl 置信度:77.59353695603815
http://www.jsqmd.com/news/1112932/

相关文章:

  • C++入门基石:语言定位、编译流程与基础语法深度解析
  • 机器学习问题定义:从模糊需求到可执行任务的实战方法论
  • 机器学习三要素与核心算法实战指南
  • 20种AI Agent架构实战解析:从基础到高级方案
  • 室内渲染进阶指南:从平淡无奇到照片级效果的6个核心法则
  • 【2026运营版】B2B2C多商户外贸电商系统|跨境商城|云仓库代发+分销+佣金+POS下单
  • 实习生转正复盘:技术成长要有证据,不要只靠感觉努力
  • 字节跳动 data 系统后台开发面经:一面项目和智能指针打底,二面直接补 Linux、HTTP 和逻辑题
  • C++智能指针全面精讲:auto_ptr、unique_ptr、shared_ptr、weak_ptr原理与实战
  • Winform加密算法
  • 2026年7月亲测:深圳高空吊装企业性价比分享
  • Uniapp上架苹果4.3a被拒?我摸出了躺过的万能公式!
  • 惠州儿童牙科医院选择指南
  • 鸿蒙原生 ArkTS 自定义布局深度解析:onMeasure / onLayout 实战
  • Koji Build 命令参数深度解析:从入门到精通
  • 2026年,苦荞快餐粉引领健康新潮流
  • 如何优雅地下载文档:kill-doc浏览器脚本使用指南
  • Matt Pocock Skills 安装与上手指南:让 AI 编程从“能跑“到“靠谱“
  • 116、asyncio 异步编程(二):Task、Future、gather、create_task 并发模式
  • CryptoHack「Hex」解题思路:从十六进制到Flag
  • 勇士传说学习心得
  • 大模型推理加速Medusa详解:单模型多头并行解码,解决投机解码双模型部署痛点20.1
  • Hive 常用内置函数
  • 终极隐藏模拟位置:3个简单步骤彻底解决Android位置检测问题
  • 20260601 Ceph 对象存储(RADOS Gateway)
  • Qt实现简易计数器(点击累加/清零功能)【完整源码】
  • Vben精讲:03-基于VSCode的本地开发环境搭建
  • 5分钟搞定微信聊天记录备份:Mac用户必备的数据安全工具
  • 儿童护眼大路灯怎么选择?盘点10款高性价比护眼大路灯,建议收藏
  • Python接口自动化测试入门:Requests+Pytest+Allure实战项目详解