Перейти к содержимому
Compvision.ru

kurenchuksergey

Пользователи
  • Количество публикаций

    2
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем kurenchuksergey


  1. Здравствуйте, пытался обучить SVM hog дескрипторами. Но в момент установки svm модели , выбрасывает исключение

    Находил похожие вопросы на answer opencv (Вопрос), от туда выяснил, как добавлять rho и автор советовал перейти на float массив

    попытался, но ситуация не изменилась 

    Код обучения (свой картинки, 28*28)

    (Ошибок не возникает, файл создается )

    HOGDescriptor hog = new HOGDescriptor(new Size(28,28),new Size(8,8),new Size(4,4),new Size(4,4),9);
      Mat trainingLabels = new Mat();
      MatOfFloat temp = new MatOfFloat();
      File negativeDir = new File("/home/kurenchuksergey/HogSignTrainingData/negative");
      File positiveDir = new File("/home/kurenchuksergey/HogSignTrainingData/positive");
      int i = -1;
      float[][] hogdescriptor = new float[13992][]; //13992 - image count
      for(File file:negativeDir.listFiles()){
                  Mat con = Imgcodecs.imread(file.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
                  hog.compute(con, temp);
                  trainingLabels.push_back(Mat.zeros(new Size(1,1),CvType.CV_32S));
      }  
      for(File file:negativeDir.listFiles()){
            Mat con = Imgcodecs.imread(file.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
            hog.compute(con, temp);
            hogdescriptor[++i] = temp.toArray();
            trainingLabels.push_back(Mat.ones(new Size(1,1),CvType.CV_32S));
        }
    
    
        Mat Labels = new Mat();
        trainingLabels.copyTo(Labels);
        Labels.convertTo(Labels,CvType.CV_32S);
    
        Mat mat  = new Mat(hogdescriptor.length,hogdescriptor[0].length,CvType.CV_32FC1);
        for(int j = 0;j<hogdescriptor.length;j++)
            mat.put(i,0,hogdescriptor[i]);
    
    
    
        TrainData trainDataHog = TrainData.create(mat,Ml.ROW_SAMPLE,Labels);
    
        SVM svm = SVM.create();
        svm.setType(SVM.C_SVC);
        svm.setKernel(SVM.RBF);
        svm.setDegree(0.1);
        // 1.4 bug fix: old 1.4 ver gamma is 1
        svm.setGamma(0.1);
        svm.setCoef0(0.1);
        svm.setC(1);
        svm.setNu(0.1);
        svm.setP(0.1);
        svm.setTermCriteria(new TermCriteria(1, 20000, 0.0001));
        svm.train(trainDataHog.getSamples(),Ml.ROW_SAMPLE,trainDataHog.getResponses());
        svm.save("SVMHog");

    Далее пытаюсь воспользоваться моделью (Test.java)

    SVM svm1 = SVM.load("SVMHog");
     HOGDescriptor hog = new HOGDescriptor(new Size(28,28),new Size(8,8),new Size(4,4),new Size(4,4),9);
     Double rho = svm1.getDecisionFunction(0,new Mat(),new Mat());
     int size = (int)(svm1.getSupportVectors().total() + 1) * svm1.getSupportVectors().channels();
     float[] temp = new float[size];
     svm1.getSupportVectors().get(0, 0, temp);
     temp[temp.length - 1] = (float)-rho;
     MatOfFloat vector = new MatOfFloat(temp);
     hog.setSVMDetector(vector);

    И получаю исключение (47 - строка - hog.setSVMDetector(vector); )

    OpenCV Error: Assertion failed (checkDetectorSize()) in setSVMDetector, file /home/kurenchuksergey/opencv/modules/objdetect/src/hog.cpp, line 117
    Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: /home/kurenchuksergey/opencv/modules/objdetect/src/hog.cpp:117: error: (-215) checkDetectorSize() in function 
    setSVMDetector
    ]
    at org.opencv.objdetect.HOGDescriptor.setSVMDetector_0(Native Method)
    at org.opencv.objdetect.HOGDescriptor.setSVMDetector(HOGDescriptor.java:306)
    at com.company.Test.main(Test.java:47)

     

×