VS2010+Opencv2.4.4+MFC实现人脸检测与识别
来源:互联网 发布:什么是淘宝关键词 编辑:程序博客网 时间:2024/05/29 12:53
运用Opencv实现人脸的检测和识别是非常方便的,也比较常用。对于人脸检测可以用Opencv自带的分类器实现,而人脸识别需要自建训练分类器,以及收集人脸数据。本文重点讲讲人脸数据的训练以及人脸识别的实现,识别功能的实现也结合了MFC这个基础类库,界面更加美观。
1.人脸数据训练
关于数据的训练以及识别的教程可以参考博客:http://blog.csdn.net/xingchenbingbuyu/article/details/51386949,在这篇博文里作者已经把流程说的很详细了,本文参照这个流程实现了人脸识别。
在人脸模型的训练时,可以通过CSV文件来读取。人脸数据为The AT&TFacedatabase,其中有40个人的人脸数据,每人10张。训练时可加入自己的人脸图片集,编号可记为41。关于人脸的提取可用ROI感兴趣区域分割即可。CSV文件主要保存人脸图片的路径和人脸的标签。例如本文生成的CSV文件at.txt,如图所示:
得到上述at.txt文件后进行数据的训练。训练时用到了Opencv中提供的Facerecognixzer这个类,并且Opencv自带了三个人脸识别的算法:Eigenfaces,Fisherfaces以及局部二值模式直方图(LBPH)。这三个算法训练可得到三个XML文件,具体的训练格式如下:
Ptr<FaceRecognizer> model = createEigenFaceRecognizer();model->train(images, labels); model->save("MyFacePCAModel.xml"); Ptr<FaceRecognizer> model1 = createFisherFaceRecognizer(); model1->train(images, labels); model1->save("MyFaceFisherModel.xml"); Ptr<FaceRecognizer> model2 = createLBPHFaceRecognizer(); model2->train(images, labels); model2->save("MyFaceLBPHModel.xml");具体的完整代码可参考引用的博文,可以实现人脸数据集的训练。
2.人脸的识别
人脸识别的资料比较多了,网上开源的代码也很多,前面引用的博文里有具体的代码,也可以运行实现,这里就不贴了。人脸识别过程中主要用到haarcascade_frontalface_alt.xml这个文件,使用该文件主要实现人脸的检测,框出人脸位置,再使用训练得到的文件(比如本文选用MyFacePCAModel.xml)来预测识别结果。测试的程序一般格式如下:
//建立用于存放人脸的向量容器 vector<Rect> faces(0); cvtColor(frame, gray, CV_BGR2GRAY);//改变图像大小,使用双线性差值 //变换后的图像进行直方图均值化处理 equalizeHist(gray, gray); cascade.detectMultiScale(gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE,Size(30, 30));得到预测的识别结果,参考的博文中直接用modelPCA->predict(face_test),但本文测试得到的识别结果并不理想;
Mat face_test; int predictPCA = 0; if (face.rows >= 120) { resize(face, face_test, Size(92, 112)); } if (!face_test.empty()) { predictPCA = modelPCA->predict(face_test); }后来考虑加入predicted_confidence的阈值判断,发现通过调整该阈值的值可以提高识别的效果。因此本文采用如下格式,并框出人脸附上名字信息:
if (!face_test.empty()) { //测试图像应该是灰度图 modelPCA->predict(face_test,predictedLabel,predicted_confidence); //predictPCA = modelPCA->predict(face_test); } cout << predictPCA << endl; if (predictedLabel == 0)//predictPCA == 40 { string name = "HuFuping"; putText(frame, name, text_lb, FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255)); }具体实现的效果图如下(结合MFC):
关于的MFC的使用与实现本文暂不具体介绍,不是很复杂,谢谢支持~
阅读全文
0 0
- VS2010+Opencv2.4.4+MFC实现人脸检测与识别
- VS2010(MFC)+opencv2.4.9
- 人脸检测与识别
- 人脸检测与识别
- QT+Opencv实现人脸检测与性别识别(1)
- QT+Opencv实现人脸检测与性别识别(2)
- 显示图片,VS2010, MFC, OpenCV2
- python下实现人脸识别(opencv2)
- Python opencv2 人脸识别
- 人脸识别opencv2.4.9
- vs2010与opencv2.2
- Atitti opencv2.4 实现的人脸检测 attilax总结
- 人脸识别原理检测及实现
- 人脸检测与人脸识别
- 人脸检测与识别的站点
- 人脸检测与识别开放api
- Opencv4Android之人脸检测与识别
- 人脸特征,检测与识别
- 19. 用 GTK+ 进行GNOME 编程,用 Qt进行KDE 编程
- Leetcode [Reverse Integer]
- Android <include> 复用优化
- 对几种常见设计模式的理解
- 《java基础与案例开发详解》笔记(二)
- VS2010+Opencv2.4.4+MFC实现人脸检测与识别
- iOS让App后台运行方法小结
- 文件查找函数
- 【Java基础】——集合
- jdk动态代理源码解析
- Java 使用Axis实现WebService实例
- JAVA 桌面程序的外观风格+主题场景 (更新)
- 【Angular2】组件交互异步问题
- 数据结构与算法、Java多线程、Java集合(包括JUC)系统学习推荐博客