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…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...