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/71159013
這一節是模型訓練,這個模型訓練要做的功能就是調用Opencv生成一個XML文件,這個XML文件記錄了每組的人臉的特征(本程序是10張圖一個人,每一個人有唯一固定的編號)
功能如下,在點擊功能再點擊訓練模型后會在此程序根目錄下生成如下xml文件。
下面來看代碼,如何實現這一功能:
void AddPeople::TrainingModel() {//讀取你的CSV文件路徑.//string fn_csv = string(argv[1]);std::string fn_csv = "./Data/at.txt";// 2個容器來存放圖像數據和對應的標簽std::vector<cv::Mat> images;std::vector<int> labels;// 讀取數據. 如果文件不合法就會出錯// 輸入的文件名已經有了.try{read_csv(fn_csv, images, labels);}catch (cv::Exception& e){std::cerr << "Error opening file \"" << fn_csv << "\". Reason: " << e.msg << endl;// 文件有問題,我們啥也做不了了,退出了return;}// 如果沒有讀取到足夠圖片,也退出.if (images.size() <= 1) {std::string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!";CV_Error(CV_StsError, error_message);}// 下面的幾行代碼僅僅是從你的數據集中移除最后一張圖片//[gm:自然這里需要根據自己的需要修改,他這里簡化了很多問題]cv::Mat testSample = images[images.size() - 1]; // int testLabel = labels[labels.size() - 1];images.pop_back();labels.pop_back();cv::Ptr<cv::FaceRecognizer> model = cv::createEigenFaceRecognizer();model->train(images, labels);model->save("MyFacePCAModel.xml");int predictedLabel = -1;double confidence = 0.0;model->predict(testSample, predictedLabel, confidence);qDebug()<<confidence; } 其實就是調用了createEigenFaceRecognizer(),就實現了在第一節中,所說的理論,然后在train就能訓練出xml文件。
下一節將說明人臉識別。
源碼和理論部分在本博文開頭有提供。
總結
以上是生活随笔為你收集整理的Qt5.7+Opencv2.4.9人脸识别(四)模型训练的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C++ OpenCV图像的阈值操作
- 下一篇: MySQL入门之备份与恢复