iOS OpenCV 3.0 SVM保存/加载问题

时间:2015-05-08 11:33:57

标签: opencv3.0 ios8.3

我无法将训练有素的SVM保存到xml文件中。这是我的错误:

OpenCV错误:read_params中的解析错误(缺少无效的SVM类型),文件/Users/build/test/opencv/modules/ml/src/svm.cpp,第2050行 libc ++ abi.dylib:以cv类型的未捕获异常终止::异常:/Users/build/test/opencv/modules/ml/src/svm.cpp:2050:错误:(-212)缺少无效的SVM类型在函数read_params

我该怎么做......

- (void)saveSVM {
    string oFileName = "NormParameters.xml";
    svm->save(oFileName);
}

- (BOOL)loadSVM {
    string oFileName = "NormParameters.xml";
    svm = StatModel::load<SVM>(oFileName);
    NSLog(@"COUNT: %d", svm->getVarCount());
    if (svm->getVarCount() > 0) {
        return YES;
    }
    return NO;
}

如果我得到一个新样本,每次都会保存SVM。训练的SVM的加载发生在initWithParams()中。

- (id)initWithParams {
    self = [super init];
    if (self) {
        // create and set SVM parameters
        SVM::Params param = SVM::Params();

        param.svmType = SVM::EPS_SVR; // Support Vector Regression. The distance between feature vectors from the training set and the fitting hyper-plane must be less than p. For outliers the penalty multiplier C is used.
        param.kernelType = SVM::RBF; //Polynomial kernel
        param.degree = 3.0; // for poly
        param.gamma = 1.0; // for poly/rbf/sigmoid
        param.coef0 = 0.0; // for poly/sigmoid

        param.C = 256.0; // for CV_SVM_C_SVC, CV_SVM_EPS_SVR and CV_SVM_NU_SVR
        param.nu = 0.1; // for CV_SVM_NU_SVC, CV_SVM_ONE_CLASS, and CV_SVM_NU_SVR
        param.p = 0.00390625; // for CV_SVM_EPS_SVR

        param.classWeights = NULL; // for CV_SVM_C_SVC
        param.termCrit.type =  CV_TERMCRIT_EPS | CV_TERMCRIT_ITER; // CV_TERMCRIT_EPS + CV_TERMCRIT_ITER
        param.termCrit.maxCount = 1000;
        param.termCrit.epsilon = 0.00390625; //1e-6;

        // create SVM
        svm = SVM::create(param);
        // load svm
        [self loadSVM];

        // create trained data
        trainedDataMat = [[MLDataMatrix alloc] init];
        [trainedDataMat removeDataRow];
    }
    return self;
}

我是OpenCV的新手可能是我设置了错误的参数(我玩过所有这些参数)或者StatModel :: load不能在iOS 8.3上工作吗? 如果您知道另一种将SVM保存到文件的方法,请告诉我... 谢谢你的每一个答案!

0 个答案:

没有答案