i tried to implement the svm and i keep getting this error and i cant find any solution
void run() throws IOException {
File[] trainingSetA = new File("/home/tomna/NetBeansProjects/main/src/main/PostiveTrain").listFiles();
File[] negative = new File("/home/tomna/NetBeansProjects/main/src/main/NegativeTrain").listFiles();
List<File[]> trainingSets = new ArrayList<File[]>();
trainingSets.add(trainingSetA);
trainingSets.add(negative);
int posACount = trainingSetA.length;
int negcount = negative.length;
Mat alabels = new Mat(posACount + negcount, 1, 5, new Scalar(-1));
alabels.rowRange(0, posACount).setTo(new Scalar(1));
Mat[] featuresA = new Mat[posACount];
Mat[] featuresN = new Mat[negcount];
for (File[] set : trainingSets) {
int count = 0;
for (File image : set) {
Mat img = Imgcodecs.imread(image.getAbsolutePath(), 0);
HOGDescriptor descriptor = new HOGDescriptor(new Size(32, 16), new Size(8, 8), new Size(4, 4), new Size(4, 4), 9);
MatOfFloat descriptors = new MatOfFloat();
descriptor.compute(img, descriptors);
if (set.equals(trainingSetA)) {
featuresA[count] = descriptors.t();
}
if (set.equals(negative)) {
featuresN[count] = descriptors.t();
}
count++;
System.out.println(count);
}
}
System.out.println("Adding Features to training matrix");
Mat trainingMatA = new Mat(posACount + negcount, featuresA[0].cols(), featuresA[0].type());
for (int i = 0; i < posACount; i++) {
featuresA[i].copyTo(trainingMatA.rowRange(i, i + 1));
}
for (int i = 0; i < negcount; i++) {
featuresN[i].copyTo(trainingMatA.rowRange(i+posACount,i +posACount+1));
}
System.out.println("Adding Martrix");
System.out.println("training model....");
SVM svm = SVM.create();
svm.setKernel(SVM.LINEAR);
svm.setType(SVM.C_SVC);
svm.setC(10);
svm.train(trainingMatA, Ml.ROW_SAMPLE, alabels);
svm.save("/home/tomna/NetBeansProjects/main/src/main/data.xml");
the error is
OpenCV Error: Bad argument (in the case of classification problem the responses must be categorical; either specify varType when creating TrainData, or pass integer responses) in train