Ask Your Question

sayaandreas's profile - activity

2018-04-27 00:01:13 -0600 received badge  Enthusiast
2018-04-22 04:56:57 -0600 commented answer Error predict using SVM and BOW?

Got it. Thank you for saving my future sir

2018-04-22 04:47:58 -0600 marked best answer Error predict using SVM and BOW?

Im trying to do 3 class classification with 5 samples for each class on android But im getting this error OpenCV Error: Assertion failed (nsamples == 1) in virtual float cv::ml::SVMImpl::predict ?

Here is my code

public ImageDetection(Context mContext) throws IOException {
        context = mContext;
        TermCriteria tc = new TermCriteria(CV_TERMCRIT_ITER, 10, 0.001);
        dictionarySize = 1500;
        int retries = 1;
        bowTrainer = new BOWKMeansTrainer(dictionarySize, tc, retries, KMEANS_PP_CENTERS);

        descriptorMatcher = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED);
        bowImgDescriptorExtractor = new BOWImgDescriptorExtractor(descriptorExtractor, descriptorMatcher);

        trainDescriptor = new MatVector();
        evalDescriptor = new Mat();
        trainLabs = new int[15];
        evalLabs = new int[15];

        initializeSVM();
        collectClassCentroids();
        startClustering();
        evaluate();

    }

    private void initializeSVM() {
        svm.setKernel(SVM.RBF);
        svm.setType(SVM.C_SVC);
        svm.setGamma(0.50625000000000009);
        svm.setC(312.50000000000000);
        svm.setTermCriteria(new TermCriteria(CV_TERMCRIT_ITER, 100, 0.000001));
    }

    private void collectClassCentroids() throws IOException {
        int[][] train = new int[][]{{R.drawable.train1_1, R.drawable.train1_2, R.drawable.train1_3, R.drawable.train1_4, R.drawable.train1_5},
                {R.drawable.train2_1, R.drawable.train2_2, R.drawable.train2_3, R.drawable.train2_4, R.drawable.train2_5},
                {R.drawable.train3_1, R.drawable.train3_2, R.drawable.train3_3, R.drawable.train3_4, R.drawable.train3_5}};

        int counter1 = 0;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 5; j++) {
                Mat src = loadResource(train[i][j]);
                if (!src.empty()) {
                    cvtColor(src,src, CV_RGBA2GRAY);
                    KeyPointVector mKeypoint = new KeyPointVector();
                    featureDetector.detect(src, mKeypoint);
                    Mat mFeatures = new Mat();
                    descriptorExtractor.compute(src, mKeypoint, mFeatures);
                    trainLabs[counter1] = i;
                    counter1++;
                    bowTrainer.add(mFeatures);
                }
            }
        }

    }

    public void startClustering() throws IOException {

        trainDescriptor = bowTrainer.getDescriptors();
        int countRow = 0;
        for (int i = 0; i < trainDescriptor.size(); i++) {
            countRow += trainDescriptor.get(i).rows();
        }

        Mat dictionary = bowTrainer.cluster();
        bowImgDescriptorExtractor.setVocabulary(dictionary);

        trainLabel = new Mat(trainLabs);

        Mat trainingData = new Mat(0, dictionarySize, CV_32FC1);

        KeyPointVector keyPointVector1 = new KeyPointVector();
        Mat bowDescriptor1 = new Mat();

        int[][] train = new int[][]{{R.drawable.train1_1, R.drawable.train1_2, R.drawable.train1_3, R.drawable.train1_4, R.drawable.train1_5},
                {R.drawable.train2_1, R.drawable.train2_2, R.drawable.train2_3, R.drawable.train2_4, R.drawable.train2_5},
                {R.drawable.train3_1, R.drawable.train3_2, R.drawable.train3_3, R.drawable.train3_4, R.drawable.train3_5}};

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 5; j++) {
                Mat src = loadResource(train[i][j]);
                cvtColor(src, src, CV_RGBA2GRAY);
                featureDetector.detect(src, keyPointVector1);
                bowImgDescriptorExtractor.compute(src, keyPointVector1, bowDescriptor1);
                trainingData.push_back(bowDescriptor1);
            }
        }

        System.out.println("Training Data "+trainingData.rows()+","+trainingData.cols());
        System.out.println("Training Label "+trainLabel.rows()+","+trainLabel.cols());
        svm.train(trainingData, ROW_SAMPLE, trainLabel);
    }

    public void evaluate() throws IOException {

        int [] evalLabel = trainLabs;
        Mat groundTruth = new Mat(evalLabel);
        Mat evalData = new Mat(0,dictionarySize,CV_32FC1);
        KeyPointVector keyPointVectorEval = new KeyPointVector();
        Mat bowDescriptor = new Mat();

        Mat results = new Mat(0,1,CV_32FC1);

        int[][] eval = new int[][]{{R.drawable.train1_1, R.drawable.train1_2, R.drawable.train1_3, R.drawable.train1_4, R.drawable.train1_5},
                {R.drawable.train2_1, R.drawable.train2_2, R.drawable.train2_3, R.drawable.train2_4, R.drawable.train2_5},
                {R.drawable.train3_1, R.drawable.train3_2, R.drawable.train3_3, R.drawable.train3_4, R.drawable.train3_5}};

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j <5 ; j++) {
                Mat rImg = loadResource(eval[i][j]);
                cvtColor(rImg, rImg, CV_RGBA2GRAY ...
(more)
2018-04-22 04:47:58 -0600 received badge  Scholar (source)
2018-04-22 04:44:53 -0600 commented answer Error predict using SVM and BOW?

thank sir its work. can you give me some sugestions to improve the accuracy? the prediction is pretty bad right now.

2018-04-22 04:43:27 -0600 commented answer Error predict using SVM and BOW?

can you give me some sugestions to improve the accuracy sir? the prediction is pretty bad

2018-04-22 04:37:33 -0600 commented question Error predict using SVM and BOW?

Yes sir im using javacv and javacpp preset for opencv

2018-04-22 03:55:59 -0600 received badge  Editor (source)
2018-04-22 03:55:59 -0600 edited question Error predict using SVM and BOW?

Error predict using SVM and BOW? Im trying to do 3 class classification with 5 samples for each class on android But im

2018-04-22 03:43:46 -0600 asked a question Error predict using SVM and BOW?

Error predict using SVM and BOW? Im trying to do 3 class classification with 5 samples for each class on android But im