当前位置: 首页 > news >正文

《深度学习》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.lryc.cn/news/461563.html

相关文章:

  • 基于Python+Flask的天气预报数据可视化分析系统(源码+文档)
  • 深入解析 Flutter兼容鸿蒙next全体生态的横竖屏适配与多屏协作兼容架构
  • 【Spring】Spring实现加法计算器和用户登录
  • 电脑d盘不见了怎么恢复?
  • 电子商务网站维护技巧:保持WordPress、主题和插件的更新
  • 交叉编译--目标平台aarch64 ubuntu 22.04
  • 【pytorch】昇思大模型配置python的conda版本
  • nodejs的卸载和nvm安装
  • 网络七层架构
  • 2024年华为OD机试真题-敏感字段加密-Java-OD统一考试(E卷)
  • 图神经网络黑书笔记--术语
  • 原型基于颜色的图像检索与MATLAB
  • 【C++笔试强训】如何成为算法糕手Day9
  • 初识算法 · 二分查找(1)
  • 数据结构:数字统计
  • 网页前端开发之HTML入门
  • Python do while 实现案例
  • docker网络管理详解 一
  • 前端使用Canvas实现网页电子签名(撤销、下载)
  • Lepus安装与配置管理(Lepus Installation and Configuration Management)
  • Tomcat中存放图片文件丢失问题
  • Webpack一键打包多个环境
  • Neo4j 构建文本类型的知识图谱
  • 【SSM详细教程】-03-Spring参数注入
  • 深度学习 %matplotlib inline
  • RT-Thread线程的定义和属性
  • 【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦
  • Windows模拟电脑假死之键盘鼠标无响应
  • 一文详解线程池
  • 网际报文协议ICMP及ICMP重定向实例详解2