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

embedded/2024/10/23 20:00:21/

目录

一、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 npimages = []
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.ppmy.cn/embedded/129889.html

相关文章

docker 发布镜像

如果要推广自己的软件,势必要自己制作 image 文件。 1 制作自己的 Docker 容器 基于 centos 镜像构建自己的 centos 镜像,可以在 centos 镜像基础上,安装相关的软件,之后进行构建新的镜像。 1.1 dockerfile 文件编写 首先&…

Android Settings 设置项修改

Settings 设置项 在 Android 系统上,WRITE_SETTINGS 这个权限从 API 1 就已经开始有了。 通过在 app 中设置权限 android.permission.WRITE_SETTINGS 允许 app 读/写 系统设置。 在官方文档的描述中,还有一段注意事项: Note: If the app targets API level 23 or higher,…

[项目详解][boost搜索引擎#1] 概述 | 去标签 | 数据清洗 | scp

目录 一、前言 二、项目的相关背景 三、搜索引擎的宏观原理 四、搜索引擎技术栈和项目环境 五、正排索引 VS 倒排索引--原理 正排索引 分词 倒排索引 六、编写数据去除标签和数据清洗模块 Parser 1.数据准备 parser 编码 1.枚举文件 EnumFile 2.去标签ParseHtml(…

Python 网络爬虫教程

在大数据时代,获取数据是至关重要的一步。而网络爬虫是获取网络上公开数据的有效工具之一。本文将介绍如何使用 Python 来编写一个基本的网络爬虫,并通过具体的案例来展示如何抓取和处理网页数据。 1. 什么是网络爬虫? 网络爬虫是一种自动化…

基于SpringBoot中药材进存销管理系统【附源码】

基于SpringBoot中药材进存销管理系统 效果如下: 系统注册界面 管理员主界面 员工界面 供应商界面 中药材类型界面 中药材界面 员工主界面 研究背景 随着中医药产业的快速发展,传统的管理方式已难以满足现代化、规模化的药材管理需求。中药材种类繁多&…

【STM32项目_2_基于STM32的宠物喂食系统】

摘要:本文介绍一款基于 STM32 的宠物喂食系统资源。该系统以 STM32 为核心,集成多种传感器与设备,涵盖 DHT11、HX711、减速马达及 ESP8266 模块,具备环境监测、精准喂食、网络连接及数据存储功能。 🔜🔜&am…

计算机专业大学四年的学习路线(非常详细),零基础入门到精通,看这一篇就够了

前言 许多学子选择踏上计算机这条充满挑战与机遇的道路。但在大学四年中,如何规划自己的学习路线,才能在毕业时脱颖而出,成为行业的佼佼者呢? 第一学年:基础知识的奠基 1.1 课程安排 在大学的第一年,重…

[linux 驱动]gpio子系统详解与实战

目录 1 描述 1.1 文件节点操作 gpio 引脚 1.2 gpio 引脚计算 2 结构体 2.1 gpio_desc 2.2 gpio_device 2.3 gpio_chip 3 相关函数 3.1 goio 申请释放 3.1.1 gpio_request 3.1.2 gpio_free 3.2 gpio 输入输出设置 3.2.1 gpio_direction_input 3.2.2 gpio_direction…