資源簡介
在vs2010+opencv2.4.9運行環境,通過特征臉、PCA、LBPH三種方法分別訓練生成了三個分類器,有訓練源代碼(加詳細注釋)和含有400張92*112人臉的數據庫!
代碼片段和文件信息
//#include?“stdafx.h“??
#include???
#include???
#include???
#include???
#include???
??
using?namespace?cv;??
using?namespace?std;??
?
static?Mat?norm_0_255(InputArray?_src)?{??
???Mat?src?=?_src.getMat();??
????//?創建和返回一個歸一化后的圖像矩陣:??
????Mat?dst;??
????switch?(src.channels())?{??
????case1:??
????????cv::normalize(_src?dst?0?255?NORM_MINMAX?CV_8UC1);??
???????break;??
????case3:??
???????cv::normalize(_src?dst?0?255?NORM_MINMAX?CV_8UC3);??
????????break;??
????default:??
????????src.copyTo(dst);??
??????break;??
????}??
???return?dst;??
}??
//使用CSV文件去讀圖像和標簽,主要使用stringstream和getline方法??
static?void?read_csv(const?string&?filename?vector&?images?vector&?labels?char?separator?=?‘;‘)?{??
????std::ifstream?file(filename.c_str()?ifstream::in);??
????if?(!file)?{??
????????string?error_message?=?“No?valid?input?file?was?given?please?check?the?given?filename.“;??
????????CV_Error(CV_StsBadArg?error_message);??
????}??
????string?line?path?classlabel;??
???while?(getline(file?line))?{??
????????stringstream?liness(line);??
????????getline(liness?path?separator);??
???????getline(liness?classlabel);??
????????if?(!path.empty()?&&?!classlabel.empty())?{??
???????????images.push_back(imread(path?0));??
???????????labels.push_back(atoi(classlabel.c_str()));??
????????}??
???}??
}??
??
?
int?main()???
{??
??
???//讀取你的CSV文件路徑.??
????//string?fn_csv?=?string(argv[1]);??
???string?fn_csv?=?“at.txt“;??
?
???//?2個容器來存放圖像數據和對應的標簽??
???vector?images;??
????vector?labels;??
???//?讀取數據.?如果文件不合法就會出錯??
???//?輸入的文件名已經有了.??
????try??
??{??
????????read_csv(fn_csv?images?labels);??
????}??
????catch?(cv::Exception&?e)??
????{??
????????cerr?<“Error?opening?file?\““?<???????//?文件有問題,我們啥也做不了了,退出了??
????????exit(1);??
???}??
????//?如果沒有讀取到足夠圖片,也退出.??
????if?(images.size()?<=?1)?{??
???????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:自然這里需要根據自己的需要修改,他這里簡化了很多問題]??
????Mat?testSample?=?images[images.size()?-?1];??
????int?testLabel?=?labels[labels.size()?-?1];??
????images.pop_back();??
??labels.pop_back();??
????//?下面幾行創建了一個特征臉模型用于人臉識別,??
???//?通過CSV文件讀取的圖像和標簽訓練它。??
????//?T這里是一個完整的PCA變換??
????//如果你只想保留10個主成分,使用如下代碼??
????//??????cv::createEigenFaceRecognizer(10);??
????//??
???//?如果你還希望使用置信度閾值來初始化,使用以下語句:??
???//??????cv::createEigenFaceRecognizer(10?123.0);??
???//??
????//?如果你使用所有特征并且使用一個閾值,使用以下語句:??
???//??????cv::createEigenFaceRecognizer(0?123.0);??
?????
????Ptr?model?=?createEigenFaceRecognizer();??
??//Ptr?model?=?createEigenFaceRecognizer();?
????model->train(images?labels);??
????model->save(“MyFacePCAModel.xml“);??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????125440??2018-03-22?10:22??訓練模型\Debug\訓練模型.exe
?????文件?????815336??2018-03-22?10:22??訓練模型\Debug\訓練模型.ilk
?????文件????1608704??2018-03-22?10:22??訓練模型\Debug\訓練模型.pdb
?????文件???57671680??2018-05-30?23:41??訓練模型\ipch\訓練模型-f1021360\訓練模型-96bc5428.ipch
?????文件??????15039??2018-03-15?20:16??訓練模型\訓練模型\at.txt
?????文件????????690??2018-03-22?10:22??訓練模型\訓練模型\Debug\cl.command.1.tlog
?????文件??????18564??2018-03-22?10:22??訓練模型\訓練模型\Debug\CL.read.1.tlog
?????文件????????396??2018-03-22?10:22??訓練模型\訓練模型\Debug\CL.write.1.tlog
?????文件??????????2??2018-03-22?10:22??訓練模型\訓練模型\Debug\li
?????文件??????????2??2018-03-22?10:22??訓練模型\訓練模型\Debug\li
?????文件??????????2??2018-03-22?10:22??訓練模型\訓練模型\Debug\li
?????文件??????????2??2018-03-22?10:22??訓練模型\訓練模型\Debug\li
?????文件??????????2??2018-03-22?10:22??訓練模型\訓練模型\Debug\li
?????文件??????????2??2018-03-22?10:22??訓練模型\訓練模型\Debug\li
?????文件???????3198??2018-03-22?10:22??訓練模型\訓練模型\Debug\li
?????文件???????9984??2018-03-22?10:22??訓練模型\訓練模型\Debug\li
?????文件????????858??2018-03-22?10:22??訓練模型\訓練模型\Debug\li
?????文件?????424217??2018-03-22?10:22??訓練模型\訓練模型\Debug\mian.obj
?????文件????????390??2018-03-22?10:22??訓練模型\訓練模型\Debug\mt.command.1.tlog
?????文件????????450??2018-03-22?10:22??訓練模型\訓練模型\Debug\mt.read.1.tlog
?????文件????????346??2018-03-22?10:22??訓練模型\訓練模型\Debug\mt.write.1.tlog
?????文件????????542??2018-03-22?10:22??訓練模型\訓練模型\Debug\rc.command.1.tlog
?????文件????????422??2018-03-22?10:22??訓練模型\訓練模型\Debug\rc.read.1.tlog
?????文件????????326??2018-03-22?10:22??訓練模型\訓練模型\Debug\rc.write.1.tlog
?????文件?????478208??2018-03-22?10:22??訓練模型\訓練模型\Debug\vc100.idb
?????文件?????978944??2018-03-22?10:22??訓練模型\訓練模型\Debug\vc100.pdb
?????文件???????2604??2018-03-22?10:21??訓練模型\訓練模型\Debug\訓練模型.Build.CppClean.log
?????文件????????406??2018-03-22?10:22??訓練模型\訓練模型\Debug\訓練模型.exe.em
?????文件????????472??2018-03-22?10:22??訓練模型\訓練模型\Debug\訓練模型.exe.em
?????文件????????381??2018-03-22?10:22??訓練模型\訓練模型\Debug\訓練模型.exe.intermediate.manifest
............此處省略465個文件信息
評論
共有 條評論