#Eigenface人脸识别
自己写代码实现Eigenface人脸识别的训练与识别过程
- 假设每张人脸图像只有一张人脸,且两只眼睛位置已知(即可人工标注给出)。每张图像的眼睛位置存在相应目录下的一个与图像文件名相同但后缀名为txt的文本文件里,文本文件中用一行、以空格分隔的4个数字表示,分别对应于两只眼睛中心在图像中的位置;
- 实现两个程序过程(两个执行文件),分别对应训练与识别
- 训练程序格式大致为: “mytrain.exe 能量百分比 model文件名 其他参数…”,用能量百分比决定取多少个特征脸,将训练结果输出保存到model文件中 。同时将前10个特征脸拼成一张图像,然后显示出来。
- 识别程序格式大致为: “mytest.exe 人脸图像文件名 model文件名 其他参数…”,将model文件装载进来后,对输入的人脸图像进行识别,并将识别结果叠加在输入的人脸图像上显示出来,同时显示人脸库中跟该人脸图像最相似的图像。
- Ubuntu 14.04
- cmake 2.8.12.2
- opencv 3.0
- 需要先对att人脸库以及自己的人脸进行预处理
- 保证眼睛的位置、间距一致,图像的大小一致
- 对图像进行灰度值归一处理
- 裁减图像中的键盘事件
- '-' 缩小图片
- '+' 放大图片
- 'n' 取att某文件夹下的下一个图片(同一个人脸)
- 'r' 复原图片
- 'enter' 确认,进行下一步,灰度归一处理
- up, down, left, right 移动矩形模版
- 保存预处理完的图片时,图片的名称就是这个人的名字/ID
- 因为之后计算速度的原因,所以每个图片的尺寸是20*25
- 加载预处理完的41个人脸
- 建立41 * 500大小的图像矩阵
- cvCalcCovarMatrix函数计算均值矩阵和协方差矩阵
- cvEigenVV函数计算协方差矩阵的特征向量(即特征脸)
- 将特征值最大的10个特征脸显示出来并拼成一个图
- 处理Att人脸库
- 处理自己的脸
- 预处理完的人脸库
- 均值脸
- 前10个特征脸