《深度学习》OpenCV EigenFaces算法 人脸识别

news2024/10/17 6:17:08

目录

一、EigenFaces算法

1、什么是EigenFaces算法

2、原理

3、实现步骤

1)数据预处理

2)特征提取

3)构建模型

4)识别

4、优缺点

1)优点

2)缺点

二、案例实现

1、完整代码

运行结果:


一、EigenFaces算法

1、什么是EigenFaces算法

        EigenFaces算法,又称为基于主成分分析(Principal Component Analysis,PCA)的人脸识别方法,是一种在人脸识别领域具有重要地位的经典算法。

        主成分分析(PCA)是一种矩阵的压缩算法,在减少矩阵维数的同时尽可能的保留原矩阵的信息,简单来说就是将 n×m的矩阵转换成n×k的矩阵,仅保留矩阵中所存在的主要特性,从而可以大大节省空间和数据量。

2、原理

        EigenFaces算法的核心思想是从统计的角度,寻找人脸图像分布的基本元素,即人脸图像样本集协方差矩阵的特征向量,以此近似地表征人脸图像。这些特征向量被称为特征脸(Eigenfaces),它们反映了隐含在人脸样本集合内部的信息和人脸的结构关系。

        EigenFaces算法首先将输入的人脸图像看作高维空间中的向量,然后对这些向量进行统计分析,计算其协方差矩阵,并提取出该矩阵的特征向量和特征值。这些特征向量就是用于表征人脸的特征脸。

3、实现步骤

        1)数据预处理

                对人脸图像进行灰度化、归一化、去噪等操作,以消除图像中的噪声和差异,提高识别准确性。

        2)特征提取

                将预处理后的人脸图像看作高维空间中的向量,通过统计分析这些向量的协方差矩阵,提取出人脸的主要特征向量(即特征脸)。

        3)构建模型

                将提取出的特征脸用于构建人脸识别模型。该模型可以是一个分类器、神经网络或其他机器学习模型。

        4)识别

                将待识别的人脸图像输入到模型中,通过比对特征脸,实现人脸识别。

4、优缺点

        1)优点

                • 简单直观:基于统计分析,可以直观地理解人脸特征的提取和识别过程。

                • 高效性:能够快速处理大量的人脸图像,实现高效的人脸识别。

        2)缺点

                • 对光照和表情变化的敏感性:在复杂环境下,光照和表情变化可能导致识别效果不佳。

                •​​​​​​​ 对训练样本数量的依赖:需要大量的训练样本才能提取出有效的特征,限制了其在小样本情况下的应用。

                •​​​​​​​ 计算复杂度较高:对于实时性要求高的应用场景可能不太适合。

二、案例实现

1、完整代码

import cv2
import numpy as np

images = []
a = cv2.imread('pyy1.png',0)   # 读取图像,改变其尺寸,将图像存入列表
a = cv2.resize(a,(170,180))
b = cv2.imread('pyy2.png',0)
b = cv2.resize(b,(170,180))
c = cv2.imread('zly1.png',0)
c = cv2.resize(c,(170,180),)
d = cv2.imread('zly2.png',0)
d = cv2.resize(d,(170,180))
images.append(a)
images.append(b)
images.append(c)
images.append(d)

labels = [0,0,1,1]   # 设置列表中图像标签

pre_image = cv2.imread('zly3.png',0)
pre_image = cv2.resize(pre_image,(170,180))

"""创建EigenFace人脸识别器"""
# cv2.face.EigenFaceRecognizer_create(num_components=None, threshold=None)
# num_components:指定在特征脸分解过程中要保留的特征向量(即主成分)的数量,特征向量的数量决定了识别器的复杂度和准确性,如果不指定,则默认使用所有可用的特征向量。
# threshold:进行人验识别所采用的阈值,识别是通过计算待识别图像与每个已知人脸之间的欧氏距离来实现的。如果最小距离小于指定的阈值,则认为识别成功,并返回对应的标签;否则,返回-1表示未识别
recognizer = cv2.face.EigenFaceRecognizer_create()

recognizer.train(images,np.array(labels))

# 对预测图像(pre_image)进行人验识别预测
# confidence:大小介于0到20000,只要低于5000都被认为是可的结果。
label,confidence = recognizer.predict(pre_image)
dic= {0:'pyy',1:'zly'}
print("这人是:",dic[label])
print('置信度为:',confidence)

"""在图像上写上标签内容"""
aa = cv2.putText(cv2.imread('zly3.png').copy(),dic[label], (10,30),cv2.FONT_HERSHEY_SIMPLEX, 0.9,  (0,0,255), 2)
cv2.imshow("xx",aa)
cv2.waitKey(0)
        运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大学新生编程入门指南:如何选择编程语言与制定学习计划

大学新生编程入门指南:如何选择编程语言与制定学习计划 编程已成为当代大学生的必备技能,尤其是在信息技术高速发展的今天,编程能力不仅能帮助你在课堂学习中脱颖而出,更能为未来职业生涯打下坚实的基础。然而,面对如…

The 48 bit pointer

在 Intel CPU 和 Arm CPU 中&#xff0c;用户空间的指针地址默认都只使用低 48 位&#xff0c;高16 位总是 0。 写一小段代码验证下&#xff1a; #include <stdio.h> #include <memory.h> #include <stdlib.h>void o(long long ptr) {printf("%016p: &…

如何通过CDN优化网站服务器访问速度?

CDN&#xff0c;即内容分发网络&#xff08;Content Delivery Network&#xff09;&#xff0c;在现代互联网中起着重要作用。它可以显著提升网站服务器的访问速度。以下是CDN在加速网站访问方面的主要优势及其工作原理。 1. 全球分布的服务器节点 CDN通过在全球范围内布设多个…

mysql的重置

今天用Navicat16去连接mysql突然就连不上了。一直报错 连接本地mysql时出现2003-Can‘t connect to MySql server on ‘localhost‘(10061)错误。 以为是Navicat过期了。正好Navicat推出了Lite 17免费版本&#xff0c;心想正好可以尝尝鲜&#xff0c;而且还支持连接Redis&#…

C++:Boost的安装和使用

1、Boost简介 Boost的本质就是一个开源C库&#xff0c;它包含多种功能强大的模块&#xff0c;如&#xff1a;字符串文本处理模块、容器、算法、多线程、智能指针、线程池等模块 2、Boost的下载和安装 &#xff08;1&#xff09;Boost下载 官网&#xff1a;http://www.boost…

【JAVA毕业设计】基于Vue和SpringBoot的医院电子病历管理系统

本文项目编号 T 008 &#xff0c;文末自助获取源码 \color{red}{T008&#xff0c;文末自助获取源码} T008&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 医…

股票分析软件设计

设计一个功能齐全的股票分析软件是一个复杂且有挑战性的项目&#xff0c;需要综合运用多种编程技术和金融知识。下面是一个总体设计思路和主要功能模块的概述&#xff1a; 主要功能模块&#xff1a; 1. 用户界面&#xff08;UI/UX&#xff09; - 显示K线图&#xff0c;并允许…

西门子变频器SINAMICS V20选型

SINAMICS V20共有五种外形尺寸可供选择&#xff0c;输出功率覆盖0.12kW-30kW&#xff1a; V20订货号 单相230V&#xff1a; 三相380V&#xff1a;

数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 噪声调频干扰 4.2 线性调频干扰 4.3 噪声干扰 4.4 扫频干扰 4.5 灵巧干扰 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3…

数据结构——单链表的基本操作

前言 介绍 &#x1f343;数据结构专区&#xff1a;数据结构 参考 该部分知识参考于《数据结构&#xff08;C语言版 第2版&#xff09;》29~36页 补充 后序代码中会遇见这个结构体 typedef struct LNode { ... }LNode,*LinkList; 对于这个代码&#xff0c;目的是定义线性表…

【云原生kubernetes系列--coredns篇】

1.corednsd的介绍 官网&#xff1a;https://coredns.io/ CoreDNS是一个灵活、可扩展的 DNS 服务器&#xff0c;可以充当 Kubernetes 集群 DNS。与 Kubernetes 一样&#xff0c;CoreDNS 项目由 CNCF coredns在K8S中的用途,主要是用作服务发现&#xff0c;也就是服务(应用)之间…

Python中 文件操作及与数据库的交互

在数据驱动的时代&#xff0c;Python不仅是一门强大的编程语言&#xff0c;更是与文件系统和数据库交互的重要工具。无论是读取配置文件、处理数据集&#xff0c;还是与数据库进行交互&#xff0c;Python都能轻松胜任。那么&#xff0c;如何高效地进行文件操作&#xff0c;并实…

uniapp 小程序0到1教程

先说明一下&#xff0c;uni-app的文档很乱 一、注册微信小程序 如果你还没有微信公众平台的账号&#xff0c;请先进入微信公众平台首页&#xff0c;点击 “立即注册” 按钮进行注册。注册的账号类型可以是订阅号、服务号、小程序以及企业微信&#xff0c;我们选择 “小程序”…

基本计算器 II

文章目录 题目解析解题小结 题目解析 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意&#xff1a;不允许使用任何将字符…

lazyLoad

//1.通过React的lazy函数配合import()函数动态加载路由组件 > 路由组件代码会被分开打包 const Login lazy(()>import(/pages/Login)) //2.通过<Suspense>指定在加载得到路由打包文件前显示一个自定义loading界面 <Suspense fallback{<h1&…

Arduino配置ESP32环境

Arduino配置ESP32环境 引言一、IDE下载教程操作取巧方法 二、社区安装包三、官方手动安装 引言 最近入手了一款ESP32-C3的开发板&#xff0c;想继续沿用现有Arduino IDE&#xff0c;网上看了很多方法&#xff0c;大致分了三类&#xff1a;IDE下载、社区安装包、github手动配置…

法规标准-懂车帝智能化实测标准(2024版)

场景&#xff1a;AEB追尾静态假车 1.场地布置&#xff1a; ——测试选取封闭场地&#xff0c;试验路面应为水平、干燥&#xff0c;具有良好附着能力的混凝土沥青路面&#xff0c;附着系数在0.8以上 ——试验过程中&#xff0c;在试验道路两边3m以内或者静止目标车前方30m内不能…

简单掌握 Android Studio 模拟器

下载 Android Studio安装adb、配置 adb创建一个新的Activity项目创建模拟器 参考&#xff1a;mac系统下android studio创建手机模拟器adb命令使用&#xff0c;可在模拟器上安装app 打开终端 adb devices // 查询设备 adb install xx/xx/xx // 安装apk&#xff08;apk路径拖进…

Learning to Adapt to Light

Abstract 光适应或亮度校正是提高图像对比度和视觉吸引力的关键步骤。 有多种与光相关的任务&#xff08;例如&#xff0c;低光增强和曝光校正&#xff09;&#xff0c;之前的研究主要单独研究这些任务。 然而&#xff0c;考虑这些与光相关的任务是否可以通过统一的模型来执行…

扫雷(C 语言)

目录 一、游戏设计分析二、各个步骤的代码实现1. 游戏菜单界面的实现2. 游戏初始化3. 开始扫雷 三、完整代码四、总结 一、游戏设计分析 本次设计的扫雷游戏是展示一个 9 * 9 的棋盘&#xff0c;然后输入坐标进行判断&#xff0c;若是雷&#xff0c;则游戏结束&#xff0c;否则…