各类人脸识别算法的总体分析

article/2025/10/4 15:09:49

一、人脸识别算法之特征脸方法(Eigenface)

1、原理介绍及数据收集

特征脸方法主要是基于PCA降维实现。

详细介绍和主要思想可以参考

http://blog.csdn.net/u010006643/article/details/46417127

上述博客的人脸数据库打不开了,大家可以去下面这个博客下载ORL人脸数据库

http://blog.csdn.net/xdzzju/article/details/50445160

下载后,ORL人脸数据库有40个人,每人10张照片。

2、流程

3、相关图示

 

4、代码

复制代码

  1 #include <opencv2/opencv.hpp>2 #include <opencv2/face.hpp>3 4 using namespace cv;5 using namespace cv::face;6 using namespace std;7 8 //对原图归一化9 Mat normal(Mat src, Mat dst) {10     if (src.channels() == 1)//若原图单通道11         normalize(src, dst, 0, 255, NORM_MINMAX, CV_8UC1);12     else //否则,原图三通道13         normalize(src, dst, 0, 255, NORM_MINMAX, CV_8UC3);14     return dst;15 }16 17 void main() {18     //读取文件,转换为数据流19     string filename = string("at.txt");20     ifstream file(filename.c_str(), ifstream::in);21     if (!file)22         cout << "error" << endl;23 24     string line, path, classlabel;25     vector<Mat>image;26     vector<int>labels;27     char separator = ';';28     while (getline(file,line))29     {30         stringstream liness(line);31         getline(liness, path, separator);32         getline(liness, classlabel);33         if (!path.empty()&&!classlabel.empty())34         {35             //cout << "path:" << path<< endl;36             image.push_back(imread(path, 0));37             labels.push_back(atoi(classlabel.c_str()));38         }39     }40 41     if (image.size() < 1 || labels.size() < 1)42         cout << "invalid image path..." << endl;43 44     int height = image[0].rows;45     int width = image[0].cols;46     //cout << "height:" << height << ",width:" << width<<endl;47 48     //最后一个人为测试样本49     Mat testSample = image[image.size() - 1];50     int testLabel = labels[labels.size() - 1];51     image.pop_back();52     labels.pop_back();53 54     //训练55     Ptr<BasicFaceRecognizer>model = createEigenFaceRecognizer();56     model->train(image, labels);57 58     //识别59     int predictLabel = model->predict(testSample);60     cout << "actual label:" << testLabel << ",predict label:" << predictLabel << endl;61 62     //获得特征值,特征向量,均值    平均脸63     Mat eigenvalues = model->getEigenValues();64     Mat eigenvectors = model->getEigenVectors();65     Mat mean = model->getMean();66     Mat meanFace = mean.reshape(1,height);67     Mat dst;68     dst= normal(meanFace,dst);69     imshow("Mean Face", dst);70     71     //特征脸72     for (int i = 0; i < min(10,eigenvectors.cols); i++)73     {74         Mat ev = eigenvectors.col(i).clone();75         Mat eigenFace = ev.reshape(1, height);76         Mat grayscale;77         grayscale = normal(eigenFace, grayscale);78         Mat colorface;79         applyColorMap(grayscale, colorface, COLORMAP_BONE);80         char* winTitle = new char[128];81         sprintf(winTitle, "eigenface_%d", i);82         imshow(winTitle, colorface);83     }84 85     //重建人脸86     for (int num = min(10, eigenvectors.cols); num < min(300, eigenvectors.cols); num+=15)87     {88         Mat evs = Mat(eigenvectors, Range::all(), Range(0, num));89         Mat projection = LDA::subspaceProject(evs, mean, image[0].reshape(1, 1));90         Mat reconstruction= LDA::subspaceReconstruct(evs, mean, projection);91 92         Mat result = reconstruction.reshape(1, height);93         reconstruction = normal(result, reconstruction);94         char* winTitle = new char[128];95         sprintf(winTitle, "recon_face_%d", num);96         imshow(winTitle, reconstruction);97     }98     99     waitKey(0);
100 }

复制代码

二、FisherFace(LDA线性判别分析)

1、理论介绍

http://blog.csdn.net/feirose/article/details/39552997

 

2、流程

3、PCA和LDA的对比

 

4、代码(与特征脸代码几乎一致)

此处只列出修改部分

1

2

3

4

5

6

55行模型训练    Ptr<BasicFaceRecognizer>model = createFisherFaceRecognizer();

 

72行显示特征脸  for (int i = 0; i < min(16,eigenvectors.cols); i++)

                   Mat ev = eigenvectors.col(i).clone();

 

86行重建人脸    for (int num = 0; num < min(16, eigenvectors.cols); num++)

三、LBPH

 1、原理介绍

大家可以参考http://blog.csdn.net/xiaomaishiwoa/article/details/46640377

二、流程

3、代码

复制代码

#include <opencv2/opencv.hpp>
#include <opencv2/face.hpp>using namespace cv;
using namespace cv::face;
using namespace std;//对原图归一化
Mat normal(Mat src, Mat dst) {if (src.channels() == 1)//若原图单通道normalize(src, dst, 0, 255, NORM_MINMAX, CV_8UC1);else //否则,原图三通道normalize(src, dst, 0, 255, NORM_MINMAX, CV_8UC3);return dst;
}void main() {//读取文件,转换为数据流string filename = string("at.txt");ifstream file(filename.c_str(), ifstream::in);if (!file)cout << "error" << endl;string line, path, classlabel;vector<Mat>image;vector<int>labels;char separator = ';';while (getline(file,line)){stringstream liness(line);getline(liness, path, separator);getline(liness, classlabel);if (!path.empty()&&!classlabel.empty()){//cout << "path:" << path<< endl;image.push_back(imread(path, 0));labels.push_back(atoi(classlabel.c_str()));}}if (image.size() < 1 || labels.size() < 1)cout << "invalid image path..." << endl;int height = image[0].rows;int width = image[0].cols;//cout << "height:" << height << ",width:" << width<<endl;//最后一个人为测试样本Mat testSample = image[image.size() - 1];int testLabel = labels[labels.size() - 1];image.pop_back();labels.pop_back();//训练Ptr<LBPHFaceRecognizer>model = createLBPHFaceRecognizer();model->train(image, labels);//识别int predictLabel = model->predict(testSample);cout << "actual label:" << testLabel << ",predict label:" << predictLabel << endl;//打印参数int radius = model->getRadius();    //中心像素点到周围像素点的距离int neibs = model->getNeighbors();    //周围像素点的个数int grad_x = model->getGridX();        //将一张图片在x方向分成几块int grad_y = model->getGridY();        //将一张图片在y方向分成几块double t = model->getThreshold();    //相似度阈值    cout << "radius:" << radius << endl;cout << "neibs:" << neibs << endl;cout << "grad_x:" << grad_x << endl;cout << "grad_y:" << grad_y << endl;cout << "threshold:" << t<<endl;waitKey(0);
}

复制代码

 

致谢:

1、【技术共享(bin)】怎么把人脸检测的速度做到极致

2、boosting(AdaBoost)算法

3、AdaBoost 算法简介

4、Boosting算法简介


http://chatgpt.dhexx.cn/article/h83ouWQ7.shtml

相关文章

人脸识别算法初次了解

人脸识别算法初次了解 这是转载别人的帖子&#xff0c;觉得好&#xff0c;大家一块学习http://www.cnblogs.com/guoyiqi/archive/2011/07/28/2129300.html 前言 在写此文之前&#xff0c;先扯点东西。我一直在找一个东西&#xff0c;让我思考&#xff0c;让我久久的深陷其…

深扒人脸识别技术,原理、算法深度解析

在深度学习出现后&#xff0c;人脸识别技术才真正有了可用性。这是因为之前的机器学习技术中&#xff0c;难以从图片中取出合适的特征值。轮廓&#xff1f;颜色&#xff1f;眼睛&#xff1f;如此多的面孔&#xff0c;且随着年纪、光线、拍摄角度、气色、表情、化妆、佩饰挂件等…

基于特征脸的人脸识别算法概述

基于特征脸的人脸识别算法概述 —— 才疏学浅, 难免有错误和遗漏, 欢迎补充和勘误. 特征脸识别算法&#xff08;EigenFaceRecognizer&#xff09;是一种在主成分分析&#xff08;PCA&#xff09;中进行人脸辨识的技术。基于特征脸的驾驶人身份识别流程图为&#xff1a; 图1 …

人脸检测与识别

人脸检测&#xff08; Face Detection &#xff09;和人脸识别技术是深度学习的重要应用之一。本章首先会介绍MTCNN算法的原理&#xff0c; 它是基于卷积神经网络的一种高精度的实时人脸检测和对齐技术。接着&#xff0c;还会介绍如何利用深度卷积网络提取人脸特征&#xff0c;…

人脸检测算法综述

其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。 书的购买链接书的勘误,优化,源代码资源导言 人脸检测是目前所有目标检测子方向中被研究的最充分的问题之一,它在安防监控,人证比对…

现在人脸识别最好的算法是哪种?

目前看来&#xff0c;基于深度学习是在人脸识别领域效果比较出色的机器学习方法。 但从学术的角度来讲&#xff0c;“最好”是一个谨慎的词语&#xff0c;深度学习从以往不被认可逐渐成长为机器学习的主流&#xff0c;同样&#xff0c;也难保未来会有其它方法会取代深度学习。 …

经典人脸识别算法(特征脸,FISHERFACE,LBP)

首先&#xff0c;只是基于对算法的主要是想的介绍和理解&#xff0c;对于涉及到的PCA以及直方图比较提到的方法等等可以自己再去深入研究。 其次&#xff0c;只是用作笔记记录。 参考了CSDN博客&#xff1a;https://blog.csdn.net/smartempire/article/details/23377385 htt…

人脸识别算法及系统

首先说下哦 也就给自己当个记事本发了 内容可能也是老生常谈 不喜勿喷 人脸识别的目标 总结两点&#xff0c;第一&#xff0c;认出同一个人&#xff0c;不管你的状态怎么变&#xff0c;都能知道你就是你。第二、区分不同的人&#xff0c;可能这两个人长得很像&#xff0c;或者…

人脸检测:人脸检测算法综述

https://blog.csdn.net/SIGAI_CSDN/article/details/80751476 问题描述 人脸检测的目标是找出图像中所有的人脸对应的位置&#xff0c;算法的输出是人脸外接矩形在图像中的坐标&#xff0c;可能还包括姿态如倾斜角度等信息。下面是一张图像的人脸检测结果&#xff1a; 虽然人…

人脸检测技术——深度学习算法原理

人脸检测技术——深度学习算法原理 人脸检测技术——深度学习算法原理1. 通用目标检测网络1.1 faster-rcnn检测算法的基本原理1.2 faster-rcnn应用于人脸检测 2. 专门应用于人脸检测的卷积神经网络2.1 专门用于人脸检测的卷积神经网络的发展现状2.2 cascadeCNN2.3 MTCNN 3. 人脸…

什么是人脸识别,人脸识别算法大致分为几种?

如果要给人脸识别下个定义&#xff0c;它是利用人的生物特征实现个体区分的一种技术&#xff0c;一般包括图像采集、特征定位、身份的确认和查找三个环节。简单来说&#xff0c;人脸识别就是从图像中提取面部特征关键点&#xff0c;比如骨骼特征、眉毛高度等&#xff0c;通过比…

基于深度学习的人脸识别算法

基于深度学习的人脸识别算法 简介Contrastive LossTriplet LossCenter LossA-Softmax Loss参考文献&#xff1a; 简介 我们经常能从电影中看到各种神奇的人脸识别技术&#xff0c;例如图1。人脸识别技术是基于面部特征信息进行身份识别的一种生物识别技术。该技术在图片/视频中…

人脸检测算法分类

由于上次在Altea申请的License到期了&#xff0c;因为申请还挺麻烦的&#xff0c;而且申请周期太长了&#xff0c;最后主要因为本人的电脑实在太。。。&#xff0c;编译一个SOC-FPGA的程序需要6-10个小时。。。所以现在基本搁置了OpenCL的学习&#xff0c;开始接触机器视觉。各…

人脸识别算法原理过程详解

本文为转载内容&#xff0c;由于找不到源作者链接&#xff0c;故特此说明。 人脸识别各算法详解 最近&#xff0c;由于工作需要&#xff0c;为了找到一款高效的人脸识别算法&#xff0c;对各种人脸识别算法都研究了一番&#xff0c;以下记录的是各算法的理论基础。 一.MTCNN…

浅析人脸识别算法及其应用

前言 随着深度学习和计算机硬件的快速发展&#xff0c;基于深度卷积神经网络的一系列算法都取得了显著的进展&#xff0c;其中人脸识别作为计算机视觉领域中时间最久远、应用最广泛的研究课题之一&#xff0c;近些年也在深度学习的加持下在性能方面获得了大幅提升&#xff0c;…

了解面部识别的不同算法

介绍 任何面部检测和识别程序或系统都必须以人脸识别算法为核心。这些算法由专家分为两大类。几何方法专注于识别特征。为了从图像中提取值&#xff0c;应用了光度统计方法。然后&#xff0c;为了删除变体&#xff0c;将这些值与模板进行比较。此外&#xff0c;算法可以分为两…

人脸识别各算法详解

人脸识别各算法详解 最近&#xff0c;由于工作需要&#xff0c;为了找到一款高效的人脸识别算法&#xff0c;对各种人脸识别算法都研究了一番&#xff0c;以下记录的是各算法的理论基础。 一.MTCNN 本文章主要介绍MTCNN算法的流程&#xff0c;MTCNN主要由三个框架组成&#…

人脸识别算法(包含简单代码)

TOC 人脸识别算法是一种利用计算机视觉和模式识别技术来识别和验证人脸的算法。它可以通过分析图像或视频中的人脸特征&#xff0c;如脸部轮廓、眼睛、鼻子、嘴巴等来识别和区分不同的个体。人脸识别算法在安全认证、身份验证、监控安防、人机交互等领域具有广泛的应用。 以下…

总结几个简单好用的Python人脸识别算法

今天给大家总结几个简单、好用的人脸识别算法。人脸识别是计算机视觉中比较常见的技术&#xff0c;生活中&#xff0c;我们接触最多的人脸识别场景是人脸考勤. 人脸识别的算法最核心的工作是从一张图片中识别出人脸的位置。识别的算法可以说是多种多样&#xff0c; 下面我就来…

追踪AR圣诞老人,免费领200份圣诞礼物

元宇宙 绿心公园 圣诞节 元宇宙&#xff08;Metaverse&#xff09;&#xff0c;是指 利用科技手段进行链接与创造的&#xff0c; 与现实世界映射与交互的虚拟世界&#xff0c; 具备新型社会体系的数字生活空间。 这一概念在2021年走入了大众视野 勾出了人们对“平行宇宙…