Skip to content

Instantly share code, notes, and snippets.

@prostoiChelovek
Created August 10, 2019 12:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save prostoiChelovek/b80c0070292de590e97f7e711f757ad1 to your computer and use it in GitHub Desktop.
Save prostoiChelovek/b80c0070292de590e97f7e711f757ad1 to your computer and use it in GitHub Desktop.
opencv SMV testing
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <opencv2/face.hpp>
#include <opencv2/ml.hpp>
using namespace std;
using namespace cv;
int main() {
cv::Ptr<cv::ml::SVM> classifier;
classifier = cv::ml::SVM::create();
classifier->setType(cv::ml::SVM::C_SVC);
classifier->setKernel(cv::ml::SVM::LINEAR);
classifier->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, 100, 1e-6));
int labels[4] = { 1, 1, -1, -1 };
float trainingData[4][256] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 17, 12, 18, 22, 25, 21, 19, 11, 15, 5, 7, 6, 3, 6, 5, 14, 48, 177, 261, 135, 51, 24, 21, 12, 12, 19, 12, 8, 4, 10, 11, 9, 12, 7, 9, 5, 7, 10, 18, 22, 22, 49, 34, 7, 4, 4, 4, 3, 2, 1, 4, 2, 7, 3, 3, 4, 3, 5, 4, 9, 5, 2, 2, 3, 6, 2, 2, 9, 6, 5, 2, 7, 7, 14, 29, 34, 34, 56, 54, 99, 139, 160, 466, 237, 230, 232, 247, 222, 184, 267, 285, 399, 420, 416, 432, 323, 425, 422, 313, 424, 471, 960, 2072, 966, 1467, 372, 230, 307, 706, 1096, 945, 2138, 650, 510, 710, 520, 126, 94, 113, 46, 43, 20, 3, 5, 7, 5, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 17, 12, 18, 22, 25, 21, 19, 11, 15, 5, 7, 6, 3, 6, 5, 14, 48, 177, 261, 135, 51, 24, 21, 12, 12, 19, 12, 8, 4, 10, 11, 9, 12, 7, 9, 5, 7, 10, 18, 22, 22, 49, 34, 7, 4, 4, 4, 3, 2, 1, 4, 2, 7, 3, 3, 4, 3, 5, 4, 9, 5, 2, 2, 3, 6, 2, 2, 9, 6, 5, 2, 7, 7, 14, 29, 34, 34, 56, 54, 99, 139, 160, 466, 237, 230, 232, 247, 222, 184, 267, 285, 399, 420, 416, 432, 323, 425, 422, 313, 424, 471, 960, 2072, 966, 1467, 372, 230, 307, 706, 1096, 945, 2138, 650, 510, 710, 520, 126, 94, 113, 46, 43, 20, 3, 5, 7, 5, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1551, 380, 213, 185, 227, 896, 1016, 276, 251, 198, 480, 350, 277, 456, 712, 613, 1670, 896, 1008, 3243, 4083, 2160, 894, 284, 19, 19, 27, 70, 5, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1551, 380, 213, 185, 227, 896, 1016, 276, 251, 198, 480, 350, 277, 456, 712, 613, 1670, 896, 1008, 3243, 4083, 2160, 894, 284, 19, 19, 27, 70, 5, 0, 0, 0, 0, 0, 0, 0}
};
Mat trainingDataMat(4, 256, CV_32F, trainingData);
Mat labelsMat(4, 1, CV_32SC1, labels);
classifier->train(trainingDataMat, ml::ROW_SAMPLE, labelsMat);
// 1
Mat sampleMat1 = (Mat_<float>(1,256) << 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 17, 12, 18, 22, 25, 21, 19, 11, 15, 5, 7, 6, 3, 6, 5, 14, 48, 177, 261, 135, 51, 24, 21, 12, 12, 19, 12, 8, 4, 10, 11, 9, 12, 7, 9, 5, 7, 10, 18, 22, 22, 49, 34, 7, 4, 4, 4, 3, 2, 1, 4, 2, 7, 3, 3, 4, 3, 5, 4, 9, 5, 2, 2, 3, 6, 2, 2, 9, 6, 5, 2, 7, 7, 14, 29, 34, 34, 56, 54, 99, 139, 160, 466, 237, 230, 232, 247, 222, 184, 267, 285, 399, 420, 416, 432, 323, 425, 422, 313, 424, 471, 960, 2072, 966, 1467, 372, 230, 307, 706, 1096, 945, 2138, 650, 510, 710, 520, 126, 94, 113, 46, 43, 20, 3, 5, 7, 5, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0);
float result = classifier->predict(sampleMat1);
cout << result << endl;
// -1
Mat sampleMatNeg = (Mat_<float>(1,256) << 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1551, 380, 213, 185, 227, 896, 1016, 276, 251, 198, 480, 350, 277, 456, 712, 613, 1670, 896, 1008, 3243, 4083, 2160, 894, 284, 19, 19, 27, 70, 5, 0, 0, 0, 0, 0, 0, 0);
float resultNeg = classifier->predict(sampleMatNeg);
cout << resultNeg << endl;
// 1
Mat sampleMatPos = (Mat_<float>(1,256) << 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 17, 12, 18, 22, 25, 21, 19, 11, 15, 5, 7, 6, 3, 6, 5, 14, 48, 177, 261, 135, 51, 24, 21, 12, 12, 19, 12, 8, 4, 10, 11, 9, 12, 7, 9, 5, 7, 10, 18, 22, 22, 49, 34, 7, 4, 4, 4, 3, 2, 1, 4, 2, 7, 3, 3, 4, 3, 5, 4, 9, 5, 2, 2, 3, 6, 2, 2, 9, 6, 5, 2, 7, 7, 14, 29, 34, 34, 56, 54, 99, 139, 160, 466, 237, 230, 232, 247, 222, 184, 267, 285, 399, 420, 416, 432, 323, 425, 422, 313, 424, 471, 960, 2072, 966, 1467, 372, 230, 307, 706, 1096, 945, 2138, 650, 510, 710, 520, 126, 94, 113, 46, 43, 20, 3, 5, 7, 5, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0);
float resultPos = classifier->predict(sampleMatPos);
cout << resultPos << endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment