0
我必須創建在OpenCV的面的SVM檢測。我想分開火車和預測的過程。因此,我想要找到一種方法來存儲在我的硬盤CvSVM SVM對象中,以便每當我想再次使用無需訓練的新模型時訪問它。通過這種方式,我可以通過從硬盤加載SVM對象來使用預測方法。這在Matlab中是非常直接的,但是我怎樣才能在opencv C++中成功呢?存儲在硬盤中的CvSVM對象
使用加載和保存功能,以便加載和保存SVM模型它導致munmap_chunk()::無效的指針信息(檢測到的glibc)消息。
CvSVM SVM = detect.SVMtrain("dbpath/");
SVM.save("svmTrain.xml", 0);
cout <<"Detection system in progress progress...\n";
string pathFile = databasePath+ imageFilename;
vector<float> confidence;
detections = detect.detection(pathFile);
CvSVM SVM;
SVM.load("svmTrain.xml",0);
confidence = detect.SVMpredict(detections.at(0), SVM);
//cout << "confidence is: " << confidence.at(0) << endl;
當我運行上面的代碼時,我收到了上述消息。問題在於svmpredict函數。和SVM預測功能:
vector<float> Detection::SVMpredict(Mat image, CvSVM SVM){
vector<float> res;
//Mat image = imread(fileName,0); //Read as a gray image
//cvtColor(sampleMat, sampleMat, CV_BGR2GRAY);
image = eigenfacesExtraction(image);
image.convertTo(image, CV_32FC1); // <-- Convert to CV_32F for matrix mult
float response = SVM.predict(image); res.push_back(response);
float val = SVM.predict(image,true); res.push_back(val);
cout << "svm result: "<< response <<" val: "<< val << endl;
return res;
}
所以保存和載入它可能喜歡這個SVM.load(「.. .XML」); //保存 –
這是想法,是的。或.yaml IIRC。 – MSalters
當我的svmpredict計算我得到一個在glibc之後使用負載檢測mun_map_chunk()無效指針: –