人脸识别-特征算法
文章目录
- 一、LBPH算法
- 1.基本原理
- 2.实现步骤
- 3.代码实现
- 二、Eigenfaces算法
- 1.特点
- 2.代码实习
- 三、FisherFaces算法
- 1.算法原理
- 2.算法特点
- 3.代码实现
- 四、总结
人脸识别特征识别器是数字信息发展中的一种生物特征识别技术,其核心在于通过特定的算法和技术手段,从人脸图像中提取出具有区分性和稳定性的特征,用于后续的人脸识别和身份验证。Opencv提供了三种用于识别人脸的特征提取算法。分别是 LBPH 算法、EigenFaces 算法、FisherFaces 算法。以下是对人脸识别特征识别器的详细介绍:
一、LBPH算法
Local Binary Patterns Histograms(LBPH),即局部二值模式直方图,是一种用于图像识别和人脸识别的特征提取方法。以下是对LBPH的详细介绍:
1.基本原理
LBPH算法通过LBP算子描述图像局部纹理特征。LBP算子是一种用于描述图像局部纹理的算子,它将每个像素与其邻域内的像素进行比较,并将比较结果编码为二进制数。然后,通过统计这些二进制数的直方图来提取图像的局部纹理特征。在人脸识别中,LBPH算法将人脸图像划分为多个局部块,并计算每个块的LBP直方图,最后将这些直方图组合起来形成特征向量。
2.实现步骤
1、以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像;

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

特点:
通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。
3.代码实现
import cv2
import numpy as npimages=[]
images.append(cv2.imread('fmjj1.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('fmjj2.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('ss1.png', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('ss2.png', cv2.IMREAD_GRAYSCALE))
labels = [0, 0, 1, 1]
dic = {0: 'fmjj', 1: 'ss', -1: '无法识别'}
predict_image = cv2.imread('fmjj.png', cv2.IMREAD_GRAYSCALE)recognizer = cv2.face.LBPHFaceRecognizer_create(threshold=80)recognizer.train(images, np.array(labels))label, confidence = recognizer.predict(predict_image)
print('这人是:', dic[label])
print('置信度:', confidence)
aa = cv2.putText(cv2.imread('fmjj.png').copy(), dic[label], (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2)
cv2.imshow('aa', aa)
cv2.waitKey(0)
cv2.destroyAllWindows()
本代码通过对四张照片进行读取,前两种为同一人图像,后两张为另一人图像,转为灰度图,并设置对应的标签,然后读取测试图片,通过使用LBPHFaceRecognizer来创建一个人脸识别器,并为其设置了一个阈值为80,然后使用测试图像和对应的标签来训练这个识别器。最后使用predict方法来对新的人脸图像进行识别。结果如下:

二、Eigenfaces算法
基于主成分分析(PCA)的算法,通过对人脸图像进行PCA处理,将高维的人脸数据转换为低维数据,提取出人脸的主要特征。
1.特点
- 降维效果好:Eigenfaces算法通过PCA降维,将高维的人脸图像数据转换为低维数据,同时保留了人脸的主要特征,有效降低了计算复杂度。
- 识别精度高:由于Eigenfaces算法提取了人脸图像的主要特征向量,因此在识别阶段能够较好地区分不同的人脸。
- 对光照和表情变化敏感:然而,Eigenfaces算法对光照和表情变化较为敏感,因为这些变化会改变人脸图像的主要特征向量,从而影响识别精度。
2.代码实习
import cv2
import numpy as npdef image_re(image):a = cv2.imread(image, 0)a = cv2.resize(a, (120, 180))return aimages = []
a = image_re('fmjj1.png')
b = image_re('fmjj2.png')
c = image_re('ss1.png')
d = image_re('ss2.png')
images.append(a)
images.append(b)
images.append(c)
images.append(d)labels = [0, 0, 1, 1]
pre_image = cv2.imread('fmjj.png', 0)
pre_image = cv2.resize(pre_image, (120, 180))recognizer = cv2.face.EigenFaceRecognizer_create()recognizer.train(images, np.array(labels))
label, confidence = recognizer.predict(pre_image)
dic = {0: 'fmjj', 1: 'ss'}
print('这人是:', dic[label])
print("置信度:", confidence)
aa = cv2.putText(cv2.imread('fmjj.png').copy(), dic[label], (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2)
cv2.imshow('aa', aa)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码基本与上述一致,这里我们使用EigenFaceRecognizer创建人脸识别器,然后再对其进行训练,预测得到最终结果。
三、FisherFaces算法
1.算法原理
Fisherfaces算法的核心思想是利用LDA算法对人脸特征进行降维,并通过计算投影系数,将原始图像投影到低维空间中。这样不仅可以大大减少计算量,提高识别速度,还能在一定程度上保持较高的识别准确率。LDA是一种经典的线性学习方法,它能够在降维的同时考虑类别信息,使得投影后的同类样本点尽可能靠近,异类样本点尽可能远离。
2.算法特点
- 考虑类别信息:与Eigenfaces算法相比,Fisherfaces算法在降维过程中考虑了类别信息,这使得投影后的特征更具区分性。
- 对光照和角度变化具有鲁棒性:由于Fisherfaces算法在提取特征时考虑了人脸的几何形状和纹理信息,因此它对光照和角度变化具有一定的鲁棒性。
- 计算复杂度较高:虽然Fisherfaces算法在识别阶段具有较快的速度,但由于在训练阶段需要计算类内和类间散度矩阵以及投影系数,因此计算复杂度相对较高。
3.代码实现
import cv2
import numpy as npdef image_re(imgae):a = cv2.imread(imgae, 0)a = cv2.resize(a, (120, 180))return aimage = []
a = image_re('fmjj1.png')
b = image_re('fmjj2.png')
c = image_re('ss1.png')
d = image_re('ss2.png')
image.append(a)
image.append(b)
image.append(c)
image.append(d)
labels = [0, 0, 1, 1]
pre_image = image_re('fmjj.png')
recognizer = cv2.face.FisherFaceRecognizer_create()
recognizer.train(image, np.array(labels))
label, confidence = recognizer.predict(pre_image)
dic = {0: 'fmjj', 1: 'ss'}
print("这人是:", dic[label])
print('置信度:', confidence)
aa = cv2.putText(cv2.imread('fmjj.png').copy(), dic[label], (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2)
cv2.imshow('aa', aa)
cv2.waitKey(0)
cv2.destroyAllWindows()
四、总结
Eigenfaces、Fisherfaces和LBPH都是人脸识别中的经典算法,它们各自具有不同的特点和优势。Eigenfaces和Fisherfaces关注全局信息,而LBPH注重局部特征。在实际应用中,可以根据具体需求和场景选择合适的算法进行人脸识别。例如,在需要处理大规模数据集时,可以选择Eigenfaces算法;在需要注重分类性能时,可以选择Fisherfaces算法;在复杂环境下进行人脸识别时,可以选择LBPH算法。
相关文章:
人脸识别-特征算法
文章目录 一、LBPH算法1.基本原理2.实现步骤3.代码实现 二、Eigenfaces算法1.特点2.代码实习 三、FisherFaces算法1.算法原理2.算法特点3.代码实现 四、总结 人脸识别特征识别器是数字信息发展中的一种生物特征识别技术,其核心在于通过特定的算法和技术手段…...
C++【内存管理】(超详细讲解C++内存管理以及new与delete的使用和原理)
文章目录 1.C/C内存分布2.C语言中动态内存管理方式3.C内存管理方式3.1 new/delete操作内置类型3. 2new/delete操作自定义类型 4. operator new与operator delete函数(重点)5. new和delete的实现原理5.1 内置类型5.2 自定义类型5.2.1 自定义类型调用new[]…...
elementUi el-table 表头高度异常问题
1、现象 在同一个页面通过状态切换不同table时,当从有合并标头行的table切换到无合并表头的table时,无合并表头的table的表头的高度异常了,如下图 切换后 2、解决 给每个el-table 加上一个唯一的key <el-table key"1"></…...
kubekey的应用
随着 Kubernetes 社区的不断发展,即将迎来 Kubernetes 1.30 版本的迭代。在早先的 1.24 版本中,社区作出一个重要决策:不再默认集成 Docker 作为容器运行时,即取消了对 Docker 的默认支持。这就像咱们家厨房换了个新灶头ÿ…...
如何识别并分类转录因子的家族
愿武艺晴小朋友一定得每天都开心 当我们有了差异表达的转录因子列表以后,接下来可能就想知道这些转录因子的家族分布情况是怎样的?有没有1-2个Family在其中起主要作用,占比较多。 基于这种需求,可以按以下几步来实现: 1)从AnimalTFDB4转录因子数据库中,根据需要…...
【C++11】可变模板参数详解
个人主页:chian-ocean 文章专栏 C 可变模板参数详解 1. 引言 C模板是现代C编程中一个非常强大且灵活的工具。在C11标准中,引入了可变模板参数(variadic templates),它为模板编程带来了革命性改变。它的出现允许我们…...
本地群晖NAS安装phpMyAdmin管理MySQ数据库实战指南
文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 本文主要介绍如何在群晖NAS安装MySQL与数据库管理软件p…...
QTableWidget 接口详情
Qt Widgets->C Classes->QTableWidget Qt 5.12版本QTableWidget接口详情(机翻) QTableWidget类提供了一个带有默认模型的基于项的表视图。 属性 列数columnCount : int 行数rowCount : int 细节描述 QTableWidget类提供了一个带有默认模型的基…...
GESP CCF python四级编程等级考试认证真题 2024年9月
一、单选题(每题 2 分,共 30 分) 第 1 题 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制部分所使用的磁心存储元件由磁心颗粒组成…...
oracle数据库名实例名服务名
Oracle数据库是一个复杂的系统,它包含多个组件,包括数据库服务器、实例和服务。 数据库名(DB_NAME):这是数据库的内部名称,通常在创建数据库时指定,并在整个数据库生命周期内保持不变。 实例名…...
python+appium+雷电模拟器安卓自动化及踩坑
一、环境安装 环境:window11 1.1 安装Android SDK AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 这里面任选一个就可以,最终下载完主要要安装操作安卓的工具adb,安装这个步骤的前提是要…...
Python第七八次作业
1.输入一个大于0的正整数n,如果n 1 ,则返回1, 如果n是偶数,则返回 n // 2 ,如果n是奇数,则返回 3n 1,将所有的返回值存放到一个列表中,注意:n是第一个元素,其他的元素根…...
Leetcode——数组:螺旋矩阵59.螺旋矩阵
题目 思路 对于每层,从左上方开始以顺时针的顺序填入所有元素。假设当前层的左上角位于 (top,left),右下角位于 (bottom,right),按照如下顺序填入当前层的元素。 从左到右填入上侧元素,依次为 (top,left) 到 (top,right)。 从上到…...
C++类与对象-继承和多态(超全整理)
前言 前面讲类与对象上中下时,所讲的都是在单个类中相关的语法(初始化列表、this指针、静态成员、常函数和常对象......)或者使两个不同的类产生联系的语法(友元)。而本文虽然也是类与对象的内容,但和之前的…...
3.3 Thymeleaf语法
文章目录 引言Thymeleaf标签显示标签链接地址标签条件判断标签元素遍历标签 Thymeleaf表达式变量表达式选择变量表达式消息表达式链接表达式 Thymeleaf内置对象上下文对象上下文变量上下文区域请求对象响应对象会话对象日期对象 实战演练创建控制器创建模板页面 结语 引言 Thy…...
使用Dlib库实现人脸检测和关键点定位
目录 前言 一、安装Dlib库 二、人脸检测 三、人脸关键点定位 前言 Dlib是一个现代化的 C 工具包,提供了一些机器学习算法和工具,特别是在面部识别和人脸关键点检测方面非常流行。它具有易于使用的 Python 接口,并被广泛应用于计算机视觉项…...
DNS隧道流量分析
DNS隧道 DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量…...
HCIP-HarmonyOS Application Developer 习题(十一)
(填空)1、某开发者在使用HarmonyOs的分布式力时,分布式_____能力是其他分布式能力的基础。 答案:软总线 分析:分布式软总线是手机、平板、智能穿戴、智慧屏、车机等分布式设备的通信基座,为设备之间的互联互…...
使用Ollama测试OpenAI的Swarm多智能体编排框架
Ollama https://ollama.com/ ollama run qwen2.5Install Requires Python 3.10 pip install githttps://github.com/openai/swarm.git代码V1 # 导入Swarm和Agent类 from swarm import Swarm, Agent from openai import OpenAI # 实例化Swarm客户端 openai_client OpenAI…...
C# 完美操作 Active Directory 详细总结,轻松玩转域管理
前言 嗨,大家好! 在这个数据信息飞速发展的 21 世纪,数据安全成为了每个企业关注的焦点,保护企业数据安全日益成为企业工作中的重中之重。 域服务器,尤其是微软的 Active Directory(AD)&…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
