예제 #1
0
파일: test.cpp 프로젝트: caomw/EasyPR
int test_plate_judge()
{
	cout << "test_plate_judge" << endl;

	Mat src = imread("image/plate_judge.jpg");

	//可能是车牌的图块集合
	vector<Mat> matVec;

	//经过SVM判断后得到的图块集合
	vector<Mat> resultVec;

	CPlateLocate lo;
	lo.setDebug(1);
	lo.setLifemode(true);

	int resultLo = lo.plateLocate(src, matVec);

	if (0 != resultLo)
		return -1;

	cout << "plate_locate_img" << endl;
	if (resultLo == 0)
	{
		int num = matVec.size();
		for (int j = 0; j < num; j++)
		{
			Mat resultMat = matVec[j];
			imshow("plate_judge", resultMat);
			waitKey(0);
		}
        destroyWindow("plate_judge");
	}

	CPlateJudge ju;
	int resultJu = ju.plateJudge(matVec, resultVec);

	if (0 != resultJu)
		return -1;

	cout << "plate_judge_img" << endl;
	if (resultJu == 0)
	{
		int num = resultVec.size();
		for (int j = 0; j < num; j++)
		{
			Mat resultMat = resultVec[j];
			imshow("plate_judge", resultMat);
			waitKey(0);
		}
        destroyWindow("plate_judge");
	}

	return resultJu;
}
예제 #2
0
// 定位并判断车牌有无,放置在指定位置
void tag_data(const char* source_folder, const char* has_plate_folder,
              const char* no_plate_folder, const char* svm_model) {
  assert(source_folder);
  assert(has_plate_folder);
  assert(no_plate_folder);
  assert(svm_model);

  auto files = Utils::getFiles(source_folder);

  size_t size = files.size();
  if (0 == size) {
    std::cout << "No file found in " << source_folder << std::endl;
    return;
  }

  CPlateLocate locator;
  CPlateJudge judger;

  judger.LoadModel(svm_model);

  for (auto f : files) {
    auto filename = Utils::getFileName(f);
    std::cout << "Tagging: " << f << std::endl;

    // auto plate_string = plate_from_path(f);
    cv::Mat image = cv::imread(f);
    assert(!image.empty());

    std::vector<cv::Mat> maybe_plates;
    locator.plateLocate(image, maybe_plates);

    int plate_index = 0;
    for (auto plate : maybe_plates) {
      char save_to[255] = {0};
      int result = 0;
      judger.plateJudge(plate, result);
      if (result == 1) {
        // it's a plate
        sprintf(save_to, "%s/%s_%d.jpg",
                has_plate_folder, filename.c_str(), plate_index);
        std::cout << "[Y] -> " << save_to << std::endl;
      } else {
        // no plate found
        sprintf(save_to, "%s/%s_%d.jpg",
                no_plate_folder, filename.c_str(), plate_index);
        std::cout << "[N] -> " << save_to << std::endl;
      }
      utils::imwrite(save_to, plate);
      ++plate_index;
    }
  }
}
예제 #3
0
파일: api.hpp 프로젝트: nicklhy/EasyPR
static bool plate_judge(const char* image,const char *model) {
  cv::Mat src = cv::imread(image);

  assert(!src.empty());

  CPlateJudge judger;
  judger.LoadModel(model);

  int result;
  judger.plateJudge(src, result);

  return result == 1;
}
예제 #4
0
파일: BATCHDlg.cpp 프로젝트: Candyf/CPR_MFC
void CBATCHDlg::OnBnClickedButtonJudge()
{
	// TODO:
	CPlateJudge plate;
	plate.setDebug(0);


	for(vector<CString>::size_type v_i = 0; v_i < m_images.size(); ++v_i)
	{	
		string str = m_images[v_i].GetBuffer(0);
		Mat src = imread(str, 1);
		int result = plate.plateJudge(src);
		if (result == 1)
		{
			stringstream ss(stringstream::in | stringstream::out);
			ss << this->m_savepath << "\\" << v_i << "_judge" << ".jpg";
			imwrite(ss.str(), src);
		}
	}
}
예제 #5
0
int plate_judge_main(vector<Mat>& src, vector<Mat>& resultDT){
	cout << "process plate_judge_main...";

	vector<Mat> resultVec;

	CPlateJudge plate;
	int resultJu = plate.plateJudge(src, resultVec);

	if (resultJu == 0)
	{
		int num = resultVec.size();
		for (int j = 0; j < num; j++)
		{
			Mat resultMat = resultVec[j];
			show_dialog(resultMat);
		}
		cout << "OK";
	}

	cout << endl;
	return resultJu;
}