人脸识别-特征算法

文章目录

  • 一、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算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/450036.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第八天(1)|哈希表理论基础

文档讲解:代码随想录 难度:有一点 哈希表理论基础 哈希表 首先什么是哈希表,哈希表(英文名字为Hash table,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hash table就可以了&#xff0…

指尖的无声告白,算法里的隐约温柔

公主请阅 1. 三数之和1. 题目说明示例 1示例 2示例 3 1.2 题目分析1.3 代码部分1.3 代码分析 2. 四数之和2.1 题目说明示例 1示例 2 2.2 题目分析2.3 代码部分2.4 代码解析 1. 三数之和 题目传送门 1. 题目说明 给定一个整数数组 nums,判断数组中是否存在三个元素 …

鸿道Intewell操作系统构型介绍之Intewell-C全实时构型

鸿道(Intewell)操作系统主要包括Intewell-C、Intewell-H和Intewell-V三种不同构型产品: Intewell-C Intewell-C是一款工业实时微内核操作系统,由科东软件自主研发,具有超低延迟和最小抖动,保障工业设备可以高效处理时间敏感的现…

python爬虫实战案例——从移动端接口抓取微博评论,采用cookie登陆,数据存入excel表格,超详细(15)

文章目录 1、任务目标2、网页分析3、代码编写3.1 代码分析3.2 完整代码1、任务目标 1、目标网站:微博文章(https://m.weibo.cn/detail/4813628149072458),这是微博某一篇博文,用于本文测试 2、要求:爬取该博文下,所有一级评论和二级评论,以及每条评论的作者,最后保存至E…

熵权法计算评价指标权重——使用Excel VBA实现

[ 熵权法 ] 信息是系统有序程度的一个度量,熵是系统无序程度的一个度量;根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合…

java脚手架系列4--测试用例、拦截器

异常处理、拦截器、数据库连接 1 测试用例 单元测试是一个老生常谈的问题,无论是后端对自己的代码质量把的第一道关也好,也是对测试减缓压力。这里就不过多讲述测试用例的重要性,但是有2个框架我们必须了解一下。 1.1 JUnit和mockito 我们…

gitlab保护分支设置

版本:gitlab10.2.2 一旦设置master分支被保护,除了管理员之外的任何用户都无法直接向master提交代码,只要提交代码就会报错 # git push -u origin master Total 0 (delta 0), reused 0 (delta 0) remote: GitLab: You are not allowed to pu…

[LeetCode] 733. 图像渲染

题目描述: 有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr , sc 和 color 。你应该从像素 image[sr][sc] 开始对图像进行上色 填充 。 为了完成 上色工作: 从初始像素…

【python】OpenCV—Fun Mirrors

文章目录 1、准备工作2、原理介绍3、代码实现4、效果展示5、参考 1、准备工作 pip install vacm2、原理介绍 在OpenCV中,VCAM 库是一个用于简化创建三维曲面、定义虚拟摄像机、设置参数以及进行投影任务的工具。它特别适用于实现如哈哈镜等图像变形效果。 一、VC…

简易STL实现 | PriorityQueue 的实现

1、priority_queue 的底层是堆,标准库中 直接使用 std::make_heap, std::push_heap, std::pop_heap 来实现 priority_queue 2、std::make_heap、std::push_heap 和 std::pop_heap 这三个函数 用于 处理堆数据结构(Heap)。堆 是一种特殊的完全…

4、.Net 快速开发框架:DncZeus - 开源项目研究文章

DncZeus 是一个基于 ASP.NET Core 和 Vue.js 的前后端分离的通用后台管理系统框架,其愿景是成为一个易于使用且功能丰富的 .NET Core 通用后台权限管理模板系统基础框架。项目名称 "DncZeus" 由 "Dnc"(.NET Core 的缩写)和 "Zeus"(古…

JavaWeb环境下的Spring Boot在线考试系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

【学习】word保存图片

word中有想保存的照片 直接右键另存为的话,文件总是不清晰,截屏的话,好像也欠妥。 怎么办? 可以另存为 网页 .html 可以得到: 原图就放到了文件夹里面

Java学习Day47:戏耍黑手道人(项目记录)

1.项目背景 2.技术选择 3.环境搭建 1.创建空项目 创建health_parent父文件用来控制依赖,类型为quickStart 打包方式为,pom:用在父级工程或聚合工程中,用来做jar包的版本控制,必须指明这个聚合工程的打包方式为pom。…

计算机网络-RSTP工作过程与原理

前面我们已经学习了RSTP的一些基础概念以及对于STP的改进之处,因为RSTP兼容STP,所以实际上两者工作原理是一致的,这里只简单过一遍,然后进行一些基础实验即可,大致还是遵循选举根桥、确定端口角色与状态、全网收敛的思…

ROS理论与实践学习笔记——6 ROS机器人导航(仿真)之导航实现

准备工作&#xff1a;请先安装相关的ROS功能包 安装 gmapping 包(用于构建地图):sudo apt install ros-<ROS版本>-gmapping 安装地图服务包(用于保存与读取地图):sudo apt install ros-<ROS版本>-map-server 安装 navigation 包(用于定位以及路径规划):sudo apt in…

一文详解Ntlm Relay

Ntlm Rleay简介 Ntlm Rleay翻译过来就是Ntlm 中继的意思&#xff0c;也肯定是跟Ntlm协议是相关的&#xff0c;既然要中继&#xff0c;那么攻击者扮演的就是一个中间人的角色&#xff0c;类似于ARP欺骗&#xff0c;ARP欺骗就是在一个广播域中发送一些广播&#xff0c;然后大声问…

解锁C++多态的魔力:灵活与高效的编码艺术(上)

文章目录 前言&#x1f338;一、多态的定义与概念&#x1f33b;1.1 多态的核心思想&#xff1a;&#x1f33b;1.2 多态的两种主要形式&#xff1a; &#x1f338;二、多态的使用条件&#x1f33b;2.1 基类指针或引用2.1.1 为什么需要基类指针或引用 &#x1f33b;2.2 虚函数&am…

UE5 猎户座漂浮小岛 04 声音 材质

UE5 猎户座漂浮小岛 04 声音 材质 1.声音 1.1 导入 wav格式 1.2 循环播放 1.3 mp3转wav 1.4 新手包素材&#xff08;火焰 &#xff09; particle&#xff1a;颗粒 2.材质 2.1 基本颜色 M_Yellow 2.2 混合模式与双面材质 2.3 金属感、高光、粗糙度 M_AluminumAlloy 2.4 自…

视频网站开发:Spring Boot框架的高效实现

5 系统实现 5.1用户信息管理 管理员管理用户信息&#xff0c;可以添加&#xff0c;修改&#xff0c;删除用户信息信息。下图就是用户信息管理页面。 图5.1 用户信息管理页面 5.2 视频分享管理 管理员管理视频分享&#xff0c;可以添加&#xff0c;修改&#xff0c;删除视频分…