From 35f829e365db7654c76cc8ceec682aba93351a38 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Fri, 20 Jun 2014 22:34:47 -0400 Subject: [PATCH] Updated alpr_impl to support detector benchmark --- src/openalpr/alpr_impl.cpp | 29 ++++++++++++++++++++--------- src/openalpr/alpr_impl.h | 6 ++++++ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/openalpr/alpr_impl.cpp b/src/openalpr/alpr_impl.cpp index 3e1884f..2aa42e6 100644 --- a/src/openalpr/alpr_impl.cpp +++ b/src/openalpr/alpr_impl.cpp @@ -66,12 +66,12 @@ bool AlprImpl::isLoaded() return config->loaded; } - -std::vector AlprImpl::recognize(cv::Mat img) +AlprFullDetails AlprImpl::recognizeFullDetails(cv::Mat img) { timespec startTime; getTime(&startTime); + AlprFullDetails response; if (!img.data) { @@ -80,11 +80,16 @@ std::vector AlprImpl::recognize(cv::Mat img) std::cerr << "Invalid image" << std::endl; vector emptyVector; - return emptyVector; + response.results = emptyVector; + + vector emptyVector2; + response.plateRegions = emptyVector2; + + return response; } // Find all the candidate regions - vector plateRegions = plateDetector->detect(img); + response.plateRegions = plateDetector->detect(img); // Get the number of threads specified and make sure the value is sane (cannot be greater than CPU cores or less than 1) int numThreads = config->multithreading_cores; @@ -94,7 +99,7 @@ std::vector AlprImpl::recognize(cv::Mat img) numThreads = 1; - PlateDispatcher dispatcher(plateRegions, &img, + PlateDispatcher dispatcher(response.plateRegions, &img, config, stateIdentifier, ocr, topN, detectRegion, defaultRegion); @@ -123,9 +128,9 @@ std::vector AlprImpl::recognize(cv::Mat img) if (config->debugGeneral && config->debugShowImages) { - for (int i = 0; i < plateRegions.size(); i++) + for (int i = 0; i < response.plateRegions.size(); i++) { - rectangle(img, plateRegions[i].rect, Scalar(0, 0, 255), 2); + rectangle(img, response.plateRegions[i].rect, Scalar(0, 0, 255), 2); } for (int i = 0; i < dispatcher.getRecognitionResults().size(); i++) @@ -146,7 +151,7 @@ std::vector AlprImpl::recognize(cv::Mat img) } - vector results = dispatcher.getRecognitionResults(); + response.results = dispatcher.getRecognitionResults(); if (config->debugPauseOnFrame) { @@ -155,7 +160,13 @@ std::vector AlprImpl::recognize(cv::Mat img) {} } - return results; + return response; +} + +std::vector AlprImpl::recognize(cv::Mat img) +{ + AlprFullDetails fullDetails = recognizeFullDetails(img); + return fullDetails.results; } void plateAnalysisThread(void* arg) diff --git a/src/openalpr/alpr_impl.h b/src/openalpr/alpr_impl.h index 4d8d02c..64f8a7b 100644 --- a/src/openalpr/alpr_impl.h +++ b/src/openalpr/alpr_impl.h @@ -48,6 +48,11 @@ #define ALPR_NULL_PTR 0 +struct AlprFullDetails +{ + std::vector plateRegions; + std::vector results; +}; class AlprImpl { @@ -56,6 +61,7 @@ class AlprImpl AlprImpl(const std::string country, const std::string configFile = "", const std::string runtimeDir = ""); virtual ~AlprImpl(); + AlprFullDetails recognizeFullDetails(cv::Mat img); std::vector recognize(cv::Mat img); void applyRegionTemplate(AlprResult* result, std::string region);