【进阶OpenCV】 (15)-- 人脸识别 -- EigenFaces算法
文章目录
- EigenFaces算法
- 一、算法原理
- 二、算法流程
- 三、算法特点
- 四、代码步骤
- 1. 图像预处理
- 2. 创建Eigenfaces人脸识别器
- 3. 训练模型
- 4. 预测图像
- 总结
EigenFaces算法
EigenFaces算法是一种基于主成分分析(PCA)的人脸识别方法,其核心思想是通过矩阵的压缩算法,在减少矩阵维数的同时尽可能地保留原矩阵的信息,以此来提取人脸的主要特征并进行识别。以下是对EigenFaces算法的详细介绍:
一、算法原理
- 主成分分析(PCA):PCA是一种常用的数据分析方法,它通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。在EigenFaces算法中,PCA被用于将人脸图像从高维空间投影到低维空间,同时保留人脸的主要特征。
- 特征脸(Eigenfaces):特征脸是基于PCA原理生成的一组特征向量的名称。这些特征向量代表了人脸图像的主要特征,可以用于人脸识别。在EigenFaces算法中,首先通过计算人脸图像的协方差矩阵,然后求解其特征值和特征向量,最后选取前几个最大的特征值对应的特征向量作为特征脸。
二、算法流程
- 数据预处理:收集人脸图像数据库,将每个人脸图像进行预处理,如裁剪、旋转、缩放等,以确保图像的一致性和准确性。
- 计算平均脸:将预处理后的人脸图像按行串成一维向量,并计算所有人脸向量的平均值,得到平均脸向量。
- 计算差值向量:将每个人脸向量减去平均脸向量,得到差值向量。这些差值向量反映了每个人脸与平均脸的差异。
- 计算协方差矩阵:根据差值向量计算协方差矩阵,该矩阵反映了人脸图像中各像素之间的相关性。
- 求解特征值和特征向量:计算协方差矩阵的特征值和特征向量,并选取前几个最大的特征值对应的特征向量作为特征脸。
- 特征提取与比对:将原始人脸图像投影到特征脸空间中,得到人脸的特征向量。然后,将待识别的人脸图像也进行同样的特征提取,并与存储在人脸数据库中的特征向量进行比对,找出最接近的特征向量,从而完成人脸识别。
三、算法特点
- 降维效果好:EigenFaces算法通过PCA降维方法,将高维的人脸图像数据投影到低维空间,同时保留了人脸的主要特征,大大降低了计算复杂度和存储需求。
- 识别准确率高:由于EigenFaces算法能够提取人脸的主要特征,因此在人脸识别中具有较高的准确率。
- 对光照和表情变化具有一定的鲁棒性:虽然EigenFaces算法对光照和表情变化敏感,但通过适当的预处理和特征提取方法,可以在一定程度上提高其对光照和表情变化的鲁棒性。
四、代码步骤
1. 图像预处理
准备好训练图像以及对应的标签,还有待识别图像:
注意!!!:在使用EigenFaces算法进行人脸识别时,传入图像的大小(即尺寸)需要保持一致。
因为基于PCA进行降维处理提取人脸的主要特征的过程中,需要将人脸图像转换为矩阵形式,并按照一定的规则(如按行或按列)将其转换为一维向量。如果图像的大小不一致,那么转换后的一维向量的维度也会不同,这将导致算法无法正确处理这些向量。
import cv2
import numpy as np"""-----图像预处理----- """
images = []
a = cv2.imread('f1.jpg',0)
a = cv2.resize(a,(100,75))
b = cv2.imread('f2.jpg',0)
b = cv2.resize(a,(100,75))
c = cv2.imread('z1.jpg',0)
c = cv2.resize(a,(100,75))
d = cv2.imread('z2.jpg',0)
d = cv2.resize(a,(100,75))images.append(a)
images.append(b)
images.append(c)
images.append(d)labels = [0,0,1,1]
pre_image = cv2.imread('f_test.jpg',0)
pre_image = cv2.resize(pre_image,(100,75))
2. 创建Eigenfaces人脸识别器
# 创建Eigenfaces人脸识别器
recognizer = cv2.face.EigenFaceRecognizer_create()
3. 训练模型
recognizer.train(images,np.array(labels))
4. 预测图像
label,confidence = recognizer.predict(pre_image)
dic = {0:'yifei',1:"zrn"}
print('这人是',dic[label])
print('置信度',confidence)
aa = cv2.putText(cv2.imread('f_test.jpg').copy(),dic[label],(10,30),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,0,255),2)
cv2.imshow('xx',aa)
cv2.waitKey(0)
-------------------
这人是 yifei
置信度 3772.118831043097
总结
本篇介绍了,如何通过EigenFaces算法来进行人脸识别,其中需要注意的是:
- 在使用EigenFaces算法进行人脸识别时,传入图像的大小(即尺寸)需要保持一致。
- 训练以及测试图像最好使用大头照,减少身体的部分。
相关文章:
【进阶OpenCV】 (15)-- 人脸识别 -- EigenFaces算法
文章目录 EigenFaces算法一、算法原理二、算法流程三、算法特点四、代码步骤1. 图像预处理2. 创建Eigenfaces人脸识别器3. 训练模型4. 预测图像 总结 EigenFaces算法 EigenFaces算法是一种基于主成分分析(PCA)的人脸识别方法,其核心思想是通…...

无人机封闭空间建图检测系统技术详解
无人机封闭空间建图检测系统技术是一种集成了多种传感器、智能算法与控制系统的高级技术,旨在实现无人机在复杂封闭环境下的自主导航、精确建图与高效检测。以下是对该技术的详细解析: 一、技术概述 无人机封闭空间建图检测系统通过集成激光雷达(LiDAR…...

webpack自定义插件 ChangeScriptSrcPlugin
插件文件 class ChangeScriptSrcPlugin {apply(compiler) {const pluginName "ChangeScriptSrcPlugin";compiler.hooks.compilation.tap(pluginName, (compilation, callback) > {compilation.hooks.htmlWebpackPluginAlterAssetTags.tapAsync(pluginName,(html…...

win11 笔记本指纹驱动正常就是使用不了
去微信官网下载最新的win11重装系统后,发现笔记本上的指纹登录失效了,网上搜索各种试过不行,新版本与旧的win11有微出入,那些方法都不行。系统版本如下: 操作前确保: 1. win11能升级,默认有试用…...

表的约束
约束就是设定条条框框,保证被约束目标符合约束条件。表的约束就是对表内列数据的约束,保证列数据的正确性。 default 设置列数据的默认值。当用户添加记录的时候没有初始化该列的数据,就是使用默认值初始化。 如果创建表的时候没有设置默认…...
jmeter是怎么用的,怎么设计接口测试用例的
如何使用: Apache JMeter 是一款广泛使用的开源性能测试工具,用于对各种服务(如 Web 应用、数据库、FTP、WEB 服务等)进行负载测试和性能测试。以下是如何使用 JMeter 的基本步骤。 1. 安装 JMeter 下载 JMeter:访问…...
数据挖掘示例
案例背景,有公司进行橡胶玩具的生产,一共生产两种产品,分别为橡皮鱼和橡皮鸭。 已知条件为: 1、公司的橡胶原材料能够生产500只橡皮鸭或者400条橡皮鱼。 2、生产效率为公司产量不会高于400只橡皮鸭和300条橡皮鱼。 3、每只橡皮…...
【PHP】在ThinkPHP6中Swoole与FPM的简单性能测试对比
一、前言 本文主要测试在ThinkPHP 6框架中,使用Swoole扩展库与使用PHP-FPM两者的HTTP并发性能差距,测试方法较简单,仅供参考。 二、测试环境 系统:Ubuntu 22.04 PHP版本:7.4.33 Swoole版本:4.8.13 ThinkPHP版本:6.1.5 ThinkPHP-Swoole扩展库版本:3.1.4 测试工具:A…...
论文写作学习--POLYGCL
POLYGCL: GRAPH CONTRASTIVE LEARNING VIA LEARNABLE SPECTRAL POLYNOMIAL filters 今天由于开了一天的积极分子会议以及要写汇报,因此,只来得及学一会。 摘要 第一步,设定背景 Recently, Graph Contrastive Learning (GCL) has achieved …...
【高等数学】无穷级数
0. 了解 无穷级数是指将无穷多个数按照一定的规律相加起来的表达式。 打个比方,就像你有一个无穷长的梯子,每一级梯子代表一个数。把这些数一个一个加起来,就形成了无穷级数。 比如常见的等比级数,这里是首项,是公比。如果,这个等比级数是收敛的,也就是它的和是一个有限…...

计算机网络——无连接传输UDP
UDP用于流媒体应用和事务性应用(一次往返搞定的应用)...

DS几大常见排序讲解和实现(下)(15)
文章目录 前言一、快排的思想二、Hoare版基本思路代码实现 三、挖坑法基本思路代码实现 四、双指针法基本思想代码实现 五、三数取中六、小区间优化七、三路划分八、自省排序总结 前言 其实下篇就单独讲个快速排序 你可能会想这是什么神通,竟然能单独开一篇来讲…...

电脑视频剪辑大比拼,谁更胜一筹?
随着短视频的火爆,越来越多的人开始尝试自己动手制作视频,无论是记录生活点滴还是创作个性短片,一款好用的视频剪辑软件是必不可少的。今天,我们就从短视频运营的角度,来聊聊几款热门的电脑视频剪辑软件,看…...

计算机毕业设计 基于Web的景区管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...

计算生物学与生物信息学漫谈-2-测序深度/读长质量和Fasta处理
上一篇文章中我们介绍了测序技术的由来与发展,那么在介绍第三代测序的时候,我们提到了关于测序深度和读长的问题,那么本篇文章就详解介绍一下。 计算生物学与生物信息学漫谈-1-测序一路走来-CSDN博客 目录 1.测序深度SEQUENCING DEPTH &…...

基于SSM+微信小程序的电子点餐管理系统(点餐1)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的电子点餐管理系统实现了管理员及用户。管理员实现了首页、个人中心、餐品分类管理、特色餐品管理、订单信息管理、用户管理、特价餐品管理、活动订单管理、系统管理。…...

IO进程---day5
1、使用有名管道实现两个进程之间的相互通信 //管道文件 #include<myhead.h> int main(int argc, const char *argv[]) {//创建有名管道文件1if(mkfifo("./pipe1",0664)-1){perror("创建管道文件失败");return 0;}if(mkfifo("./pipe2",066…...

ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF(Unified Robot Description Format)语法详解
URDF 文件是一个标准的 XML 文件格式,用于在 ROS 中描述机器人模型的结构。URDF 通过预定义的一系列标签,简洁地表达机器人的组成和运动关系。虽然机器人模型可能非常复杂,但在 URDF 中可以主要简化为两个核心部分: 连杆ÿ…...
常见SQL注入攻击示例与原理及其防御措施
SQL 注入(SQL Injection)是一种代码注入技术,用于攻击数据驱动的应用程序,主要通过在输入字段或 URL 查询参数中插入恶意 SQL 语句来实现。攻击者利用应用程序对用户输入数据的未充分验证或过滤,将恶意 SQL 语句注入到…...

Node.js 中的 WebSocket 底层实现
WebSockets 是一种网络通信协议,可实现双向客户端-服务器通信。 WebSockets 通常用于需要即时更新的应用程序,使用 HTTP 之上的持久双工通道来支持实时交互,而无需持续进行连接协商。服务器推送是 WebSockets 的众多常见用例之一。 本文首先…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...