Opencv人脸识别项目简介

该项目使用Opencv3.0和VS2015在Win10环境下,基于AT&T人脸库进行人脸识别。通过主成分分析(PCA)降低数据维度,实现特征模型保存和图片匹配。PCA的主要目的是降低数据量并保持信息,从而适用于资源有限的设备。代码实现中,由于高维图像计算量大,采用PCA的特征向量进行降维,以减小计算和存储需求。
摘要由CSDN通过智能技术生成

项目要求

  • 使用opencv实现对人脸库的主成分提取(不使用PCA类),完成特征模型保存
  • 对一张测试照片进行识别,找到图片库中和测试图片最像的图

配置说明

  • Opencv3.0
  • VS2015
  • Win10

配置过程网上太多了,就不做过多解释了,可以参照某个教程来做。主要的也就几步,下载Opencv,配Path,配置VC++目录的包含目录和库目录,配置链接器附加项的附加依赖项。

人脸库

结果

  • 训练集是AT&T人脸库40x8(两张做测试用)
  • 左图是输入的测试人脸,右图两张是人脸库中的匹配到后还原人脸
测试人脸 匹配结果 匹配结果(前50%特征向量)
测试人脸 匹配结果 弱

前言

  • 为什么要做PCA (principle component analysis)

    主成分分析做的就是给了一堆很高维的数据,我们需要把它变成低维的数据,变成低维数据有一个好,最直观的就是数据量下来了。那图片举例,比如1000个样本,100x100的分辨率,以前1000x10000的数据,每个点就算是1Btye的数据,要10M。我把它映射到500维(取前50%特征向量)的空间,变成1000x500的数据,一下子降低到了500K,一下子降低了一个量级,更关键的是计算量瞬间也降了一个档次。一些场景如嵌入式设备上(如ZKteco的考勤机),计算和空间都是很奢侈的东西,我们的PCA就发挥作用了。

  • 怎么做数据的降维
    为什么要做降维原因还有很多很多,有兴趣的可以去查查,不在这里讲的主要原因是我自己也不知道。那么接下来就要分析怎么降维,降维大概的意思就是把一个数据点降到低维的数据点,比如XY二维的点映射到一维的话,如果是映射到x轴,那么所有点点乘个(1, 0)就好了;如果是三维的点降到一维那么点乘(1, 0, 0)就好了,降到二维点乘(1, 0, 0);(0, 1, 0)就好了,也就是相当于原来的数据矩阵乘了一个变换矩阵。

    问题来了,这个变换矩阵要怎么设定呢?是不是直接所有的都映射到X,Y,Z…轴上就好了呢?当然不是!比如下面有张数据点图表示男女的身高体重图

    黑点表示男生,红点表示女生
    X轴表示体重,Y轴表示身高

img

如果判断都是按照体重来划分的话,m1很可能就被判断成了女生,fm1则被判断成了男生。“虽然我体重轻一点,但是我身高比较高啊,我应该被划分成男生”。讲道理的话按照那条蓝线来分比较科学,为什么科学啊,因为比较符合图的分布,为什么符合分布啊?….这个时候有人就弄了一个PCA做降维的准则,有人说:“我觉得使得新的数据集方差最大的那种分法比较好。”大家想想,是这么个道理,方差比较小,大家挤成一团,很多数据点很容易重叠,也不容易区分。

数学推导

更加细致的推导可以去参考其他大学的pca课程ppt,如JHU这里有pca处理人脸步骤的详解,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值