diff --git a/src/main.cpp b/src/main.cpp index e8047db..6d9ca2a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -36,6 +36,7 @@ const std::string MAIN_WINDOW_NAME = "ALPR main window"; const bool SAVE_LAST_VIDEO_STILL = false; const std::string LAST_VIDEO_STILL_LOCATION = "/tmp/laststill.jpg"; +std::string getJson(Alpr* alpr, std::vector results); /** Function Headers */ bool detectandshow(Alpr* alpr, cv::Mat frame, std::string region, bool writeJson); @@ -273,9 +274,16 @@ bool detectandshow( Alpr* alpr, cv::Mat frame, std::string region, bool writeJso std::vector results = alpr->recognize(buffer); + timespec endTime; + getTime(&endTime); + double totalProcessingTime = diffclock(startTime, endTime); + if (measureProcessingTime) + std::cout << "Total Time to process image: " << totalProcessingTime << "ms." << std::endl; + + if (writeJson) { - std::cout << alpr->toJson(results) << std::endl; + std::cout << alpr->toJson(results, totalProcessingTime) << std::endl; } else { @@ -290,10 +298,8 @@ bool detectandshow( Alpr* alpr, cv::Mat frame, std::string region, bool writeJso } } - timespec endTime; - getTime(&endTime); - if (measureProcessingTime) - std::cout << "Total Time to process image: " << diffclock(startTime, endTime) << "ms." << std::endl; + return results.size() > 0; } + diff --git a/src/openalpr/alpr.cpp b/src/openalpr/alpr.cpp index 72aec82..42a4aca 100644 --- a/src/openalpr/alpr.cpp +++ b/src/openalpr/alpr.cpp @@ -46,9 +46,9 @@ std::vector Alpr::recognize(std::vector imageBuffer) return impl->recognize(img); } -string Alpr::toJson(const vector< AlprResult > results) +string Alpr::toJson(const vector< AlprResult > results, double processing_time_ms) { - return impl->toJson(results); + return impl->toJson(results, processing_time_ms); } void Alpr::setDetectRegion(bool detectRegion) diff --git a/src/openalpr/alpr.h b/src/openalpr/alpr.h index 364a4c1..ef98290 100644 --- a/src/openalpr/alpr.h +++ b/src/openalpr/alpr.h @@ -73,7 +73,7 @@ class Alpr std::vector recognize(std::string filepath); std::vector recognize(std::vector imageBuffer); - std::string toJson(const std::vector results); + std::string toJson(const std::vector results, double processing_time_ms = -1); bool isLoaded(); diff --git a/src/openalpr/alpr_impl.cpp b/src/openalpr/alpr_impl.cpp index 21e4695..e67a9db 100644 --- a/src/openalpr/alpr_impl.cpp +++ b/src/openalpr/alpr_impl.cpp @@ -276,19 +276,28 @@ void plateAnalysisThread(void* arg) cout << "Thread: " << tthread::this_thread::get_id() << " Complete" << endl; } -string AlprImpl::toJson(const vector< AlprResult > results) +string AlprImpl::toJson(const vector< AlprResult > results, double processing_time_ms) { - cJSON *root = cJSON_CreateArray(); + cJSON *root, *jsonResults; + root = cJSON_CreateObject(); + cJSON_AddNumberToObject(root,"epoch_time", getEpochTime() ); + if (processing_time_ms >= 0) + { + cJSON_AddNumberToObject(root,"processing_time_ms", processing_time_ms ); + } + + cJSON_AddItemToObject(root, "results", jsonResults=cJSON_CreateArray()); for (int i = 0; i < results.size(); i++) { cJSON *resultObj = createJsonObj( &results[i] ); - cJSON_AddItemToArray(root, resultObj); + cJSON_AddItemToArray(jsonResults, resultObj); } // Print the JSON object to a string and return char *out; out=cJSON_PrintUnformatted(root); + cJSON_Delete(root); string response(out); @@ -306,7 +315,6 @@ cJSON* AlprImpl::createJsonObj(const AlprResult* result) root=cJSON_CreateObject(); cJSON_AddStringToObject(root,"plate", result->bestPlate.characters.c_str()); - cJSON_AddNumberToObject(root,"epoch_time", getEpochTime() ); cJSON_AddNumberToObject(root,"confidence", result->bestPlate.overall_confidence); cJSON_AddNumberToObject(root,"matches_template", result->bestPlate.matches_template); diff --git a/src/openalpr/alpr_impl.h b/src/openalpr/alpr_impl.h index da805f1..9adefba 100644 --- a/src/openalpr/alpr_impl.h +++ b/src/openalpr/alpr_impl.h @@ -62,7 +62,7 @@ class AlprImpl void setTopN(int topn); void setDefaultRegion(string region); - std::string toJson(const vector results); + std::string toJson(const vector results, double processing_time_ms = -1); static std::string getVersion(); Config* config;