Trainiere SVM und speichere es mit OpenCV 3.0

Ich verwende Visual Studio 2010 mit OpenCV 3.0. Ich versuche, eine SVM zu trainieren und in einer Datei zu speichern, habe jedoch Probleme.

Mein Zweck ist es, die HOG-Funktionen einiger Bilder zu extrahieren und eine SVM mit ihnen zu trainieren. Alles scheint in Ordnung zu sein, aber wenn ich versuche, das Modell in einer XML-Datei zu speichern, erhalte ich den folgenden Fehler:

Unbehandelte Ausnahme in 0x000007fefd9bb16d (KernelBase.dll) in TrainSVM.exe: Ausnahme in MICROSOFT C ++: cv :: Ausnahme am Speicherort 0x0026e1b0.

Und dann wird dies in der Konsole angezeigt:

OpenCV-Fehler: Analysefehler (SVM-Modelldaten sind ungültig, überprüfen Sie sv_count, var_ * und class_count-Tags) in cv :: ml :: SVMImpl :: write, Datei C: \ builds \ master_PackSlave-w in64-vc12-shared \ opencv \ modules \ ml \ src \ svm.cpp, Zeile 2027

Der Fehler scheint zu erscheinen, wenn die SVM nicht richtig trainiert wurde, aber ich verstehe nicht, wo ich gescheitert bin, weil die Zeile

svm-> train (auxResult)

hat "true" als Ergebnis.

Ich habe die Bilder überprüft und sie sind richtig geladen, könnte mir jemand helfen?

Danke im Voraus

Hier ist der Code:

    String imagesPathPos = "Positivas/*.jpg"; // it has filters, too !
    vector<String> fp;
    glob(imagesPathPos, fp); 
    int tamaño = fp.size();

    std::vector<cv::Point> positions;
    positions.push_back(cv::Point(0,0));
    std::vector<float> descriptor;
    Ptr<TrainData> auxResult;

    for (size_t i=0; i<fp.size(); ++i)
    {
        string nameFile = fp[i];
        Mat img = imread(fp[i]);     
        cv::Mat grayImg;
        cvtColor( img, grayImg, COLOR_BGR2GRAY );           

        hog.compute(grayImg,descriptor,winStride,trainingPadding,positions);

        Mat auxDescriptor = cv::Mat(descriptor);
        Mat descriptorMat(1,auxDescriptor.rows,CV_32FC1);
        transpose(auxDescriptor, descriptorMat);
        trainingData.push_back(descriptorMat);          
        trainingLabels.push_back(labelPositive);        
    }

    String imagesPathNeg = "Negativas/*.jpg";
    vector<String> fn;
    glob(imagesPathNeg, fn, true); 
    for (size_t i=0; i<fn.size(); i++)
    {
        Mat img = imread(fn[i]);
        cv::Mat grayImg;
        cvtColor( img, grayImg, COLOR_BGR2GRAY );
        hog.compute(grayImg,descriptor,Size(),Size(),positions);

        Mat auxDescriptor = cv::Mat(descriptor);
        Mat descriptorMat(1,auxDescriptor.rows,CV_32FC1);
        transpose(auxDescriptor, descriptorMat);
        trainingData.push_back(descriptorMat);
        trainingLabels.push_back(labelPositive);
    }

    auxResult = TrainData::create(trainingData, type, trainingLabels);

    svm->train(auxResult);

    svm->save("output.xml");

Antworten auf die Frage(2)

Ihre Antwort auf die Frage