Fix Issue5.

1.3
Micooz 10 years ago
parent bdaae0b59b
commit a85f7f2315

@ -0,0 +1,34 @@
cmake_minimum_required(VERSION 2.6)
project (EasyPR)
list(APPEND CMAKE_CXX_FLAGS "-std=c++0x")
find_package(OpenCV REQUIRED)
aux_source_directory(./src SOURCE_FILES)
set(SOURCE_FILES
src/main.cpp
src/core/chars_identify.cpp
src/core/chars_recognise.cpp
src/core/chars_segment.cpp
src/core/features.cpp
src/core/plate_detect.cpp
src/core/plate_judge.cpp
src/core/plate_locate.cpp
src/core/plate_recognize.cpp
src/test/accuracy_test.cpp
src/test/test.cpp
src/train/ann_train.cpp
src/train/svm_train.cpp
src/util/deface.cpp
src/util/general_test_prepare.cpp
src/util/generate_gdts.cpp
src/util/learn_prepare.cpp
src/util/mc_data_prepare.cpp
src/util/util.cpp
)
add_executable(EasyPR ${SOURCE_FILES})
target_link_libraries(EasyPR ${OpenCV_LIBS})

@ -12,16 +12,17 @@ namespace easypr{
void learn2HasPlate(float bound = 0.7)
{
char * filePath = "train/data/plate_detect_svm/learn/HasPlate";
const char * filePath = "train/data/plate_detect_svm/learn/HasPlate";
vector<string> files;
////获取该路径下的所有文件
getFiles(filePath, files );
int size = files.size();
if (0 == size)
cout << "No File Found in learn HasPlate!" << endl;
if (0 == size) {
cout << "File not found in " << filePath << endl;
return;
}
////随机选取70%作为训练数据30%作为测试数据
srand(unsigned(time(NULL)));
random_shuffle(files.begin(), files.end());
@ -58,15 +59,16 @@ void learn2HasPlate(float bound = 0.7)
void learn2NoPlate(float bound = 0.7)
{
char * filePath = "train/data/plate_detect_svm/learn/NoPlate";
const char * filePath = "train/data/plate_detect_svm/learn/NoPlate";
vector<string> files;
////获取该路径下的所有文件
getFiles(filePath, files );
int size = files.size();
if (0 == size)
cout << "No File Found in learn NoPlate!" << endl;
if (0 == size) {
cout << "File not found in " << filePath << endl;
return;
}
////随机选取70%作为训练数据30%作为测试数据
srand(unsigned(time(NULL)));
random_shuffle(files.begin(), files.end());
@ -104,16 +106,17 @@ void getHasPlateTrain(Mat& trainingImages, vector<int>& trainingLabels,
svmCallback getFeatures = getHisteqFeatures)
{
int label = 1;
char * filePath = "train/data/plate_detect_svm/train/HasPlate";
const char * filePath = "train/data/plate_detect_svm/train/HasPlate";
vector<string> files;
////获取该路径下的所有文件
getFiles(filePath, files );
int size = files.size();
if (0 == size)
cout << "No File Found in train HasPlate!" << endl;
if (0 == size) {
cout << "File not found in " << filePath << endl;
return;
}
cout << "get HasPlate train!" << endl;
for (int i = 0; i < size; i++)
{
@ -135,16 +138,17 @@ void getNoPlateTrain(Mat& trainingImages, vector<int>& trainingLabels,
svmCallback getFeatures = getHisteqFeatures)
{
int label = 0;
char * filePath = "train/data/plate_detect_svm/train/NoPlate";
const char * filePath = "train/data/plate_detect_svm/train/NoPlate";
vector<string> files;
////获取该路径下的所有文件
getFiles(filePath, files );
int size = files.size();
if (0 == size)
cout << "No File Found in train HasPlate!" << endl;
if (0 == size) {
cout << "File not found in " << filePath << endl;
return;
}
cout << "get NoPlate train!" << endl;
for (int i = 0; i < size; i++)
{
@ -164,16 +168,17 @@ void getNoPlateTrain(Mat& trainingImages, vector<int>& trainingLabels,
void getHasPlateTest(vector<Mat>& testingImages, vector<int>& testingLabels)
{
int label = 1;
char * filePath = "train/data/plate_detect_svm/test/HasPlate";
const char * filePath = "train/data/plate_detect_svm/test/HasPlate";
vector<string> files;
////获取该路径下的所有文件
getFiles(filePath, files );
int size = files.size();
if (0 == size)
cout << "No File Found in test HasPlate!" << endl;
if (0 == size) {
cout << "File not found in " << filePath << endl;
return;
}
cout << "get HasPlate test!" << endl;
for (int i = 0; i < size; i++)
{
@ -188,16 +193,17 @@ void getHasPlateTest(vector<Mat>& testingImages, vector<int>& testingLabels)
void getNoPlateTest(vector<Mat>& testingImages, vector<int>& testingLabels)
{
int label = 0;
char * filePath = "train/data/plate_detect_svm/test/NoPlate";
const char * filePath = "train/data/plate_detect_svm/test/NoPlate";
vector<string> files;
////获取该路径下的所有文件
getFiles(filePath, files );
int size = files.size();
if (0 == size)
cout << "No File Found in test NoPlate!" << endl;
if (0 == size) {
cout << "File not found in " << filePath << endl;
return;
}
cout << "get NoPlate test!" << endl;
for (int i = 0; i < size; i++)
{
@ -331,7 +337,6 @@ int svmTrain(bool dividePrepared = true, bool trainPrepared = true,
}
//Test SVM
Mat testingclasses_real;
vector<Mat> testingImages;
vector<int> testingLabels_real;
@ -341,7 +346,7 @@ int svmTrain(bool dividePrepared = true, bool trainPrepared = true,
getNoPlateTest(testingImages, testingLabels_real);
CvSVM svm;
if (trainPrepared == false)
if (trainPrepared == false && !classes.empty() && !trainingData.empty())
{
CvSVMParams SVM_params;
SVM_params.svm_type = CvSVM::C_SVC;
@ -357,16 +362,20 @@ int svmTrain(bool dividePrepared = true, bool trainPrepared = true,
//Train SVM
cout << "Begin to generate svm" << endl;
//CvSVM svm(trainingData, classes, Mat(), Mat(), SVM_params);
svm.train_auto(trainingData, classes, Mat(), Mat(), SVM_params, 10,
CvSVM::get_default_grid(CvSVM::C),
CvSVM::get_default_grid(CvSVM::GAMMA),
CvSVM::get_default_grid(CvSVM::P),
CvSVM::get_default_grid(CvSVM::NU),
CvSVM::get_default_grid(CvSVM::COEF),
CvSVM::get_default_grid(CvSVM::DEGREE),
true);
try {
//CvSVM svm(trainingData, classes, Mat(), Mat(), SVM_params);
svm.train_auto(trainingData, classes, Mat(), Mat(), SVM_params, 10,
CvSVM::get_default_grid(CvSVM::C),
CvSVM::get_default_grid(CvSVM::GAMMA),
CvSVM::get_default_grid(CvSVM::P),
CvSVM::get_default_grid(CvSVM::NU),
CvSVM::get_default_grid(CvSVM::COEF),
CvSVM::get_default_grid(CvSVM::DEGREE),
true);
} catch (const Exception &err) {
cout << err.what() << endl;
}
cout << "Svm generate done!" << endl;
@ -375,8 +384,13 @@ int svmTrain(bool dividePrepared = true, bool trainPrepared = true,
}
else
{
string path = "train/svm.xml";
svm.load(path.c_str(), "svm");
try {
string path = "train/svm.xml";
svm.load(path.c_str(), "svm");
} catch (const Exception &err) {
cout << err.what() << endl;
return 0; //next predict requires svm
}
}
cout << "Begin to predict" << endl;
@ -453,4 +467,4 @@ int svmTrain(bool dividePrepared = true, bool trainPrepared = true,
return 0;
}
} /*! \namespace easypr*/
} /*! \namespace easypr*/

@ -31,11 +31,11 @@ void label_data()
CPlateJudge ju;
int size = files.size();
//int size = 200;
if (0 == size)
cout << "No File Found in notlabelPath!" << endl;
if (0 == size) {
cout << "File not found in " << notlabelPath << endl;
return;
}
cout << "Automatic label all the data!" << endl;
for (int i = 0; i < size; i++)

@ -190,16 +190,17 @@ void getPlateLicense(const string& filepath, string& plateLicense)
//! MC将rawdata截取部分数据到learndata中
void getLearnData()
{
char * filePath = "F:/data/easypr-data/rawdata";
const char * filePath = "F:/data/easypr-data/rawdata";
////获取该路径下的所有文件
vector<string> files;
getFiles(filePath, files );
int size = files.size();
if (0 == size)
cout << "No File Found in rawdata!" << endl;
if (0 == size) {
cout << "File not found in " << filePath << endl;
return;
}
////随机排列rawdata
srand(unsigned(time(NULL)));
random_shuffle(files.begin(), files.end());
@ -207,7 +208,7 @@ void getLearnData()
////选取前LEARANDATA_COUNT个rawdata数据作为learndata
int boundry = LEARANDATA_COUNT;
int count = 0;
cout << "Save learndata!" << endl;
cout << "Learndata saved!" << endl;
for (int i = 0; i < size; i++)
{
cout << files[i].c_str() << endl;
@ -273,4 +274,4 @@ void changeFileName()
}
}
}
}

Loading…
Cancel
Save