3天密集学习 快速带你晋级
阅读全文
>
本系列人脸识别文章用的是opencv2,最新版的opencv3.2的代码请参考文章:
OpenCV之识别自己的脸——C++源码放送(请在上一篇文章末尾查看)
在之前《OpenCV人脸识别之一:数据收集和预处理》和《OpenCV人脸识别之二:模型训练》两篇博客中,已经把人脸识别的整个流程全部交代清楚了。包括今天这篇人脸识别方面的内容都已经在上述第二篇博客中的代码中有所体现。只是今天的内容会让结果更加的形象化。仅此而已。可以说,本篇的内容是前面诸多内容的一个整合。所以今天的内容也很简洁。
1、打开摄像头。
2、加载人脸检测器,加载人脸模型。
3、人脸检测
4、把检测到的人脸与人脸模型里面的对比,找出这是谁的脸。
5、如果人脸是自己的,显示自己的名字。
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
VideoCapture cap(0);
//打开默认摄像头
if (!cap.isOpened())
{
return -1;
}
Mat frame;
Mat edges;
Mat gray;
CascadeClassifier cascade;
bool stop = false;
//训练好的文件名称,放置在可执行文件同目录下 cascade.load("haarcascade_frontalface_alt.xml");
Ptr<FaceRecognizer> modelPCA = createEigenFaceRecognizer();
modelPCA->load("MyFacePCAModel.xml");
while (!stop)
{
cap >> frame;
//建立用于存放人脸的向量容器
vector<Rect> faces(0);
cvtColor(frame, gray, CV_BGR2GRAY);
//改变图像大小,使用双线性差值
//resize(gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR);
//变换后的图像进行直方图均值化处理
equalizeHist(gray, gray);
cascade.detectMultiScale(gray, faces,
1.1, 2, 0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
| CV_HAAR_SCALE_IMAGE,
Size(30, 30));
Mat face;
Point text_lb;
for (size_t i = 0; i < faces.size(); i++)
{
if (faces[i].height > 0 && faces[i].width > 0)
{
face = gray(faces[i]);
text_lb = Point(faces[i].x, faces[i].y);
rectangle(frame, faces[i], Scalar(255, 0, 0), 1, 8, 0);
}
}
Mat face_test;
int predictPCA = 0;
if (face.rows >= 120)
{
resize(face, face_test, Size(92, 112));
}
//Mat face_test_gray;
//cvtColor(face_test, face_test_gray, CV_BGR2GRAY);
if (!face_test.empty())
{
//测试图像应该是灰度图
predictPCA = modelPCA->predict(face_test);
}
cout << predictPCA << endl;
if (predictPCA == 40)
{
string name = "LiuXiaoLong";
putText(frame, name, text_lb, FONT_HERSHEY_COMPLEX, 1, Scalar(0, 0, 255));
}
imshow("face", frame);
if (waitKey(50) >= 0)
stop = true;
}
return 0;
}
效果图:

原文链接:http://www.jianshu.com/p/0514c03e6727
作者公众号CVPy,专注于分享OpenCV和Python的实战内容,欢迎关注。
查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:
www.leadai.org
请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看
TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

点击“阅读原文”直接打开【北京站 | GPU CUDA 进阶课程】报名链接
本系列博客介绍使用OpenCV2进行人脸识别,包括数据收集、预处理、模型训练等步骤。本文将整合前面的内容,通过打开摄像头,加载人脸检测器和模型,实时检测并识别出人脸,特别是当检测到的是作者自己的脸时,会在屏幕上显示作者的名字。
1万+

被折叠的 条评论
为什么被折叠?



