人脸识别(不是检测,而是识别,源码下载)
来源:互联网 发布:怎么破解apk软件 编辑:程序博客网 时间:2024/06/09 21:07
之前写了一个能够在任意道路上的汽车识别技术(已经实现,详细解析:http://blog.csdn.net/qjttxz/article/details/7640501),然后有人就问识别有哪些途径,这就让我想起以前大学的时候曾经改用过PCA来做人脸识别,这也算是入门级别吧,现在发现新版本的OPENCV自己的PCA算法封装已经非常强大,PCA的使用已经很简单了。
在讲之前先解析几个基本概念:
Eigenface:是计算机视觉中处理人脸识别时使用的特征向量,Eigenfaces翻译为“特征脸”,意思应该是指“脸特征空间”。
PCA:主成分分析 ( Principal Component Analysis , PCA )是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。计算主成分的目的是将高维数据投影到较低维空间。给定 n 个变量的 m 个观察值,形成一个 n ′ m 的数据矩阵, n 通常比较大。对于一个由多个变量描述的复杂事物,人们难以认识,那么是否可以抓住事物主要方面进行重点分析呢?如果事物的主要方面刚好体现在几个主要变量上,我们只需要将这几个变量分离出来,进行详细分析。但是,在一般情况下,并不能直接找出这样的关键变量。这时我们可以用原有变量的线性组合来表示事物的主要方面, PCA 就是这样一种分析方法。
编译使用的是OPENCV2.4(以前的 PCA封装很多参数的,这里不说了,要讲太费劲了)
整个源码地址:http://download.csdn.net/detail/qjttxz/4375753
#include <iostream>#include "cv.h"#include "highgui.h" using namespace std;using namespace cv; Mat normalize(const Mat& src) { Mat srcnorm; normalize(src, srcnorm, 0, 255, NORM_MINMAX, CV_8UC1); return srcnorm;} int main(int argc, char *argv[]) { vector<Mat> db; // 加载灰度图片( 下载地址 http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html) db.push_back(imread("s1/1.pgm",0)); db.push_back(imread("s1/2.pgm",0)); db.push_back(imread("s1/3.pgm",0)); db.push_back(imread("s2/1.pgm",0)); db.push_back(imread("s2/2.pgm",0)); db.push_back(imread("s2/3.pgm",0)); db.push_back(imread("s3/1.pgm",0)); db.push_back(imread("s3/2.pgm",0)); db.push_back(imread("s3/3.pgm",0)); db.push_back(imread("s4/1.pgm",0)); db.push_back(imread("s4/2.pgm",0)); db.push_back(imread("s4/3.pgm",0)); int total = db[0].rows * db[0].cols; // 构建数据库阵列,这是不拷贝数据的,只是改变数据矩阵 Mat mat(total, db.size(), CV_32FC1); for(int i = 0; i < db.size(); i++) { Mat X = mat.col(i); db[i].reshape(1, total).col(0).convertTo(X, CV_32FC1, 1/255.); } // 设定主要成分数量 int numPrincipalComponents = 12; // 运行PCA PCA pca(mat, Mat(), CV_PCA_DATA_AS_COL, numPrincipalComponents); namedWindow("avg", 1); namedWindow("pc1", 1); namedWindow("pc2", 1); namedWindow("pc3", 1); // 找出最接近的面 imshow("avg", pca.mean.reshape(1, db[0].rows)); // 其他面的eigenfaces特征 imshow("pc1", normalize(pca.eigenvectors.row(0)).reshape(1, db[0].rows)); imshow("pc2", normalize(pca.eigenvectors.row(1)).reshape(1, db[0].rows)); imshow("pc3", normalize(pca.eigenvectors.row(2)).reshape(1, db[0].rows)); waitKey(0);
}
代码够简单了吧,我已经把相关参数做了说明了。下面再给出参考资料的网址,有兴趣的必须去看看:
eiqenface特征的说明:http://en.wikipedia.org/wiki/Eigenface
eigenface人脸识别的paper:http://www.cs.tau.ac.il/~shekler/Seminar2007a/PCA%20and%20Eigenfaces/eigenfaces_cvpr.pdf
OPENCV的eigenface解析:
http://www.bytefish.de/blog/fisherfaces
http://www.cognotics.com/opencv/servo_2007_series/part_4/index.html
- 人脸识别(不是检测,而是识别,源码下载)
- 【javacv】javacv配置+javacv人脸识别项目源码(不是检测)
- 2017年人脸检测、人脸对齐、人脸识别源码
- OpenCV人脸检测+识别
- 人脸检测和识别
- iOS人脸识别(检测)
- 人脸检测与识别
- iOS 人脸识别(检测)
- iOS人脸识别(检测)
- android 人脸检测&&识别
- 人脸检测与识别
- 人脸识别之人脸检测(九)--检测器源码分析
- 人脸识别之人脸检测(十)--强分类器源码分析
- 人脸识别--活体检测(眨眼检测)
- OpenCV+vs2008+摄像头来实时的识别人脸(不是检测)
- 人脸检测和识别 源代码 下载-opencv3+python3.6完整实战项目源代码 识别视频《欢乐颂》中人物
- face++人脸识别源码
- 车牌识别技术详解一(可用于车牌识别,字符识别,人脸检测,验证码识别等等成熟领域)
- Objective-C语法之NSString字符串的那些事儿(三)
- Objective-C语法之NSString字符串的那些事儿(三)
- 公司一同事写的存储过程 带游标
- ubuntu timezone setting
- Dynamics CRM 2011中常用的辅助工具
- 人脸识别(不是检测,而是识别,源码下载)
- Project Euler -- 欧拉题集 F#(Fsharp)及Haskell 版 - No.3, No.4
- 嵌入式boa服务器搭建和移植
- iWitness:基于时间和地理位置显示Twitter和Flickr内容
- Perl组合技:sub
- 关于YII中JSON的操作
- 为什么需要字节对齐?
- rs 实用工具 (rs.exe) (SSRS)SQL server report service
- SQL Server 2008 压缩