diff --git a/DLLUsageDemo/DLLUsageDemo.cpp b/DLLUsageDemo/DLLUsageDemo.cpp index ed2a79a..5c0fb05 100644 --- a/DLLUsageDemo/DLLUsageDemo.cpp +++ b/DLLUsageDemo/DLLUsageDemo.cpp @@ -37,8 +37,8 @@ int main() auto results = uns::EasyOCR_CPP::FullAuto(img); for (const auto& [index, info] : results) { - const auto& [text, conf] = info; - std::cout << "Box " << index << ": \"" << uns::EOCR_SupportTools::WtoA(text) << "\" Confidence=" << conf << "\n"; + const auto& [text, conf, rect] = info; + printf("Result %d: Text = {%s}, Box = [%d, %d, %d, %d], Confidence = %.3f\n", (int)index, uns::EOCR_SupportTools::WtoA(text).c_str(), rect.tl().x, rect.tl().y, rect.br().x, rect.br().y, conf); } uns::EasyOCR_CPP::CleanupOCR(); diff --git a/DLLUsageDemo/LibEasyOCR-CPP.h b/DLLUsageDemo/LibEasyOCR-CPP.h index 61b5714..ca935a3 100644 --- a/DLLUsageDemo/LibEasyOCR-CPP.h +++ b/DLLUsageDemo/LibEasyOCR-CPP.h @@ -32,8 +32,9 @@ namespace uns EN_CH }; - using EOCR_Result = std::pair; - using EOCR_ResultSet = std::map; + using EOCR_Result = std::tuple; + using EOCR_Result_Single = std::tuple; + using EOCR_ResultSet = std::map; using EOCRD_Rects = std::vector>; } diff --git a/DLLUsageDemo/LibEasyOCR-CPP.lib b/DLLUsageDemo/LibEasyOCR-CPP.lib index a49b799..400cb3d 100644 Binary files a/DLLUsageDemo/LibEasyOCR-CPP.lib and b/DLLUsageDemo/LibEasyOCR-CPP.lib differ diff --git a/DLLUsageDemo/LibEasyOCR-CPPd.lib b/DLLUsageDemo/LibEasyOCR-CPPd.lib index 4a198d3..cccd622 100644 Binary files a/DLLUsageDemo/LibEasyOCR-CPPd.lib and b/DLLUsageDemo/LibEasyOCR-CPPd.lib differ diff --git a/EasyOCR-CPP/EasyOCR-CPP.cpp b/EasyOCR-CPP/EasyOCR-CPP.cpp index 9bdbd1f..836b0a6 100644 --- a/EasyOCR-CPP/EasyOCR-CPP.cpp +++ b/EasyOCR-CPP/EasyOCR-CPP.cpp @@ -45,16 +45,19 @@ int main() cv::blur(image, image, { 3,3 }); //WarmUP GPU - for (int i = 0; i < 10; i++) + if (uns::G_OCRConfig.GetGPUUsage() != uns::OCRConfig::GPUUsage::CPUOnly) { - std::cout << "Warming UP GPU (" << i << ") ......" << std::endl; - clock_t start = clock(); - auto rects = detector(image); - auto results = recognizer(image, rects); - clock_t end = clock(); - std::cout << "Warm UP [" << i << "] Cost " << static_cast(end - start) / static_cast(CLOCKS_PER_SEC) << " Second(s)" << std::endl; + for (int i = 0; i < 10; i++) + { + std::cout << "Warming UP GPU (" << i << ") ......" << std::endl; + clock_t start = clock(); + auto rects = detector(image); + auto results = recognizer(image, rects); + clock_t end = clock(); + std::cout << "Warm UP [" << i << "] Cost " << static_cast(end - start) / static_cast(CLOCKS_PER_SEC) << " Second(s)" << std::endl; + } + std::cout << "GPU Warm UP Finished" << std::endl; } - std::cout << "GPU Warm UP Finished" << std::endl; //Begin OCR clock_t start = clock(); @@ -64,8 +67,8 @@ int main() clock_t recognize_finished = clock(); for (const auto& [index, info] : results) { - const auto& [text, conf] = info; - std::cout << "Box " << index << ": \"" << WtoA(text) << "\" Confidence=" << conf << "\n"; + const auto& [text, conf, rect] = info; + printf("Result %d: Text = {%s}, Box = [%d, %d, %d, %d], Confidence = %.3f\n", (int)index, WtoA(text).c_str(), rect.tl().x, rect.tl().y, rect.br().x, rect.br().y, conf); } //Output Time Cost diff --git a/EasyOCR-CPP/EasyOCR_Recognizer.cpp b/EasyOCR-CPP/EasyOCR_Recognizer.cpp index 7829a24..8579806 100644 --- a/EasyOCR-CPP/EasyOCR_Recognizer.cpp +++ b/EasyOCR-CPP/EasyOCR_Recognizer.cpp @@ -377,7 +377,7 @@ uns::EOCR_ResultSet uns::EasyOCR_Recognizer::operator()(const cv::Mat& full_imag if (crop.empty()) continue; auto [text, conf] = (*this)(crop); - result_set.insert({ i, { text, conf } }); + result_set.insert({ i, { text, conf, rect } }); } return result_set; } diff --git a/EasyOCR-CPP/OCRToolBox.h b/EasyOCR-CPP/OCRToolBox.h index d846422..1b764b2 100644 --- a/EasyOCR-CPP/OCRToolBox.h +++ b/EasyOCR-CPP/OCRToolBox.h @@ -11,8 +11,9 @@ namespace uns using VecFloat = std::vector; using IONames = std::vector; using IONamesStorage = std::vector; - using EOCR_Result = std::pair; - using EOCR_ResultSet = std::map; + using EOCR_Result = std::tuple; + using EOCR_Result_Single = std::tuple; + using EOCR_ResultSet = std::map; using EOCRD_Rects = std::vector>; class OCRToolBox diff --git a/LibEasyOCR-CPP/EasyOCR_Recognizer.cpp b/LibEasyOCR-CPP/EasyOCR_Recognizer.cpp index 2477d13..58fafac 100644 --- a/LibEasyOCR-CPP/EasyOCR_Recognizer.cpp +++ b/LibEasyOCR-CPP/EasyOCR_Recognizer.cpp @@ -378,7 +378,7 @@ uns::EOCR_ResultSet uns::EasyOCR_Recognizer::operator()(const cv::Mat& full_imag if (crop.empty()) continue; auto [text, conf] = (*this)(crop); - result_set.insert({ i, { text, conf } }); + result_set.insert({ i, { text, conf, rect } }); } return result_set; } diff --git a/LibEasyOCR-CPP/LibEasyOCR-CPP.h b/LibEasyOCR-CPP/LibEasyOCR-CPP.h index 3d283ad..871072c 100644 --- a/LibEasyOCR-CPP/LibEasyOCR-CPP.h +++ b/LibEasyOCR-CPP/LibEasyOCR-CPP.h @@ -10,8 +10,9 @@ namespace uns { namespace easyocr { - using EOCR_Result = std::pair; - using EOCR_ResultSet = std::map; + using EOCR_Result = std::tuple; + using EOCR_Result_Single = std::tuple; + using EOCR_ResultSet = std::map; using EOCRD_Rects = std::vector>; } diff --git a/LibEasyOCR-CPP/OCRConfig.cpp b/LibEasyOCR-CPP/OCRConfig.cpp index b2c4f05..7cf4061 100644 --- a/LibEasyOCR-CPP/OCRConfig.cpp +++ b/LibEasyOCR-CPP/OCRConfig.cpp @@ -3,6 +3,9 @@ uns::OCRConfig uns::G_OCRConfig; +std::wstring detect_model_path; +std::wstring recognize_model_path; + uns::OCRConfig::OCRConfig() { language = easyocr::CharsetType::EN; diff --git a/LibEasyOCR-CPP/OCRConfig.h b/LibEasyOCR-CPP/OCRConfig.h index fb9b46a..7e348b1 100644 --- a/LibEasyOCR-CPP/OCRConfig.h +++ b/LibEasyOCR-CPP/OCRConfig.h @@ -25,8 +25,6 @@ namespace uns private: easyocr::GPUUsage gpu_usage; easyocr::CharsetType language; - std::wstring detect_model_path; - std::wstring recognize_model_path; public: OCRConfig(); diff --git a/LibEasyOCR-CPP/OCRToolBox.h b/LibEasyOCR-CPP/OCRToolBox.h index d846422..1b764b2 100644 --- a/LibEasyOCR-CPP/OCRToolBox.h +++ b/LibEasyOCR-CPP/OCRToolBox.h @@ -11,8 +11,9 @@ namespace uns using VecFloat = std::vector; using IONames = std::vector; using IONamesStorage = std::vector; - using EOCR_Result = std::pair; - using EOCR_ResultSet = std::map; + using EOCR_Result = std::tuple; + using EOCR_Result_Single = std::tuple; + using EOCR_ResultSet = std::map; using EOCRD_Rects = std::vector>; class OCRToolBox