From 80e6aca858c5fc316f2ebc71fd3be4d355f05dc0 Mon Sep 17 00:00:00 2001 From: ZhenyeLi <806957048@qq.com> Date: Mon, 9 Dec 2024 15:27:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=A4=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_total.cpp | 111 ++++++++++--------------------------------- 1 file changed, 24 insertions(+), 87 deletions(-) diff --git a/tests/test_total.cpp b/tests/test_total.cpp index 6a26688..0ac0f84 100644 --- a/tests/test_total.cpp +++ b/tests/test_total.cpp @@ -13,13 +13,13 @@ #include // For directory traversal // 宏定义 -#define SAVE_PATH3 MIL_TEXT("C:\\Users\\zjc\\Desktop\\suspect.png") -#define SAVE_PATH4 MIL_TEXT("C:\\Users\\zjc\\Desktop\\suspect2.png") -#define IMAGE_DIR MIL_TEXT(".\\test_imgs\\cotton_image_new") // 文件夹路径 +// #define SAVE_PATH3 MIL_TEXT("C:\\Users\\zjc\\Desktop\\suspect.png") +// #define SAVE_PATH4 MIL_TEXT("C:\\Users\\zjc\\Desktop\\suspect2.png") +#define IMAGE_DIR MIL_TEXT("C:\\Users\\ZLSDKJ\\Desktop\\iamge\\1.bmp") // 文件夹路径 #define run_high_sat true; -#define run_templating true; -#define run_deep_learning true; +#define run_templating false; +#define run_deep_learning false; MIL_ID MilApplication, MilSystem, MilDisplay; std::map params; @@ -51,6 +51,14 @@ cv::Mat overlayResultOnInput(const cv::Mat& cv_input, const cv::Mat& total_resul // 5. 返回叠加后的图像 return overlay; } +void process_iterations(MIL_ID MilImage, MIL_ID MilHighSatResult, const std::map& params, int iterations, const std::string& thread_name) { + Timer timer; + for(int i = 0; i < iterations; ++i) { + timer.restart(); + high_sat_detect(MilImage, MilHighSatResult, params); + timer.printElapsedTime(thread_name + " - Iteration " + std::to_string(i+1) + " finished"); + } +} int main() { // 初始化 MIL 应用 @@ -58,91 +66,20 @@ int main() { Timer timer1, timer2; std::map params; - read_params_from_file("..\\config\\color_range_config.txt", params); - read_params_from_file("..\\config\\template_color_config.txt", params); + read_params_from_file("C:\\Users\\ZLSDKJ\\Desktop\\color_range_config.txt", params); + // read_params_from_file("..\\config\\template_color_config.txt", params); + MIL_ID MilImage = M_NULL, MilHighSatResult = M_NULL, MilTemplateMatchingResult = M_NULL; + MbufRestore(IMAGE_DIR, MilSystem, &MilImage); + const int iterations_per_thread = 500; -#if run_templating - TemplateMatcher matcher(params); - matcher.LoadConfig("..\\config\\template_config.txt"); -#endif + // 创建两个线程 + std::thread thread1(process_iterations, MilImage, MilHighSatResult, std::cref(params), iterations_per_thread, "Thread 1"); + std::thread thread2(process_iterations, MilImage, MilHighSatResult, std::cref(params), iterations_per_thread, "Thread 2"); -#if run_deep_learning - ONNXRunner runner; - runner.load("C:\\Users\\zjc\\Desktop\\dimo_11.14.onnx"); -#endif + // 等待两个线程完成 + thread1.join(); + thread2.join(); - timer1.printElapsedTime("Load config and templates and models"); - - cout << "Sequence running start:" << endl; - - // 遍历文件夹中的所有图片文件 - for (const auto& entry : fs::directory_iterator(IMAGE_DIR)) { - if (entry.is_regular_file()) { - string image_path = entry.path().string(); - cout << "Processing image: " << image_path << endl; - - // 读取当前图片 - MIL_ID MilImage = M_NULL, MilHighSatResult = M_NULL, MilTemplateMatchingResult = M_NULL; - MbufRestore(convert_to_wstring(image_path), MilSystem, &MilImage); - - timer1.restart(); - timer2.restart(); - cv::Mat deep_result, high_sat_result, template_result, total_result; - - // 艳丽色彩检测 -#if run_high_sat - high_sat_detect(MilImage, MilHighSatResult, params); - high_sat_result = mil2mat(MilHighSatResult); - timer1.printElapsedTime("High Sat finished"); -#else - high_sat_result = cv::Mat::zeros(1024, 4096, CV_8UC1); -#endif - -#if run_templating - // 模板匹配检测 - matcher.predict(MilImage, MilTemplateMatchingResult, params, false); - template_result = mil2mat(MilTemplateMatchingResult); - timer1.printElapsedTime("Template Matching finished"); -#else - template_result = cv::Mat::zeros(1024, 4096, CV_8UC1); -#endif - -#if run_deep_learning - // 深度学习检测 - cv::Mat cv_input = mil2mat(MilImage); - std::vector result = runner.predict(cv_input); - deep_result = runner.postProcess(result, cv_input); -#else - deep_result = cv::Mat::zeros(1024, 4096, CV_8UC1); -#endif - - timer1.printElapsedTime("Deep Learning finished"); - - if (!deep_result.empty() && !high_sat_result.empty() && !template_result.empty()) { - cv::bitwise_or(deep_result, high_sat_result, total_result); - cv::bitwise_or(total_result, template_result, total_result); - } else { - cerr << "Error: One or more detection results are empty!" << endl; - } - - timer2.printElapsedTime("Prediction finished Total"); - - // 保存结果 - cv::imwrite("./runs/deep_result_" + entry.path().filename().string() + ".png", deep_result); - cv::imwrite("./runs/high_sat_result_" + entry.path().filename().string() + ".png", high_sat_result); - cv::imwrite("./runs/template_result_" + entry.path().filename().string() + ".png", template_result); - cv::imwrite("./runs/total_result_" + entry.path().filename().string() + ".png", total_result); - - std::vector images = { deep_result, high_sat_result, template_result, total_result }; - displayCombinedResults(images, "Combined Results"); - images = { cv_input, overlayResultOnInput(cv_input, total_result, 0.1, cv::COLORMAP_OCEAN)}; - displayCombinedResults(images, "Combined Results"); - // 释放当前图片资源 - MbufFree(MilImage); - MbufFree(MilHighSatResult); - MbufFree(MilTemplateMatchingResult); - } - } MappFreeDefault(MilApplication, MilSystem, MilDisplay, M_NULL, M_NULL); return 0; }