leonard
leonard

Reputation: 31

OpenCV 3.0 svm always predicts 0 (java)

I'm new to opencv's svm's. I tried a sample classifier but it only returns 0 as the predicted label. I even used the value 5 for training as well as the prediction.

I've been changing the values for about a hundred times but i just don't get what's wrong. I'm using OpenCV 3.0 with Java. Here's my code:

    Mat labels = new Mat(new Size(1,4),CvType.CV_32SC1);
    labels.put(0, 0, 1);
    labels.put(1, 0, 1);
    labels.put(2, 0, 1);
    labels.put(3, 0, 0);

    Mat data = new Mat(new Size(1,4),CvType.CV_32FC1);
    data.put(0, 0, 5);
    data.put(1, 0, 2);
    data.put(2, 0, 3);
    data.put(3, 0, 8);

    Mat testSamples = new Mat(new Size(1,1),CvType.CV_32FC1);
    testSamples.put(0,0,5);

    SVM svm = SVM.create();
    TermCriteria criteria = new TermCriteria(TermCriteria.EPS + TermCriteria.MAX_ITER,100,0.1);
    svm.setKernel(SVM.LINEAR);
    svm.setType(SVM.C_SVC);
    svm.setGamma(0.5);
    svm.setNu(0.5);
    svm.setC(1);
    svm.setTermCriteria(criteria);

    //data is N x 64 trained data Mat , labels is N x 1 label Mat with integer values;
    svm.train(data, Ml.ROW_SAMPLE, labels);

    Mat results = new Mat();
    int predictedClass = (int) svm.predict(testSamples, results, 0);

Even if i change the lables to 1 and 2, I still get 0.0 as a response. So something has to be absolutely wrong... I just don't know what to do. Please help! :)

Upvotes: 3

Views: 1114

Answers (1)

Kevin Bai
Kevin Bai

Reputation: 631

I had a similar problem in C++. I'm not too sure if it's the same in Java but in C++ the predictions were saved in the results Matrix instead of returned as a float.

Upvotes: 1

Related Questions