本系列人臉識(shí)別文章用的是opencv2琴许,最新版的opencv3.2的代碼請(qǐng)參考文章:
OpenCV之識(shí)別自己的臉——C++源碼放送
在之前OpenCV人臉識(shí)別之一:數(shù)據(jù)收集和預(yù)處理和OpenCV人臉識(shí)別之二:模型訓(xùn)練兩篇博客中粹湃,已經(jīng)把人臉識(shí)別的整個(gè)流程全部交代清楚了。包括今天這篇人臉識(shí)別方面的內(nèi)容都已經(jīng)在上述第二篇博客中的代碼中有所體現(xiàn)步氏。只是今天的內(nèi)容會(huì)讓結(jié)果更加的形象化。僅此而已∮虢铮可以說(shuō),本篇的內(nèi)容是前面諸多內(nèi)容的一個(gè)整合荚恶。所以今天的內(nèi)容也很簡(jiǎn)潔撩穿。
簡(jiǎn)單說(shuō)下流程:
- 打開攝像頭。
- 加載人臉檢測(cè)器谒撼,加載人臉模型食寡。
- 人臉檢測(cè)
- 把檢測(cè)到的人臉與人臉模型里面的對(duì)比,找出這是誰(shuí)的臉嗤栓。
- 如果人臉是自己的冻河,顯示自己的名字。
代碼:
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
VideoCapture cap(0); //打開默認(rèn)攝像頭
if (!cap.isOpened())
{
return -1;
}
Mat frame;
Mat edges;
Mat gray;
CascadeClassifier cascade;
bool stop = false;
//訓(xùn)練好的文件名稱茉帅,放置在可執(zhí)行文件同目錄下
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);
//變換后的圖像進(jìn)行直方圖均值化處理
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())
{
//測(cè)試圖像應(yīng)該是灰度圖
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;
}
效果圖:
公眾號(hào)CVPy,分享OpenCV和Python的實(shí)戰(zhàn)內(nèi)容堪澎。每一篇都會(huì)放出完整的代碼擂错。歡迎關(guān)注。
公眾號(hào)CVPy