人脸识别(不是检测,而是识别,源码下载)

           之前写了一个能够在任意道路上的汽车识别技术(已经实现,详细解析: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


 

  • 11
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
本文的视频人脸检测识别方法的基本设计思想是,在给出一段视频文件以及这个视频文件的字幕和剧本之后,可以自动的对视频中的人物进行检测识别,不需要任何的训练样本。视频人脸检测识别方法主要由四个部分组成:字幕剧本融合部分,人脸检测部分,样本集自动生成部分和基于深度学习的人脸识别部分。本文将深度学习算法引入到了视频人脸识别中来,有两方面的重要意义,一方面,视频人脸的识别要求算法具备一定的抗干扰能力,并且能够保证一定的实时性,本文的实验与分析表明,深度学习算法具备这方面的要求;另一方面,从深度学习算法特性的角度来说,深度学习算法最大的缺点就是构造深度模型需要大量的样木,这很大程度上限制了深度学习算法的应用,然而本文所设计的基于视频的人脸检测模块可以轻松的产生数万、数十万的样本,从而满足了深度学习算法的大样本集要求。 基于深度学习模型的人脸识别部分是整个系统的重点,这一部分主要有两方面的意义:一,经历了视频人脸的检测部分之后,虽然视频人脸集合中人脸的纯度有了很大的提升,但是依然会存在一些杂质,因此必须通过识别模块来进一步的过滤掉人脸集合中的杂质;二,通过视频所得到的帧文件中,经常会出现多张人脸同时出现的情况,在这种情况下,视频人脸的检测部分是无法将说话者与人脸进行对应的,必须通过识别模块才能区分出一个帧中的多个人脸。 基于深度学习模型的人脸识别部分主要包含三个模块:数据预处理模块、深度学习模块和识别模块。数据预处理模块主要由数据整合和构造数据立方体两个部分组成。深度学习模块通过两个具体过程来实现:RBM调节和深度模型的反馈微调。RBM的调节过程是自下而上的各个层间的调节过程,以这种方式来初始化整个深度模型的系统权值,而深度模型的反馈微调,首先进行自下而上的识别模型转换,然后再进行自上而下的生成模型转换,最后通过不同层次之间的不断调节,使生成模型可以重构出具有较低误差的原样本,这样就得到了此样本的本质特征,即深度模型的最高抽象表示形式。经过深度学习模型的处理,可以得到降维之后的样本特征,在此基础上运用识别模块,本文中所采用的识别方法是人工神经网络的识别方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值