《深度学习》OpenCV FisherFaces算法人脸识别 原理及案例解析

目录

一、FisherFaces算法

1、什么是FisherFaces算法

2、原理

3、特点

4、算法步骤

1)数据预处理

2)特征提取

3)LDA降维

4)特征投影

5)人脸识别

二、案例解析

1、完整代码

运行结果:


一、FisherFaces算法

1、什么是FisherFaces算法

        Fisherfaces采用LDA(Linear Discriminant Analysis,线性判别分析)实现人脸识别。

2、原理

        在低维表示下,首先将训练集样本集投影到一条直线A上,让投影后的点满足: 同类间的点尽可能地靠近、异类间的点尽可能地远离

3、特点

        FisherFaces算法具有计算效率高识别准确度高对光照和表情变化具有一定的鲁棒性等特点。

4、算法步骤

        1)数据预处理

                首先,收集人脸图像数据库,并对每个人脸图像进行预处理,如裁剪、旋转、缩放等,以确保图像的一致性和准确性

        2)特征提取

                对预处理后的人脸图像进行特征提取。这些特征可以包括人脸的形状、眼睛、嘴巴、鼻子等部位的几何特征,以及纹理、颜色等特征。在FisherFaces算法中,这些特征被表示为高维向量。

        3)LDA降维

                利用LDA算法对提取的特征向量进行降维。通过计算类间散度矩阵和类内散度矩阵,找到最优的投影方向,使得投影后的数据类间方差最大,类内方差最小。

        4)特征投影

                将原始人脸图像投影到降维后的低维空间中,得到人脸的特征向量。这些特征向量用于后续的人脸识别。

        5)人脸识别

                在识别阶段,将待识别的人脸图像进行同样的预处理和特征提取,然后投影到低维空间中,得到其特征向量。接着,计算待识别人脸的特征向量与数据库中已知人脸的特征向量之间的距离(如欧氏距离),最后,根据距离大小判断待识别人脸的身份。

二、案例解析

1、完整代码

import cv2
import numpy as npdef image_re(image):   # 定义一个函数输入图片地址,自动读取并缩放图片尺寸a = cv2.imread(image,0)a = cv2.resize(a,(140,180))return aimages = []
a = image_re('pyy2.png')   # 将读取到的图片全部存入一个列表
b = image_re('pyy3.png')
c = image_re('zly1.png')
d = image_re('zly2.png')
images.append(a)
images.append(b)
images.append(c)
images.append(d)
labels = [0,0,1,1]   # 设置读入列表图片的标签pre_image = image_re('pyy1.png')   # 读取待识别图像"""创建一个FisherFace的人验特征识别器"""
recognizer = cv2.face.FisherFaceRecognizer_create()# 函数FaceRecognizertrain用给定的数据和相关标签训练生成的实例模型。
# src: 训练图像,用来学习的人险图像
# labels: 标签,人脸图像对应的标签
recognizer.train(images,np.array(labels))# 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('pyy1.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.mzph.cn/bicheng/56501.shtml

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

相关文章

【题解】【记忆化递归】——Function

【题解】【记忆化递归】——Function Function题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示数据规模与约定 1.思路解析2.AC代码 Function 通往洛谷的传送门 题目描述 对于一个递归函数 w ( a , b , c ) w(a,b,c) w(a,b,c) 如果 a ≤ 0 a \le 0 a≤0 或 b ≤…

阿里Dataworks使用循环节点和赋值节点完成对mongodb分表数据同步

背景 需求将MongoDB数据入仓MaxCompute 环境说明 MongoDB 100个Collections:orders_1、orders_2、…、orders_100 前期准备 1、MongoDB数据源配置 需要先保证DW和MongoDB网络是能够联通的,需要现在集成任务中配置MongoDB的数据源信息。 具体可以查…

项目分析:自然语言处理(语言情感分析)

在这个信息爆炸的时代,我们每天都在与海量的文本数据打交道。从社交媒体上的帖子、在线评论到新闻报道,文本信息无处不在。然而,这些文本不仅仅是文字的堆砌,它们背后蕴含着丰富的情感和观点。如何有效地理解和分析这些情感&#…

Linux下的防病毒软件(Antivirus software for Linux)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

FFmpeg的简单使用【Windows】--- 指定视频的时长

目录 功能描述 效果展示 代码实现 前端代码 后端代码 routers 》users.js routers 》 index.js app.js 功能描述 此案例是在上一个案例【FFmpeg的简单使用【Windows】--- 视频混剪添加背景音乐-CSDN博客】的基础上的进一步完善,可以先去看上一个案例然后再…

docker环境安装mongoDB实现平滑迁移实战

docker环境安装mongoDB实现平滑迁移实战 一、备份原始数据(从别的服务器备份到当前服务器)二、数据迁移三、迁移过程日志打印四、验证迁移数据准确性 一、备份原始数据(从别的服务器备份到当前服务器) 使用mongodump工具对原始mo…

Java发送请求实现QPS限制

业务场景 在开发中,当有业务需求需要调用第三方服务实现功能,但是服务接口有QPS限制,所以我们需要在发送请求时限制发送频率防止请求失败。 实现方法 使用 Java Semaphore 类来实现控制请求QPS QPS限制 Component public class QPSControll…

MySQL 8.4修改user的host属性值

MySQL 8.4修改user的host属性值 update mysql.user set host localhost where user mysql用户名; MySQL 8.4修改初始化后的默认密码-CSDN博客文章浏览阅读804次,点赞6次,收藏11次。先下载mysql的zip压缩包:MySQL :: Download MySQL Communi…

STL-string

STL的六大组件&#xff1a; string // string constructor #include <iostream> #include <string> using namespace std; int main() {// 构造std::string s0("Initial string");std::string s1; //nullptrstd::string s2("A character sequenc…

【在Linux世界中追寻伟大的One Piece】Jsoncpp|序列化

目录 1 -> Jsoncpp 1.1 -> 特性 1.2 -> 安装 2 -> 序列化 3 -> 反序列化 4 -> Json::Value 1 -> Jsoncpp Jsoncpp是一个用于处理JSON数据的C库。它提供了将JSON数据序列化为字符串以及从字符串反序列化为C数据结构的功能。Jsoncpp是开源的&#xf…

RHCSA复习题

第一~七章 1.创建以下目录和文件结构&#xff0c;并将/yasuo目录拷贝4份到/目录下。 [rootlocalhost ~]# mkdir /yasuo [rootlocalhost ~]# mkdir /yasuo/dir1 [rootlocalhost ~]# cd /yasuo/dir1 [rootlocalhost dir1]# touch hostname hostname02 passwd ssh_config sshd [r…

F5-TTS开源项目详解:非自回归语音合成技术革新与应用场景

在现代科技的推动下&#xff0c;语音合成技术取得了长足的进步。随着越来越多的场景开始依赖语音交互&#xff0c;如何高效、自然地生成语音成为了行业的一个重要课题。今天我们要讨论的是一个在语音合成领域备受瞩目的开源项目——F5-TTS。它不仅采用了非自回归架构&#xff0…

Arduino配置ESP32环境

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

南京邮电大学电工电子A实验十一(数据选择器及逻辑电路的动态测试)

文章目录 一、实验报告预览二、Word版本报告下载 一、实验报告预览 二、Word版本报告下载 点我

2.Java--入门程序

一、开发Java程序 步骤&#xff1a; 1.编写代码 其中第一行的HelloWorld叫类名&#xff0c;下面的框架叫main()方法&#xff0c; 类名要和文件名一致&#xff0c; 2.编译代码 用Javac进行编译&#xff0c;将编写的代码保存之后&#xff0c;打开WindowsR输入cmd 用cd文件夹…

rom定制系列------小米6x_澎湃os1.0.28安卓13定制固件修改 刷写过程与界面预览

&#x1f49d;&#x1f49d;&#x1f49d; 在接待很多定制化系统过程中。小米6x机型为很多工作室客户使用。但官方低版本固件无法适应新应用的使用。有些第三方固件却可以完美解决。此固件是客户分享的卡刷固件。需要修改为可以批量刷写的线刷固件。去除一些内置应用。需要自带…

Spring使用注解进行依赖注入

一、原则 不要把选择留给Spring 二、Autowired&#xff08;Spring注解&#xff09; 流程图&#xff1a; Spring依赖注入-Autowired 截图&#xff1a; 三、Resource&#xff08;JDK注解&#xff09; 流程图&#xff1a; Spring依赖注入-Resource 截图&#xff1a;

Docker-Harbor概述及构建

文章目录 一、Docker Harbor概述1.Harbor的特性2.Harbor的构成 二、搭建本地私有仓库三、部署 Docker-Harbor 服务四、在其他客户端上传镜像五、维护管理Harbor 一、Docker Harbor概述 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅…

LLM - 使用 Neo4j 可视化 GraphRAG 构建的 知识图谱(KG) 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142938982 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Neo4j …

向日葵下载教程以及三款远程控制工具推荐!!!

向日葵远程控制下载教程&#xff01;&#xff01; 亲爱的朋友们&#xff0c;如果你对远程控制软件有所需求&#xff0c;那么向日葵绝对是一个不错的选择。现在我将带你走一遍向日葵的下载流程。 1. 打开你的浏览器&#xff0c;输入“向日葵官方网站”&#xff0c;进入官方网站…