我正在做一个基于opencv和SVM(支持向量机)的项目。在那里为了识别用户显示的手势,我需要使用SVM进行分类。我已将svm.cpp和svm.h文件添加到我的项目中,下面是我的预测部分代码。
svm_node x[featureVectorSize];
// inside a loop
for(int k;0 < featureVectorSize; k++)
{
x[k].index = k+1;
x[k].value = FeatureVectorVal[k]; // i have a vector to store feature values for test data //(without scaling)
}
svm_model* newmodel = svm_load_model("Mymodels\\A.scale.model");
double *ProbVal = new double[1];
double result = svm_predict_probability(newmodel,x,ProbVal);
cout<<"result "<< result<<"\n";
cout<<"ProbVal "<< *ProbVal<<"\n";
svm_free_model_content(newmodel);
svm_free_and_destroy_model(&newmodel);
//some code to show output
Q1。当我用模型A进行分类时,它总是给出匹配的结果值为-1。这意味着不匹配测试数据。之后,我已经对测试数据的缩放功能值进行了硬编码(将FeatureVectorVal写入文本文件并使用由libsvm软件包提供的scale.exe进行缩放)。然后我用相同的模型做了预测。现在它给了我+1的结果。这意味着我必须将缩放的测试数据输入到svm_node结构。但在svm.cpp中我找不到任何缩放测试数据的功能。如何使用svm.cpp函数扩展我的测试数据?
Q2。当我使用多个模型进行预测时(使用模型文件路径数组),程序在使用第一个模型进行预测后崩溃并提示我;
if ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && model->probA!=NULL && model->probB!=NULL)
在pvm.cpp文件中行。
需要帮助的人......提前谢谢: - )