From 075472a948e533e9493e97564fe054c0a3298475 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Sat, 2 Jul 2016 09:01:27 -0400 Subject: [PATCH] Parameterized min_confidence and skip_level --- src/openalpr/ocr/tesseract_ocr.cpp | 2 ++ src/openalpr/postprocess/postprocess.cpp | 22 ++++++++++++++-------- src/openalpr/postprocess/postprocess.h | 5 +++++ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/openalpr/ocr/tesseract_ocr.cpp b/src/openalpr/ocr/tesseract_ocr.cpp index 204560a..c773142 100644 --- a/src/openalpr/ocr/tesseract_ocr.cpp +++ b/src/openalpr/ocr/tesseract_ocr.cpp @@ -18,6 +18,7 @@ */ #include "tesseract_ocr.h" +#include "config.h" using namespace std; using namespace cv; @@ -31,6 +32,7 @@ namespace alpr { const string MINIMUM_TESSERACT_VERSION = "3.03"; + this->postProcessor.setConfidenceThreshold(config->postProcessMinConfidence, config->postProcessConfidenceSkipLevel); if (cmpVersion(tesseract.Version(), MINIMUM_TESSERACT_VERSION.c_str()) < 0) { diff --git a/src/openalpr/postprocess/postprocess.cpp b/src/openalpr/postprocess/postprocess.cpp index 878891f..89b8b5b 100644 --- a/src/openalpr/postprocess/postprocess.cpp +++ b/src/openalpr/postprocess/postprocess.cpp @@ -28,6 +28,9 @@ namespace alpr { this->config = config; + this->min_confidence = 0; + this->skip_level = 0; + stringstream filename; filename << config->getPostProcessRuntimeDir() << "/" << config->country << ".patterns"; @@ -53,9 +56,6 @@ namespace alpr } } - //vector test = rules["base"]; - //for (int i = 0; i < test.size(); i++) - // cout << "Rule: " << test[i].regex << endl; } PostProcess::~PostProcess() @@ -71,17 +71,23 @@ namespace alpr } } } + + void PostProcess::setConfidenceThreshold(float min_confidence, float skip_level) { + this->min_confidence = min_confidence; + this->skip_level = skip_level; + } + void PostProcess::addLetter(string letter, int line_index, int charposition, float score) { - if (score < config->postProcessMinConfidence) + if (score < min_confidence) return; insertLetter(letter, line_index, charposition, score); - if (score < config->postProcessConfidenceSkipLevel) + if (score < skip_level) { - float adjustedScore = abs(config->postProcessConfidenceSkipLevel - score) + config->postProcessMinConfidence; + float adjustedScore = abs(skip_level - score) + min_confidence; insertLetter(SKIP_CHAR, line_index, charposition, adjustedScore ); } @@ -93,7 +99,7 @@ namespace alpr void PostProcess::insertLetter(string letter, int line_index, int charposition, float score) { - score = score - config->postProcessMinConfidence; + score = score - min_confidence; int existingIndex = -1; if (letters.size() < charposition + 1) @@ -260,7 +266,7 @@ namespace alpr { if (letters[i].size() > 0) { - totalScore += (letters[i][0].totalscore / letters[i][0].occurrences) + config->postProcessMinConfidence; + totalScore += (letters[i][0].totalscore / letters[i][0].occurrences) + min_confidence; numScores++; } } diff --git a/src/openalpr/postprocess/postprocess.h b/src/openalpr/postprocess/postprocess.h index d6a6bb2..27c83ae 100644 --- a/src/openalpr/postprocess/postprocess.h +++ b/src/openalpr/postprocess/postprocess.h @@ -77,6 +77,8 @@ namespace alpr std::vector getPatterns(); + void setConfidenceThreshold(float min_confidence, float skip_level); + private: Config* config; @@ -94,6 +96,9 @@ namespace alpr std::vector allPossibilities; std::set allPossibilitiesLetters; + + float min_confidence; + float skip_level; }; }