Ejemplo n.º 1
0
void getHistomPlusColoFeatures(const Mat& image, Mat& features) {
  // TODO
  Mat feature1, feature2;
  getHistogramFeatures(image, feature1);
  getColorFeatures(image, feature2);
  hconcat(feature1.reshape(1, 1), feature2.reshape(1, 1), features);
}
Ejemplo n.º 2
0
cv::Ptr<cv::ml::TrainData> SvmTrain::tdata() {
    this->prepare();

    cv::Mat samples;
    std::vector<int> responses;

    for (auto f : train_file_list_) {
        auto image = cv::imread(f.file);
        if (!image.data) {
            fprintf(stdout, ">> Invalid image: %s  ignore.\n", f.file.c_str());
            continue;
        }
        cv::Mat feature;
        getHistogramFeatures(image, feature);
        feature = feature.reshape(1, 1);

        samples.push_back(feature);
        responses.push_back(int(f.label));
    }

    cv::Mat samples_, responses_;
    samples.convertTo(samples_, CV_32FC1);
    cv::Mat(responses).copyTo(responses_);

    return cv::ml::TrainData::create(samples_, cv::ml::SampleTypes::ROW_SAMPLE,
                                     responses_);
}
Ejemplo n.º 3
0
int PlateJudge::plateJudge(const Mat &inMat, int &result) {
  Mat features;
  getHistogramFeatures(inMat, features);

  float response = svm_->predict(features);
  result = (int) response;

  return 0;
}
Ejemplo n.º 4
0
void SvmTrain::test() {
    // 1.4 bug fix: old 1.4 ver there is no null judge
    if (NULL == svm_)
        svm_ = cv::ml::SVM::load<cv::ml::SVM>(svm_xml_);

    if (test_file_list_.empty()) {
        this->prepare();
    }

    double count_all = test_file_list_.size();
    double ptrue_rtrue = 0;
    double ptrue_rfalse = 0;
    double pfalse_rtrue = 0;
    double pfalse_rfalse = 0;

    for (auto item : test_file_list_) {
        auto image = cv::imread(item.file);
        if (!image.data) {

            std::cout << "no" << std::endl;
            continue;
        }
        cv::Mat feature;
        getHistogramFeatures(image, feature);

        //std::cout << "predict: " << result << std::endl;

        auto predict = int(svm_->predict(feature));
        auto real = item.label;
        if (predict == kForward && real == kForward) ptrue_rtrue++;
        if (predict == kForward && real == kInverse) ptrue_rfalse++;
        if (predict == kInverse && real == kForward) pfalse_rtrue++;
        if (predict == kInverse && real == kInverse) pfalse_rfalse++;
    }

    std::cout << "count_all: " << count_all << std::endl;
    std::cout << "ptrue_rtrue: " << ptrue_rtrue << std::endl;
    std::cout << "ptrue_rfalse: " << ptrue_rfalse << std::endl;
    std::cout << "pfalse_rtrue: " << pfalse_rtrue << std::endl;
    std::cout << "pfalse_rfalse: " << pfalse_rfalse << std::endl;

    double precise = 0;
    if (ptrue_rtrue + ptrue_rfalse != 0) {
        precise = ptrue_rtrue / (ptrue_rtrue + ptrue_rfalse);
        std::cout << "precise: " << precise << std::endl;
    } else {
        std::cout << "precise: "
                  << "NA" << std::endl;
    }

    double recall = 0;
    if (ptrue_rtrue + pfalse_rtrue != 0) {
        recall = ptrue_rtrue / (ptrue_rtrue + pfalse_rtrue);
        std::cout << "recall: " << recall << std::endl;
    } else {
        std::cout << "recall: "
                  << "NA" << std::endl;
    }

    double Fsocre = 0;
    if (precise + recall != 0) {
        Fsocre = 2 * (precise * recall) / (precise + recall);
        std::cout << "Fsocre: " << Fsocre << std::endl;
    } else {
        std::cout << "Fsocre: "
                  << "NA" << std::endl;
    }
}