
在之前的两个OpenCV练习博客中(人脸识别和数据预处理以及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;
}
效果图:

---------------------------------------------------
更新: opencv3版本的代码已更改opencv 人脸检测,请参阅较新的博客提示.
---------------------------------------------------
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-148043-1.html
包括军舰
今天用了十几个小时就没电了
看做事一种反社会行为呢