1、首先就是数据的准备,你要从网络上下载一些人脸库,后面用来训练人脸识别模型。人脸检测模型opencv是自带的,但是识别模型需要自己训练。下载人脸库之后需要对人脸进行标记,这是一个繁琐的工作,不过网上有脚本或者自己写个程序简化工作量。
2、把数据标记好之后就是opencv的事情。训练的函数非常简单。只有下面这三句:
Ptr model = createEigenFaceRecognizer();
model->train(images, labels);
model->save("MyFacePCAModelxml");
3、然后打开摄像头进行人脸检测,就是框出人脸的位置。人脸检测模型是opencv自带的。
CascadeClassifier cascade;
cascadeload("haarcascade_frontalface_altxml");
这是加载的方法。
cascadedetectMultiScale(gray, faces,
11, 2, 0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
| CV_HAAR_SCALE_IMAGE,
Size(30, 30));
这是检测的方法。这里检测得到的就是一个一个的人脸的矩形框,然后用画矩形的方法把它们画出来就行了。
4、然后就是对检测到的人脸进行识别了,用我们刚才训练好的人脸模型。加载:
Ptr modelPCA = createEigenFaceRecognizer();
modelPCA->load("MyFacePCAModelxml");
预测:
int predictPCA = 0;
if (facerows >= 120)
{
resize(face, face_test, Size(92, 112));
}
if (!face_testempty())
{
predictPCA = modelPCA->predict(face_test);
}
你不是都已经说清楚流程了 不知道你需要啥帮助的。
yale数据不知道存的是什么特征, pca降维到2维的话,这样的特征空间描述度足以区分不同人脸吗,我没用过,只是单纯的疑问
Fisher分类器没用过,印象中好像和pca,lda也是有一定关系的,好像也是一种映射降维,好像是很简单的一种分类器,这样的分类器的话,效果好吗。(如果以你的2维特征空间来说好像没啥问题。)
如果是二维人脸识别的话,可以考虑先子图分割,然后创建子图权重系数矩,然后子图矩阵取高特征值,或者对矩阵用dct取大特征,用特征值和权重矩生成特征空间。然后用模糊神经网络对数据进行训练 得到识别系统 。 或者也可以用bp+遗传算法, 上学时候用的orl数据库 好像识别率能到90多点。
以上就是关于怎样使用OpenCV进行人脸识别全部的内容,包括:怎样使用OpenCV进行人脸识别、【人脸识别】用pca降维+fisher分类器+yale数据集,用matlab实现、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)