2016-04-01 18 views
0

SVM'yi kendi resimlerimle eğitmeye ve bunu OpenCV'deki HOGDescriptor'a beslemeye çalışıyorum. Eğitim iyi gidiyor gibi görünüyor, ancak modeli setSVMDetector işleviyle HOGDescriptor'a vermeye çalıştığımda başarısız oluyor. EğitimOpenCV 3.1.0 Onaylamadı checkDetectorSize cv :: HOGDescriptor :: setSVMDetector

Mat trainingImages = new Mat(); 
    Mat trainingLables = new Mat(); 

    String personsPath = "C:\INRIAPerson\\INRIAPerson\\96X160H96\\Train\\pos"; 

    for (File file : new File(personsPath).listFiles()) { 
     if(file.isFile()){ 
      Mat img = Imgcodecs.imread(file.getPath()); 
      Mat newImg = new Mat(); 
      Imgproc.cvtColor(img, newImg, Imgproc.COLOR_BGR2GRAY); 
      newImg = newImg.reshape(1,1); 

      trainingImages.push_back(newImg); 
      trainingLables.push_back(Mat.ones(new Size(1,1), CvType.CV_32SC1)); 
     } 
    } 


    String nonPersonsPath = "C:\\NRIAPerson\\INRIAPerson\\train_64x128_H96\\neg"; 
    for (File file : new File(nonPersonsPath).listFiles()) { 
     if(file.isFile()){ 
      Mat img = Imgcodecs.imread(file.getPath()); 
      Mat newImg = new Mat(); 
      Imgproc.cvtColor(img, newImg, Imgproc.COLOR_BGR2GRAY); 

      Imgproc.resize(newImg, newImg, new Size(160 , 96)); 
      newImg = newImg.reshape(1,1); 

      trainingImages.push_back(newImg); 
      trainingLables.push_back(Mat.zeros(new Size(1,1), CvType.CV_32SC1)); 
     } 
    } 

    trainingImages.convertTo(trainingImages, CvType.CV_32FC1); 

    SVM trainer = SVM.create(); 
    trainer.setKernel(SVM.LINEAR); 
    trainer.train(trainingImages, Ml.ROW_SAMPLE, trainingLables); 

    HOGDescriptor hog = new HOGDescriptor(new Size(160, 96), new Size(8,8), new Size(4,4), new Size(4,4), 9); 
    Mat supportVector = trainer.getSupportVectors(); 
    hog.setSVMDetector(supportVector); 

hata mesajı

libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
libpng warning: iCCP: known incorrect sRGB profile 
OpenCV Error: Assertion failed (checkDetectorSize()) in cv::HOGDescriptor::setSVMDetector, file C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\objdetect\src\hog.cpp, line 117 
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\objdetect\src\hog.cpp:117: error: (-215) checkDetectorSize() in function cv::HOGDescriptor::setSVMDetector 
] 
    at org.opencv.objdetect.HOGDescriptor.setSVMDetector_0(Native Method) 
    at org.opencv.objdetect.HOGDescriptor.setSVMDetector(HOGDescriptor.java:302) 
    at feature.extraction.App.main(App.java:86) 

libpng en onunla ilgisi var uyarı eğer bilmiyorum için kod. Bu beni deli ediyor, kimsenin bir fikri var mı?

cevap

1

Bunu çözdüm. Ben görüntülerle eğitim ve ben Önce bir 2d float array oluşturulan supportvector

için -rho ekleyerek unuttum features

  • oldu

    1. yanlış bir çift şeyi yapıyordu. HOGDescriptor sınıfından compute işlevini kullanarak görüntünün özellikleriyle doldurdu. Dizi ile SVM eğitildi. Eğitimden sonra rho'u almak için getDecisionFunction işlevini kullandım ve bunu supportvector'a ekledim.