* fix ann_train test bug, make the result initial to 0 not -1

master v1.6alpha
liuruoze 9 years ago
parent aed577bcb6
commit d070bd7e23

File diff suppressed because it is too large Load Diff

@ -3278,3 +3278,8 @@ Recall:85.1281%, Precise:80.5653%, Fscore:82.7839%.
Recall:85.1281%, Precise:80.5653%, Fscore:82.7839%.
0-error:70.6122%, 1-error:82.8571%, Chinese-precise:86.5306%
总共时间: 152秒, 平均执行时间:0.59375秒
2017-05-07 11:06:01
总图片数:256, Plates count:297, 未定位车牌:23, 检出率:92.2559%
Recall:85.1281%, Precise:80.5653%, Fscore:82.7839%.
0-error:70.6122%, 1-error:82.8571%, Chinese-precise:86.5306%
总共时间: 156秒, 平均执行时间:0.609375秒

@ -10531,3 +10531,248 @@ plate_3_241.jpg:
plate_3_242.jpg:ÍîA85890
plate_3_243.jpg:ÍîA87271
plate_3_244.jpg:ÍîAA3610
plate_3_0.jpg:žŠA88731
plate_3_1.jpg:ÔÁBR75Y3
plate_3_2.jpg:žŠCX8888
plate_3_3.jpg:ÔÁBTT255
plate_3_4.jpg:´¨C28888
plate_3_5.jpg:ÔÁA961F3
plate_3_6.jpg:ŐăA26M71
plate_3_7.jpg:ËŐBGG522
plate_3_8.jpg:ÔÁBW44R6
plate_3_9.jpg:ÍîAH8331
plate_3_10.jpg:ÔÁBZ756T
plate_3_11.jpg:ŐăA50819
plate_3_12.jpg:ÔÁBZ89M9
plate_3_13.jpg:ÔÁAA0825
plate_3_14.jpg:ËŐBU5838
plate_3_15.jpg:ŐăA54614
plate_3_16.jpg:ĎćA11R55
plate_3_17.jpg:ĎćA31Y83
plate_3_18.jpg:žŠH99999
plate_3_19.jpg:ÍîAK169H
plate_3_20.jpg:ÔÁAAA379
plate_3_21.jpg:ÍîAL025S
plate_3_22.jpg:ÔÁCXE592
plate_3_23.jpg:ťŚA51V39
plate_3_24.jpg:ÔÁAAB457
plate_3_25.jpg:ŐăA72220
plate_3_26.jpg:ÍîAS3165
plate_3_27.jpg:ËŐCTF181
plate_3_28.jpg:ŐăA88888
plate_3_29.jpg:ÔÁAAC044
plate_3_30.jpg:ÔÁE9R439
plate_3_31.jpg:ÍîAT789S
plate_3_32.jpg:ťŚAGH092
plate_3_33.jpg:ËŐDLA031
plate_3_34.jpg:ŐăA95044
plate_3_35.jpg:śőCA9622
plate_3_36.jpg:ĎćA3685C
plate_3_37.jpg:ĎćA7GB86
plate_3_38.jpg:ź˝FA3215
plate_3_39.jpg:ĎćAT1203
plate_3_40.jpg:ÔÁ0A2160
plate_3_41.jpg:ÍîATH859
plate_3_42.jpg:ÔÁAAD348
plate_3_43.jpg:ťŚALB022
plate_3_44.jpg:ŐăAA2270
plate_3_45.jpg:´¨A019W2
plate_3_46.jpg:ËŐE2Y256
plate_3_47.jpg:ÔÁ0A9112
plate_3_48.jpg:ťŚAP0910
plate_3_49.jpg:ÍîAUB816
plate_3_50.jpg:´¨A095Q5
plate_3_51.jpg:ŐăAA4586
plate_3_52.jpg:ËŐE75614
plate_3_53.jpg:ÔÁAAF230
plate_3_54.jpg:ŐăAA5547
plate_3_55.jpg:ÔÁ0T9048
plate_3_56.jpg:´¨A09X20
plate_3_57.jpg:ÍîAX688A
plate_3_58.jpg:ËŐEB68W9
plate_3_59.jpg:ĎćA3MA06
plate_3_60.jpg:ĎćAY4936
plate_3_61.jpg:´¨A105LR
plate_3_62.jpg:ÍîBBC666
plate_3_63.jpg:ŐăAC1847
plate_3_64.jpg:ÔÁA883J9
plate_3_65.jpg:ÔÁAB288Y
plate_3_66.jpg:´¨A113YP
plate_3_67.jpg:ÍîEZM618
plate_3_68.jpg:ÔÁSD050L
plate_3_69.jpg:ÔĽK91239
plate_3_70.jpg:ťŚD71603
plate_3_71.jpg:ÍîF71646
plate_3_72.jpg:´¨A561WP
plate_3_73.jpg:ÔĽS33909
plate_3_74.jpg:´¨A572F4
plate_3_75.jpg:ŐăAM690M
plate_3_76.jpg:ĎćA53U19
plate_3_77.jpg:ťŚJ32500
plate_3_78.jpg:ÍîM69311
plate_3_79.jpg:´¨A762ZS
plate_3_80.jpg:´¨A82M83
plate_3_81.jpg:ŐăB7C289
plate_3_82.jpg:ÔÁAF9C00
plate_3_83.jpg:ÍîP77222
plate_3_84.jpg:ÔĽU00000
plate_3_85.jpg:ÔÁTD1291
plate_3_86.jpg:´¨A88888
plate_3_87.jpg:ťŚJS6999
plate_3_88.jpg:ŐăC01701
plate_3_89.jpg:ĎćA5RM87
plate_3_90.jpg:ÍîQ0686ѧ
plate_3_91.jpg:´¨AA662F
plate_3_92.jpg:ÔÁVS1866
plate_3_93.jpg:´¨AE8H60
plate_3_94.jpg:ťŚK62933
plate_3_95.jpg:ÍîQ15538
plate_3_96.jpg:ÔÁAL6212
plate_3_97.jpg:¸ÓA82F36
plate_3_98.jpg:ĎćAB148G
plate_3_99.jpg:ŐăA88888
plate_3_100.jpg:ÍîQ19917
plate_3_101.jpg:´¨AGU052
plate_3_102.jpg:ŐăE6686V
plate_3_103.jpg:ÍîQ80197
plate_3_104.jpg:ĎćA97971
plate_3_105.jpg:ÔÁAV0U41
plate_3_106.jpg:ÍîQA2825
plate_3_107.jpg:´¨AGU801
plate_3_108.jpg:ËŐA0CP56
plate_3_109.jpg:ÔÁB0K999
plate_3_110.jpg:ťŚKT5583
plate_3_111.jpg:ŐăF397C0
plate_3_112.jpg:ÁÉB99999
plate_3_113.jpg:ÔÁB2757B
plate_3_114.jpg:´¨AKM065
plate_3_115.jpg:ŐăF99999
plate_3_116.jpg:ÔÁB2LR57
plate_3_117.jpg:´¨AKQ291
plate_3_118.jpg:ÁÉBG0D80
plate_3_119.jpg:ÔÁB3RS91
plate_3_120.jpg:ÔÁA2HQ34
plate_3_121.jpg:ÁÉBMW005
plate_3_122.jpg:ŐăGZB388
plate_3_123.jpg:ÔÁB4051L
plate_3_124.jpg:´¨AL0Q87
plate_3_125.jpg:˝ňAHP676
plate_3_126.jpg:ź˝DPF690
plate_3_127.jpg:ÁÉC33333
plate_3_128.jpg:ŐăGZJ021
plate_3_129.jpg:ÔÁB577QK
plate_3_130.jpg:ĎćA9NU97
plate_3_131.jpg:ÔÁB450LJ
plate_3_132.jpg:ÁÉPE9218
plate_3_133.jpg:ÔÁA2TS00
plate_3_134.jpg:ÔÁAK595R
plate_3_135.jpg:ŐăJP291Q
plate_3_136.jpg:ÔÁB5PQ23
plate_3_137.jpg:ĂöCPB592
plate_3_138.jpg:˝ňDTG667
plate_3_139.jpg:´¨AR9X49
plate_3_140.jpg:ĂöHB1508
plate_3_141.jpg:ËŐA66U71
plate_3_142.jpg:ÔÁA5DP12
plate_3_143.jpg:ĎćA9YU86
plate_3_144.jpg:ĎćA0PC37
plate_3_145.jpg:´¨AUU093
plate_3_146.jpg:ÔÁB5W601
plate_3_147.jpg:ŐăL11921
plate_3_148.jpg:ÔÁB7VW40
plate_3_149.jpg:´¨AY116F
plate_3_150.jpg:ÔÁA5J512
plate_3_151.jpg:ËŐA6E176
plate_3_152.jpg:˝ňE14579
plate_3_153.jpg:ÔÁB901BF
plate_3_154.jpg:´¨AZ408T
plate_3_155.jpg:ÉÂAD2N68
plate_3_156.jpg:ÔÁB972HL
plate_3_157.jpg:ËŐA75976
plate_3_158.jpg:ÔÁA5PJ05
plate_3_159.jpg:ĎćAA8516
plate_3_160.jpg:ÉÂAE8F80
plate_3_161.jpg:˝ňE22602
plate_3_162.jpg:ÔÁBA9H07
plate_3_163.jpg:ÂłA88888
plate_3_164.jpg:ÂłB995EQ
plate_3_165.jpg:ÔÁBB867A
plate_3_166.jpg:ËŐA85Z95
plate_3_167.jpg:ÔÁA5Q951
plate_3_168.jpg:ÂłBQG527
plate_3_169.jpg:ÂłJRW350
plate_3_170.jpg:ÔÁBDB720
plate_3_171.jpg:ŐăLD1930
plate_3_172.jpg:˝ňE24494
plate_3_173.jpg:˝ňJZ3999
plate_3_174.jpg:ÂłKK5555
plate_3_175.jpg:ÔÁA82349
plate_3_176.jpg:ĎćAED855
plate_3_177.jpg:ÔÁBE24Q7
plate_3_178.jpg:ÂłLD9016
plate_3_179.jpg:ÂłY44748
plate_3_180.jpg:ËŐA9YP07
plate_3_181.jpg:şÚA16341
plate_3_182.jpg:ÓĺB3587ѧ
plate_3_183.jpg:ÔÁA84266
plate_3_184.jpg:ÔÁBK33E3
plate_3_185.jpg:ÔÁBP3T05
plate_3_186.jpg:˝ňE28437
plate_3_187.jpg:˝ňGTL921
plate_3_188.jpg:şÚA1R272
plate_3_189.jpg:ËŐAD6A99
plate_3_190.jpg:ÔÁA89311
plate_3_191.jpg:şÚAB4444
plate_3_192.jpg:ĎćAL8387
plate_3_193.jpg:˝ňG68991
plate_3_194.jpg:˝ňMRW368
plate_3_195.jpg:ÓĺBE7773
plate_3_196.jpg:ÔÁA94372
plate_3_197.jpg:ËŐADW072
plate_3_198.jpg:ĎćAT1Y68
plate_3_199.jpg:˝ňH65817
plate_3_200.jpg:˝ňCT0956
plate_3_201.jpg:ËŐAH0G66
plate_3_202.jpg:ĎćA05H22
plate_3_203.jpg:ËŐAL926V
plate_3_204.jpg:˝ňE24494
plate_3_205.jpg:˝ňJZ3999
plate_3_206.jpg:ĎćAT3597
plate_3_207.jpg:ËŐAP0966
plate_3_208.jpg:ĎćA11R55
plate_3_209.jpg:ĎćA07G31
plate_3_210.jpg:˝ňKNG518
plate_3_211.jpg:ĎćAT8781
plate_3_212.jpg:ËŐAQ5B65
plate_3_213.jpg:˝ňLS2999
plate_3_214.jpg:ĎćA0PC37
plate_3_215.jpg:ĎćAJW532
plate_3_216.jpg:ËŐAVW997
plate_3_217.jpg:ĎćATL269
plate_3_218.jpg:˝ňMJY929
plate_3_219.jpg:ËŐB551QV
plate_3_220.jpg:˝ňMN0888
plate_3_221.jpg:ĎćAYN355
plate_3_222.jpg:ËŐB577CU
plate_3_223.jpg:˝ňNRL118
plate_3_224.jpg:ĎćA2991D
plate_3_225.jpg:ĎćF8ZS83
plate_3_226.jpg:ĎćG60009
plate_3_227.jpg:˝ňRB7992
plate_3_228.jpg:ŐăA03168
plate_3_229.jpg:ŐăA12210
plate_3_230.jpg:ĎćGR0L16
plate_3_231.jpg:ŐăA12903
plate_3_232.jpg:ÍîA09T87
plate_3_233.jpg:ŐăA13840
plate_3_234.jpg:ÍîA1T235
plate_3_235.jpg:ŐăA21027
plate_3_236.jpg:ÍîA22T43
plate_3_237.jpg:ÍîA30123
plate_3_238.jpg:ÍîA45277
plate_3_239.jpg:ÍîA80003
plate_3_240.jpg:ÍîA80375
plate_3_241.jpg:ÍîA85501
plate_3_242.jpg:ÍîA85890
plate_3_243.jpg:ÍîA87271
plate_3_244.jpg:ÍîAA3610

@ -67,7 +67,7 @@ void CharsIdentify::classify(cv::Mat featureRows, std::vector<int>& out_maxIndex
for (int output_index = 0; output_index < rowNum; output_index++) {
Mat output_row = output.row(output_index);
int result = -1;
int result = 0;
float maxVal = -2.f;
bool isChinses = isChineseVec[output_index];
if (!isChinses) {
@ -118,7 +118,7 @@ void CharsIdentify::classify(std::vector<CCharacter>& charVec){
CCharacter& character = charVec[output_index];
Mat output_row = output.row(output_index);
int result = -1;
int result = 0;
float maxVal = -2.f;
std::string label = "";
@ -180,7 +180,7 @@ void CharsIdentify::classifyChineseGray(std::vector<CCharacter>& charVec){
bool isChinese = true;
float maxVal = -2;
int result = -1;
int result = 0;
for (int j = 0; j < kChineseNumber; j++) {
float val = output_row.at<float>(j);
@ -234,7 +234,7 @@ void CharsIdentify::classifyChinese(std::vector<CCharacter>& charVec){
bool isChinese = true;
float maxVal = -2;
int result = -1;
int result = 0;
for (int j = 0; j < kChineseNumber; j++) {
float val = output_row.at<float>(j);
@ -267,7 +267,7 @@ void CharsIdentify::classifyChinese(std::vector<CCharacter>& charVec){
}
int CharsIdentify::classify(cv::Mat f, float& maxVal, bool isChinses, bool isAlphabet){
int result = -1;
int result = 0;
cv::Mat output(1, kCharsTotalNumber, CV_32FC1);
ann_->predict(f, output);
@ -342,7 +342,7 @@ bool CharsIdentify::isCharacter(cv::Mat input, std::string& label, float& maxVal
std::pair<std::string, std::string> CharsIdentify::identifyChinese(cv::Mat input, float& out, bool& isChinese) {
cv::Mat feature = charFeatures(input, kChineseSize);
float maxVal = -2;
int result = -1;
int result = 0;
cv::Mat output(1, kChineseNumber, CV_32FC1);
annChinese_->predict(feature, output);
@ -379,7 +379,7 @@ std::pair<std::string, std::string> CharsIdentify::identifyChineseGray(cv::Mat i
cv::Mat feature;
extractFeature(input, feature);
float maxVal = -2;
int result = -1;
int result = 0;
cv::Mat output(1, kChineseNumber, CV_32FC1);
annGray_->predict(feature, output);

@ -91,7 +91,7 @@ std::pair<std::string, std::string> AnnChTrain::identifyGrayChinese(cv::Mat inpu
Mat feature;
extractFeature(input, feature);
float maxVal = -2;
int result = -1;
int result = 0;
cv::Mat output(1, kChineseNumber, CV_32FC1);
ann_->predict(feature, output);

@ -22,6 +22,7 @@ AnnTrain::AnnTrain(const char* chars_folder, const char* xml)
}
void AnnTrain::train() {
int classNumber = 0;
cv::Mat layers;
@ -93,17 +94,16 @@ void AnnTrain::train() {
ann_->train(traindata);
long end = utils::getTimestamp();
ann_->save(ann_xml_);
test();
std::cout << "Your ANN Model was saved to " << ann_xml_ << std::endl;
std::cout << "Training done. Time elapse: " << (end - start) / (1000 * 60) << "minute"
<< std::endl;
std::cout << "Training done. Time elapse: " << (end - start) / (1000 * 60) << "minute" << std::endl;
}
std::pair<std::string, std::string> AnnTrain::identifyChinese(cv::Mat input) {
cv::Mat feature = charFeatures2(input, kPredictSize);
float maxVal = -2;
int result = -1;
int result = 0;
cv::Mat output(1, kChineseNumber, CV_32FC1);
ann_->predict(feature, output);
@ -129,14 +129,15 @@ std::pair<std::string, std::string> AnnTrain::identifyChinese(cv::Mat input) {
std::pair<std::string, std::string> AnnTrain::identify(cv::Mat input) {
cv::Mat feature = charFeatures2(input, kPredictSize);
float maxVal = -2;
int result = -1;
int result = 0;
//std::cout << feature << std::endl;
cv::Mat output(1, kCharsTotalNumber, CV_32FC1);
ann_->predict(feature, output);
//std::cout << output << std::endl;
for (int j = 0; j < kCharsTotalNumber; j++) {
float val = output.at<float>(j);
// std::cout << "j:" << j << "val:" << val << std::endl;
//std::cout << "j:" << j << "val:" << val << std::endl;
if (val > maxVal) {
maxVal = val;
result = j;
@ -177,6 +178,10 @@ void AnnTrain::test() {
for (auto file : chars_files) {
auto img = cv::imread(file, 0); // a grayscale image
if (!img.data) {
//cout << "Null pointer!" << endl;
continue;
}
std::pair<std::string, std::string> ch;
if (type == 0) ch = identify(img);
@ -186,8 +191,7 @@ void AnnTrain::test() {
++corrects;
++corrects_all;
} else {
error_files.push_back(
std::make_pair(utils::getFileName(file), ch.second));
error_files.push_back(std::make_pair(utils::getFileName(file), ch.second));
}
++sum;
++sum_all;

Loading…
Cancel
Save