Qt5.7+Opencv2.4.9人脸识别(五)人脸识别
生活随笔
收集整理的這篇文章主要介紹了
Qt5.7+Opencv2.4.9人脸识别(五)人脸识别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【注意】本博文的檔次適合OpenCV初學者,和要做本科生畢業設計這類檔次。
源碼的下載地址和原理理論部分請走下面連接
http://blog.csdn.net/qq78442761/article/details/71157980
上一節是模型訓練鏈接如下
http://blog.csdn.net/qq78442761/article/details/71159508
當人臉庫中無此人數據時識別結果截圖:
當增加此人數據后運行結果:
識別過程中,人突然跑開,或者人臉精度不大時:
這里我說明下此識別的思路:以標號>=2的人為訓練庫里面的人,當為標號>=2時識別+1,否則-1,一共識別20次,當值為12時,說明識別成功,然后讀取標號對應的人。
代碼如下:
void MainWindow::on_action_FaceRecognition_triggered() {int label=0;addpeople.file.getManLabel();double confidence=0.0;cv::VideoCapture cap(0); //打開默認攝像頭if (!cap.isOpened()){QMessageBox::warning(this,tr("錯誤"),tr("攝像頭打開失敗"),QMessageBox::Ok);return;}cv::Mat frame;cv::Mat gray;cv::CascadeClassifier cascade;bool stop = false;//訓練好的文件名稱,放置在可執行文件同目錄下cascade.load("haarcascade_frontalface_alt.xml");cv::Ptr<cv::FaceRecognizer> modelPCA = cv::createEigenFaceRecognizer();modelPCA->load("MyFacePCAModel.xml");int sl=0;while (!stop){cap >> frame;//建立用于存放人臉的向量容器std::vector<cv::Rect> faces(0);cv::cvtColor(frame, gray, CV_BGR2GRAY);//改變圖像大小,使用雙線性差值//resize(gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR);//變換后的圖像進行直方圖均值化處理cv::equalizeHist(gray, gray);cascade.detectMultiScale(gray, faces,1.1, 2,cv::CASCADE_FIND_BIGGEST_OBJECT|cv::CASCADE_DO_ROUGH_SEARCH,cv::Size(30, 30));cv::Mat face;cv::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 = cv::Point(faces[i].x, faces[i].y);cv::rectangle(frame, faces[i], cv::Scalar(255, 0, 0), 1, 8, 0);}}cv::Mat face_test;int predictPCA = 0;if (face.rows >= 120){cv::resize(face, face_test, cv::Size(92, 112));}//Mat face_test_gray;//cvtColor(face_test, face_test_gray, CV_BGR2GRAY);if (!face_test.empty()){//測試圖-灰度圖int predictedLabel=-1;predictPCA = modelPCA->predict(face_test);modelPCA->predict(face_test,predictedLabel,confidence);qDebug()<<"predictedLabel:"<<predictedLabel;qDebug()<<"confidence:"<<confidence;qDebug()<<"s1:"<<sl;}if(sl>20){if(label<5)QMessageBox::information(this,tr("失敗"),tr("人臉庫無此人"),QMessageBox::Ok);elseQMessageBox::information(this,tr("失敗"),tr("人臉確認度低"),QMessageBox::Ok);return;}if(predictPCA!=-1&&predictPCA!=1&&confidence<3200)label++;if(predictPCA==1||predictPCA==0)label--;qDebug()<<"label:"<<label;cv::waitKey(50);if(label>12){//qDebug()<<predictPCA;//std::string name = "Being recognized";//cv::putText(frame, name, text_lb, cv::FONT_HERSHEY_COMPLEX, 1, cv::Scalar(0, 0, 255));//qDebug()<<"姓名"<<addpeople.file.who[predictPCA];QString name="你是-";name.append(addpeople.file.who[predictPCA]);QMessageBox::information(this,tr("識別成功"),name,QMessageBox::Ok);return;}sl++;imshow("face", frame);if (cv::waitKey(50) >= 0)stop = true;} }
源碼和理論部分在本博文開頭有提供。
總結
以上是生活随笔為你收集整理的Qt5.7+Opencv2.4.9人脸识别(五)人脸识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安全登录代码 php,PHP登录怎么写安
- 下一篇: Qt5.7+Opencv2.4.9人脸识