实践总结:
- 首先了解做人脸识别的步骤
- 各个算法后面的原理
- 原理背后的相关知识的了解
- 人脸识别项目总遇到的问题
由于篇幅原因,后面一篇写各个算法背后的原理,原理背后的相关知识的了解,人脸识别项目总遇到的问题
首先感谢:
https://blog.csdn.net/qq_37406130/article/details/78697244 基于Opencv的人脸识别
https://blog.csdn.net/xingchenbingbuyu/article/details/51386949 OpenCV实践之路——人脸识别之一数据收集和预处理
https://blog.csdn.net/u013088062/article/details/38588185 浅谈Openv中人脸识别类FaceRecognizer
https://docs.opencv.org/2.4/modules/contrib/doc/facerec/facerec_tutorial.html#appendixft Face Recognition with OpenCV
https://blog.csdn.net/matrix_space/article/details/51364302 机器学习: 特征脸算法 EigenFaces
https://blog.csdn.net/u010402786/article/details/52261933 算法优化二——如何提高人脸检测正确率
要进行人脸的识别的训练,首先我们要对Openv中人脸识别类FaceRecognizer要有一个了解,http://www.cnblogs.com/guoming0000/archive/2012/09/27/2706019.html (这个实际上就是 Face Recognition with OpenCV的翻译)可以参考这个博客对FaceRecognizer 有一个了解http://blog.csdn.net/u013088062/article/details/38588185 这个博客对人脸的训练解释的很好,具体怎么训练可以阅读这个博客。
正 文
1首先了解做人脸识别的步骤
数据收集和预处理、训练模型、人脸识别三个部分
- 数据收集和预处理
(1)下载数据集
本次用的数据集是opencv给出的教程里面的第一个数据集:The AT&T Facedatabase。又称ORL人脸数据库,40个人,每人10张照片。照片在不同时间、不同光照、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集。所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有有轻微旋转)。
可以用imread()函数读出pgm看看各图效果。
(2)准备识别人脸的数据集
拍照程序
#include <opencv2\opencv.hpp>
#include <vector>
#include <iostream>
#include<stdio.h>
//#include <stdio.h>
//#include <cv.h>
using namespace std;
using namespace cv;
int main()
{
CascadeClassifier cascada;
cascada.load("haarcascade_frontalface_alt2.xml");
VideoCapture cap(0);
Mat frame, myFace;
int pic_num = 1;
while (1) {
//摄像头读图像
cap >> frame;
vector<Rect> faces;//vector容器存检测到的faces
Mat frame_gray;
cvtColor(frame, frame_gray, COLOR_BGR2GRAY);//转灰度化,减少运算
cascada.detectMultiScale(frame_gray, faces, 1.1, 4, CV_HAAR_DO_ROUGH_SEARCH, Size(70, 70), Size(1000, 1000));
printf("检测到人脸个数:%d\n", faces.size());
//1.f