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方法来预测新图像中的人脸属于哪个类别。
代码步骤
使用灰度模式读取图像并添加到列表中,并创建一个标签列表,与图像列表对应(最好选取头像照片)
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人脸识别器对象,使用训练好的识别器预测要预测的图像的标签和置信度
# 创建一个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 # 导入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)
局限性:
-
对光照变化敏感:Haar特征对人脸的光照条件非常敏感,光照的不均匀或变化可能导致检测失败。
-
遮挡问题:当人脸被遮挡,例如戴墨镜或口罩时,检测的准确性会受到影响。
-
姿态变化:对于侧脸或者姿态变化较大的人脸,检测效果可能不佳。
-
计算资源消耗:虽然级联分类器设计得相对高效,但在处理高分辨率图像或视频时,尤其是在实时应用中,可能需要较多的计算资源。
-
训练过程复杂:创建Haar级联分类器需要大量的正负样本进行训练,这个过程可能需要大量的计算资源和时间。
-
特征描述能力有限:Haar特征对复杂形状和纹理的描述能力有限,容易受到遮挡和噪声的影响。
-
参数调整困难:
detectMultiScale方法的性能受到多个参数的影响,如scaleFactor和minNeighbors,这些参数需要根据具体应用场景进行调整,以达到最佳效果。 -
误检和漏检:在复杂场景中,如多人脸、相似背景等情况下,可能会出现误检或漏检的情况。
-
对图像质量要求较高:对于模糊或分辨率较低的图像,检测质量会下降。
相关文章:
opencv学习:人脸识别器特征提取BPHFaceRecognizer_create算法的使用
BPHFaceRecognizer_create算法 在OpenCV中,cv2.face.LBPHFaceRecognizer_create()函数用于创建一个局部二值模式直方图(Local Binary Patterns Histograms,简称LBPH)人脸识别器。LBPH是一种用于人脸识别的特征提取方法࿰…...
HTML+CSS总结【量大管饱】
文章目录 前言HTML总结语义化标签常用标签H5新的语义元素H5的媒体标签\<embed> 元素(少用)\<object>元素(少用)\<audio>\<video> 元素包含关系iframe元素嵌入flash内容常用表单inputselect CSS总结权重样…...
Android开发之Broadcast Receive(广播机制)其实开发如此简单
什么是BroadcastReceiver BroadcastReceiver(广播接收器)用于响应来自其他应用程序或者系统的广播消息。这些消息有时被称为事件或者意图。本质上来讲BroadcastReceiver是一个全局的监听器,隶属于Android四大组件之一。 使用场景 1、 不同…...
Chromium 中chrome.cookies扩展接口c++实现分析
chrome.cookies 使用 chrome.cookies API 查询和修改 Cookie,并在 Cookie 发生更改时收到通知。 更多参考官网定义:chrome.cookies | API | Chrome for Developers (google.cn) 本文以加载一个清理cookies功能扩展为例 https://github.com/Google…...
excel筛选多个单元格内容
通常情况下,excel单元格筛选时,只筛选一个条件,如果要筛选多个条件,可以如下操作: 字符串中间用空格分隔就行。...
Instant 和 Duration 类(进行时间处理)
Instant Instant 类是 Java 8 中引入的,用于表示一个具体的时间点,它基于 UTC(协调世界时)时区。以下是 Instant 类的一些常用方法及其简要说明: now():获取当前的 Instant 对象,表示当前时间…...
Java每日面试题(Spring)(day19)
目录 Spring的优点什么是Spring AOP?AOP有哪些实现方式?JDK动态代理和CGLIB动态代理的区别?Spring AOP相关术语Spring通知有哪些类型?什么是Spring IOC?Spring中Bean的作用域有哪些?Spring中的Bean什么时候…...
【多线程】线程池(上)
文章目录 线程池基本概念线程池的优点线程池的特点 创建线程池自定义线程池线程池的工作原理线程池源码分析内置线程池newFixedThreadPoolSingleThreadExecutornewCachedThreadPoolScheduledThreadPool 线程池的核心线程是否会被回收?拒绝策略ThreadPoolExecutor.AbortPolicyT…...
ansible 语句+jinjia2+roles
文章目录 1、when语句1、判断表达式1、比较运算符2、逻辑运算符3、根据rc的返回值判断task任务是否执行成功5、通过条件判断路径是否存在6、in 2、when和其他关键字1、block关键字2、rescue关键字3、always关键字 3、ansible循环语句1、基于列表循环(whith_items)2、基于字典循…...
【Docker项目实战】使用Docker部署HumHub社交网络平台
【Docker项目实战】使用Docker部署HumHub社交网络平台 一、HumHub介绍1.1 HumHub简介1.2 HumHub特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载HumHub镜…...
“医者仁术”再进化,AI让乳腺癌筛查迎难而上
世卫组织最新数据显示,我国肿瘤疾病仍然呈上升趋势,肿瘤防控形势依然比较严峻。尤其是像乳腺癌等发病率较高的疾病,早诊断和早治疗意义重大,能够有效降低病死率。 另一方面,中国地域广阔且发展不平衡,各地…...
安卓流式布局实现记录
效果图: 1、导入第三方控件 implementation com.google.android:flexbox:1.1.0 2、布局中使用 <com.google.android.flexbox.FlexboxLayoutandroid:id"id/baggageFl"android:layout_width"match_parent"android:layout_height"wrap_co…...
-bash gcc command not found解决方案(CentOS操作系统)
以 CentOS7 为例,执行以下语句 : yum install gcc如果下载不成功,并且网络没有问题。 执行以下语句 : cp -r /etc/yum.repos.d /etc/yum.repos.d.bakrm -f /etc/yum.repos.d/*.repocurl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.…...
(二)Python输入输出函数
一、输入函数 input函数:用户输入的数据,以字符串形式返回;若需数值类型,则进行类型转换。 xinput("请入你喜欢的蔬菜:") print(x) 二、输出函数 print函数 输出单一数值 x666 print(x) 输出混合类型…...
从调用NCCL到深入NCCL源码
本小白目前研究GPU多卡互连的方案,主要参考NCCL和RCCL进行学习,如有错误,请及时指正! 内容还在整理中,近期不断更新!! 背景介绍 在大模型高性能计算时会需要用到多卡(GPU…...
深入理解Transformer的笔记记录(精简版本)NNLM → Word2Vec
文章的整体介绍顺序为: NNLM → Word2Vec → Seq2Seq → Seq2Seq with Attention → Transformer → Elmo → GPT → BERT 自然语言处理相关任务中要将自然语言交给机器学习中的算法来处理,通常需要将语言数学化,因为计算机机器只认数学符号…...
优选算法第一讲:双指针模块
优选算法第一讲:双指针模块 1.移动零2.复写零3.快乐数4.盛最多水的容器5.有效三角形的个数6.查找总价格为目标值的两个商品7.三数之和8.四数之和 1.移动零 链接: 移动零 下面是一个画图,其中,绿色部分标出的是重点: 代码实现&am…...
智能优化算法-水循环优化算法(WCA)(附源码)
目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 水循环优化算法 (Water Cycle Algorithm, WCA) 是一种基于自然界水循环过程的元启发式优化算法,由Shah-Hosseini于2012年提出。WCA通过模拟水滴在河流、湖泊和海洋中的流动过程,以及蒸发…...
基于SpringBoot的个性化健康建议平台
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理基于智能推荐的卫生健康系统的相关信息成为…...
Mapsui绘制WKT的示例
步骤 创建.NET Framework4.8的WPF应用在NuGet中安装Mapsui.Wpf 4.1.7添加命名空间和组件 <Window x:Class"TestMapsui.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winf…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
