《深度学习》OpenCV LBPH算法人脸识别 原理及案例解析
目录
一、LBPH算法
1、概念
2、实现步骤
3、方法
1)步骤1
• 缩放
• 旋转和平移
2)步骤2
二、案例实现
1、完整代码
1)图像内容:
2)运行结果:
一、LBPH算法
1、概念
在OpenCV中,LBPH(Local Binary Patterns Histogram,局部二值模式直方图)算法主要用于人脸识别任务。
LBPH是一种用于图像特征提取的算法。它首先将图像划分为小的局部区域,然后在每个区域中提取局部二值模式(Local Binary Patterns)。
局部二值模式是一种在像素邻域中将像素与其邻居像素进行比较的方法,根据比较结果将像素转换为二进制编码。在LBPH算法中,将每个局部区域中的二值模式编码组合起来形成一个直方图,用于表示该区域的特征。最后,将所有局部区域的直方图组合在一起,形成整个图像的特征向量。
2、实现步骤
1)以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像
2)再将LBP图像分为多个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图。 通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。
3、方法
1)步骤1

• 缩放
为了得到不同尺度下的纹理结构,可以使用圆形邻域,将计算扩大到任意大小的邻域内。圆形邻域可以用(P,R)表示,其中,P表示圆形邻域内参与运算的像素点个数,R 表示圆形邻域的半径。
• 旋转和平移
1、将中心点像素作为圆心,将周围的像素点按照顺时针方向依次移动一个位置。
2、再计算所有图像的LBP值,取其中最小值作为最终的值

2)步骤2
将LBP图像分为多个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图。
LBP特征与Haar特征很相似,都是图像的灰度变化特征。

二、案例实现
1、完整代码
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('zly1.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('zly2.png', cv2.IMREAD_GRAYSCALE))
labels = [0,0,1,1] # 设置四张图片的标签
dic = {0:'ppy',1:'zly',-1:'无法识别'} # 设置一个字典用于打印结果名称
predict_image = cv2.imread('pyy3.png', cv2.IMREAD_GRAYSCALE) # 读取待识别人脸,灰度图"""创建一个LBPH的人脸特征识别器"""
# cv2.face.LBPHFaceRecognizer_create(radius=None, neighbors=None, grid_x=None, grid_y=None, threshold=None)
# radius:可选参数,圆形局部二进制模式的半径,增加邻居数可以提高识别精度,但同样也会增加计算量,建议使用默认值
# neighbors:可选参数,圆形局部二进制模式的邻居数,建议使用默认值
# grid_x:可选參数 水平方向上的的单元格数,默认值为8,即将LBP特征图在水平方向上划分为8个单元,每个网格区域将独立计算其局部二值模式直方图
# grid_y:可逃参数 垂直方向上的的单元格数,默认值为8,建议使用默认值,若grid_x和grid_y都为默认值,则表示特征图划分为8*8人小,统计8*8大小的直方图。
# threshold:阈值,可选参数,用于设置识别器在判断两个人脸是否属于同一人时的置信度阈值,通常是在调用识别器的predict()方法时作为可选参数传入
recognizer = cv2.face.LBPHFaceRecognizer_create(threshold=80)"""训练"""
# 函数train用给定的数和相关标签训练生成的实例模型。
# 各参数的含义如下:
# src:训练的图像,用来学习的人脸图像
# labels:标签,人脸图像对应的标签。
recognizer.train(images,np.array(labels))"""预测"""
# 函数predict()对一个待识别人脸图像进行判断,寻找与当前图像距离最近的人脸图像。
# 与哪輻人貽图像距离最近,就将当前待测图像标注为该人脸图像对应的标答。
# 若待识别人脸图像与所有人脸图像的距离都大于特定的距离值(阈值),则认为没有找到对应的结果,
# 参数与返问值:
# src:需要识别的人脸图像
# label:返回的识别结果标签,返回-1示无法识别当前人。
# confidence:返回的置信度评分,用来衡量识别结果与原有模型之间的距离
# 评分越小表示匹配越高,但是若高于80,则认为识别结果与原有模型差距大
label,confidence = recognizer.predict(predict_image)
print('这人是:',dic[label])
print('置信度:',confidence)
1)图像内容:

2)运行结果:

相关文章:
《深度学习》OpenCV LBPH算法人脸识别 原理及案例解析
目录 一、LBPH算法 1、概念 2、实现步骤 3、方法 1)步骤1 • 缩放 • 旋转和平移 2)步骤2 二、案例实现 1、完整代码 1)图像内容: 2)运行结果: 一、LBPH算法 1、概念 在OpenCV中,L…...
数据结构之顺序表——动态顺序表(C语言版)
静态顺序表我们已经实现完毕了,下来我们实现一下动态顺序表 静态链接:数据结构之顺序表——动态顺序表(C语言版) 首先来了解一下两个顺序表的差别 一、内存管理的灵活性 动态分配与释放:动态顺序表能够在运行时根据需要动态地分配和释放内存…...
Python 网络爬虫入门与实战
目录 1 引言 2 网络爬虫基础知识 2.1 什么是网络爬虫 2.2 爬虫的工作原理 2.3 爬虫的应用场景 3 Python 爬虫环境搭建 3.1 安装 Python 3.2 安装必要的库 4 使用 Requests 库进行基本爬虫 4.1 发送 GET 请求 4.2 发送 POST 请求 4.3 处理响应 5 使用 BeautifulSoup…...
成都睿明智科技有限公司电商服务可靠不?
在这个短视频风起云涌的时代,抖音不仅成为了人们娱乐消遣的首选平台,更是众多商家竞相追逐的电商新蓝海。成都睿明智科技有限公司,作为抖音电商服务领域的佼佼者,正以其独到的洞察力和专业的服务,助力无数品牌在这片沃…...
fmql之Linux Uart
正点原子第48章。 串口收发测试 正点原子教程 RS232和RS485的串口收发测试是一样的。 // 设置串口波特率为115200 stty -F /dev/ttyPS1 ispeed 115200 ospeed 115200 cs8// 发送字符串 echo "www.openedv.com" >/dev/ttyPS1// 接收数据 cat /dev/ttyPS1 fmql测…...
【火山引擎】调用火山大模型的方法 | SDK安装 | 配置 | 客户端初始化 | 设置
豆包 (Doubao) 是字节跳动研发的大规模预训练语言模型。 目录 1 安装 2 配置访问凭证 3 客户端初始化 4 设置地域和访问域名 5 设置超时/重试次数 1 安装 通过pip安装PYTHON SDK。 pip install volcengine-python-sdk[ark] 2 配置访问凭证 获取 API Key 访问凭证具体步…...
前端实现下载功能汇总(下载二进制流文件、数组下载成csv、将十六进制下载成pcap、将文件下载成zip)
前言:汇总一下做过的下载功能,持续补充中 一、将后端传过来的二进制流文件下载(需要提取headers里面的文件名) const { herders,data }res; // 创建下载链接元素 const link document.createElement("a");// 创建 Bl…...
iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
作者:UC 浏览器后端工程师,梁若羽 传统 ELK 方案 众所周知,ELK 中的 E 指的是 ElasticSearch,L 指的是 Logstash,K 指的是 Kibana。Logstash 是功能强大的数据处理管道,提供了复杂的数据转换、过滤和丰富…...
【MySQL】入门篇—基本数据类型:NULL值的概念
在关系数据库中,NULL值是一个特殊的标记,表示缺失或未知的值。 NULL并不等同于零(0)或空字符串(),它表示一个字段没有任何值。 这一概念在数据库设计和数据管理中至关重要,因为它影…...
Java设计模式10 - 观察者模式
观察者模式 观察者模式也叫作发布-订阅模式,也就是事件监听机制。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自…...
LabVIEW示波器通信及应用
基于LabVIEW平台开发的罗德与施瓦茨示波器通信与应用系统实现了示波器的远程控制及波形数据的实时分析,通过TCP/IP或USB接口与计算机通信,利用VISA技术进行指令传输,从而实现高效的数据采集与处理功能。 项目背景 随着现代电子测试需求的日益…...
西门子PLC中Modbus通讯DATA_ADDR通讯起始地址设置以及RTU轮询程序设计。
1 DATA_ADDR通讯起始地址设置 因为西门子PLC保持型寄存器的是40001~49999和400001~465536, 那么什么时候用40001什么时候用400001呢? 当需要的地址超过49999的话就用400001。 比如从站的某个地址是#16 48D518645 4000118645超过了49999 这边因为前…...
趋势(一)利用python绘制折线图
趋势(一)利用python绘制折线图 折线图( Line Chart)简介 折线图用于在连续间隔或时间跨度上显示定量数值,最常用来显示趋势和关系(与其他折线组合起来)。折线图既能直观地显示数量随时间的变化…...
【含文档】基于Springboot+Vue的采购管理系统(含源码+数据库+lw)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...
【C++11入门基础】
我没有那么想你,那只是偶尔醉意会催人提起.......................................................................... 目录 前言 一、【C11的介绍】 二、【C11引入的一些实用语法】 2.1、【统一的列表初始化({ }的初始化)】 2.2、【initi…...
Pytest中fixture的scope详解
pytest作为Python技术栈下最主流的测试框架,功能极为强大和灵活。其中Fixture夹具是它的核心。而且pytest中对Fixture的作用范围也做了不同区分,能为我们利用fixture带来很好地灵活性。 下面我们就来了解下这里不同scope的作用 fixture的scope定义 首…...
Springboot 接入 WebSocket 实战
Springboot 接入 WebSocket 实战 前言: WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。 简单理解: 1,常见开发过程中我们知道 Http协议,客户端…...
数据结构之红黑树的实现
红黑树的实现 1. 红⿊树的概念1.1 红⿊树的规则:1.2 思考⼀下,红⿊树如何确保最⻓路径不超过最短路径的2倍的?1.3 红⿊树的效率: 2. 红⿊树的实现2.1 红⿊树的结构2.2 红⿊树的插⼊2.2.1 红⿊树树插⼊⼀个值的⼤概过程2.2.2 情况1…...
智能工厂的设计软件 中的AI操作系统的“三维时间”(历时/共时/等时)构建的“能力成熟度-时间规模”平面
本文要点 “智能工厂的设计软件提出 “三维时间”的一个时间立方体(cube)。 “三维时间”的概念--历时diachronic(一维的)、共时synchronic(二维的)和等时isochronic(三维的)。 即…...
Spring Boot常见错误与解决方法
White graces:个人主页 🙉专栏推荐:Java入门知识🙉 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 目录 创建第一个SpringBoot项目 SpringBoot项目各个…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
