diff --git a/config/openalpr.conf.in b/config/openalpr.conf.in index 36800f2..43156df 100644 --- a/config/openalpr.conf.in +++ b/config/openalpr.conf.in @@ -59,6 +59,8 @@ postprocess_confidence_skip_level = 80 postprocess_min_characters = 4 postprocess_max_characters = 8 +; Return detailed results for each character +results_character_details = 0 debug_general = 0 debug_timing = 0 diff --git a/src/openalpr/alpr_impl.cpp b/src/openalpr/alpr_impl.cpp index ff83ecb..b07d97b 100644 --- a/src/openalpr/alpr_impl.cpp +++ b/src/openalpr/alpr_impl.cpp @@ -187,8 +187,11 @@ namespace alpr ocr->performOCR(&pipeline_data); ocr->postProcessor.analyze(plateResult.region, topN); - const vector ppResults = ocr->postProcessor.getResults(); + timespec resultsStartTime; + getTimeMonotonic(&resultsStartTime); + + const vector ppResults = ocr->postProcessor.getResults(); int bestPlateIndex = 0; @@ -204,20 +207,22 @@ namespace alpr aplate.overall_confidence = ppResults[pp].totalscore; aplate.matches_template = ppResults[pp].matchesTemplate; - // Grab detailed results for each character - for (unsigned int c_idx = 0; c_idx < ppResults[pp].letter_details.size(); c_idx++) + if (config->resultsCharacterDetails) { - AlprChar character_details; - character_details.character = ppResults[pp].letter_details[c_idx].letter; - character_details.confidence = ppResults[pp].letter_details[c_idx].totalscore; - cv::Rect char_rect = pipeline_data.charRegions[ppResults[pp].letter_details[c_idx].charposition]; - std::vector charpoints = getCharacterPoints(char_rect, &pipeline_data ); - for (int cpt = 0; cpt < 4; cpt++) - character_details.corners[cpt] = charpoints[cpt]; - aplate.character_details.push_back(character_details); + // Grab detailed results for each character + for (unsigned int c_idx = 0; c_idx < ppResults[pp].letter_details.size(); c_idx++) + { + AlprChar character_details; + character_details.character = ppResults[pp].letter_details[c_idx].letter; + character_details.confidence = ppResults[pp].letter_details[c_idx].totalscore; + cv::Rect char_rect = pipeline_data.charRegions[ppResults[pp].letter_details[c_idx].charposition]; + std::vector charpoints = getCharacterPoints(char_rect, &pipeline_data ); + for (int cpt = 0; cpt < 4; cpt++) + character_details.corners[cpt] = charpoints[cpt]; + aplate.character_details.push_back(character_details); + } + plateResult.topNPlates.push_back(aplate); } - plateResult.topNPlates.push_back(aplate); - } if (plateResult.topNPlates.size() > bestPlateIndex) @@ -234,6 +239,10 @@ namespace alpr timespec plateEndTime; getTimeMonotonic(&plateEndTime); plateResult.processing_time_ms = diffclock(platestarttime, plateEndTime); + if (config->debugTiming) + { + cout << "Result Generation Time: " << diffclock(resultsStartTime, plateEndTime) << "ms." << endl; + } if (plateResult.topNPlates.size() > 0) { @@ -252,9 +261,6 @@ namespace alpr } } - - - } // Unwarp plate regions if necessary diff --git a/src/openalpr/config.cpp b/src/openalpr/config.cpp index 008eae6..25a2c5a 100644 --- a/src/openalpr/config.cpp +++ b/src/openalpr/config.cpp @@ -180,6 +180,8 @@ namespace alpr postProcessMinCharacters = getInt(ini, "", "postprocess_min_characters", 100); postProcessMaxCharacters = getInt(ini, "", "postprocess_max_characters", 100); + resultsCharacterDetails = getBoolean(ini,"", "results_character_details", false); + debugGeneral = getBoolean(ini, "", "debug_general", false); debugTiming = getBoolean(ini, "", "debug_timing", false); debugPrewarp = getBoolean(ini, "", "debug_prewarp", false); @@ -329,4 +331,4 @@ namespace alpr string val = string(pszValue); return val; } -} \ No newline at end of file +} diff --git a/src/openalpr/config.h b/src/openalpr/config.h index 11a0eb4..32f55c7 100644 --- a/src/openalpr/config.h +++ b/src/openalpr/config.h @@ -101,10 +101,10 @@ namespace alpr float postProcessMinConfidence; float postProcessConfidenceSkipLevel; - unsigned int postProcessMaxSubstitutions; unsigned int postProcessMinCharacters; unsigned int postProcessMaxCharacters; + unsigned int resultsCharacterDetails; bool debugGeneral; bool debugTiming; @@ -153,4 +153,4 @@ namespace alpr }; } -#endif // OPENALPR_CONFIG_H \ No newline at end of file +#endif // OPENALPR_CONFIG_H