gpt4 book ai didi

c++ - 在硬盘中存储一个 CvSVM 对象

转载 作者:行者123 更新时间:2023-11-28 07:08:09 24 4
gpt4 key购买 nike

我已经在 opencv 中为人脸创建了一个 SVM 检测器。我想分开训练和预测的过程。因此,我想找到一种方法将 CvSVM SVM 对象存储在我的硬盘中,以便在我不需要再次训练新模型的情况下随时访问它。这样,我可以通过从硬盘加载 SVM 对象来使用预测方法。这在 Matlab 中非常简单,但我怎样才能在 opencv c++ 中成功呢?

使用加载和保存函数加载和保存 SVM 模型会导致 munmap_chunk()::invalid pointer message(glibc detected) 消息。

    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 函数。和 SVMpredict 函数:

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;

}

最佳答案

也很简单。这是一个 CvStatModel,因此它带有 saveload 方法。

关于c++ - 在硬盘中存储一个 CvSVM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21451721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com