I'm trying to train SVM with my own images and feed that to the HOGDescriptor in OpenCV.
The training looks to be going well, but when I try to give the model to the HOGDescriptor with the setSVMDetector
function it fails.
Code for training
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);
The error message
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)
I don't know if the libpng warning's have anything to do with it. It's driving me crazy does anybody have an idea?