diff --git a/AlgorithmModule/include/CheckErrorCodeDefine.hpp b/AlgorithmModule/include/CheckErrorCodeDefine.hpp index f89a19d..3dd9281 100644 --- a/AlgorithmModule/include/CheckErrorCodeDefine.hpp +++ b/AlgorithmModule/include/CheckErrorCodeDefine.hpp @@ -26,7 +26,7 @@ // resize 图片的 宽度 #define RESIZE_IMAGE_WIDTH 1680 -// #define SAVE_RESIMG +// 结果图保存/绘制开关:已由 SAVE_RESIMG 宏改为 base 层配置项“是否存图绘制”(baseCheckData 中 itemCode=bDrawAndSave 的 isOpen),运行时生效,无需再改此处宏 enum TEM_IMG_IDX_ { diff --git a/AlgorithmModule/include/ImageResultJudge.h b/AlgorithmModule/include/ImageResultJudge.h index a8a0956..27309ad 100644 --- a/AlgorithmModule/include/ImageResultJudge.h +++ b/AlgorithmModule/include/ImageResultJudge.h @@ -120,6 +120,9 @@ private: // 获取缺陷 对应的AI输入 输出图片, int GetAIDetImg(std::shared_ptr pImageResult, cv::Point pcenter, cv::Mat &AI_InImg, cv::Mat &AI_OutImg); + // 绘制并保存结果图开关(base 配置 bDrawAndSave,替代 SAVE_RESIMG 宏) + bool NeedDrawAndSave(); + int sendTask(std::shared_ptr task); std::shared_ptr GetTask(); diff --git a/AlgorithmModule/include/ImgCheckAnalysisy.hpp b/AlgorithmModule/include/ImgCheckAnalysisy.hpp index ce868c7..45cb8a5 100644 --- a/AlgorithmModule/include/ImgCheckAnalysisy.hpp +++ b/AlgorithmModule/include/ImgCheckAnalysisy.hpp @@ -251,6 +251,9 @@ private: // 临时绘制结果 int DrawResult_Step_1(); + // 绘制并保存结果图开关(base 配置 bDrawAndSave,替代 SAVE_RESIMG 宏) + bool NeedDrawAndSave(); + // 参数缺陷类型转 结果参数类型 int AIClassTypeToConfigType(int nAIQXType, cv::Rect qx_roi); diff --git a/AlgorithmModule/src/CameraCheckAnalysisy.cpp b/AlgorithmModule/src/CameraCheckAnalysisy.cpp index 82e47b9..dcedcfd 100644 --- a/AlgorithmModule/src/CameraCheckAnalysisy.cpp +++ b/AlgorithmModule/src/CameraCheckAnalysisy.cpp @@ -361,9 +361,10 @@ int CameraCheckAnalysisy::ResultParamJudge() long t1 = CheckUtil::getcurTime(); int re = m_imageResultJudge.MergeResult(m_pCheck_Result->ImageALLDetResultList.at(imgidx), ptemre); long t2 = CheckUtil::getcurTime(); - #ifdef SAVE_RESIMG - m_imageResultJudge.DrawResult(m_pCheck_Result->ImageALLDetResultList.at(imgidx)); - #endif + if (m_pbaseCheckFunction != NULL && m_pbaseCheckFunction->bDrawAndSave) + { + m_imageResultJudge.DrawResult(m_pCheck_Result->ImageALLDetResultList.at(imgidx)); + } long t3 = CheckUtil::getcurTime(); // m_pdetlog->AddCheckstr(PrintLevel_1, "ResultParamJudge", " det time %ld ms judge %ld draw %ld", t3 - t1, t2 - t1, t3 - t2); diff --git a/AlgorithmModule/src/ImageResultJudge.cpp b/AlgorithmModule/src/ImageResultJudge.cpp index 33e515a..6e80455 100644 --- a/AlgorithmModule/src/ImageResultJudge.cpp +++ b/AlgorithmModule/src/ImageResultJudge.cpp @@ -97,6 +97,12 @@ cv::Rect ImageResultJudge::GetCutRoi(cv::Rect &roi, const cv::Mat &img) return cutroi; } +bool ImageResultJudge::NeedDrawAndSave() +{ + // base 层“是否存图绘制”开关:绘制并保存结果图(运行时替代 SAVE_RESIMG 宏) + return m_pbaseCheckFunction != NULL && m_pbaseCheckFunction->bDrawAndSave; +} + int ImageResultJudge::GetAIDetImg(std::shared_ptr pImageResult, cv::Point pcenter, cv::Mat &AI_InImg, cv::Mat &AI_OutImg) { @@ -629,17 +635,18 @@ int ImageResultJudge::ResultJudge(std::shared_ptr pImageResult) // CheckUtil::printROI(CutRoi, "CutRoi"); cv::Size sz = cv::Size(QX_SAMLLIMG_WIDTH, QX_SAMLLIMG_HEIGHT); -#ifdef SAVE_RESIMG - if (pImageResult->detImg.channels() == 1) + if (NeedDrawAndSave()) { - cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR); - } - else - { - tem.srcImg = pImageResult->detImg(CutRoi).clone(); + if (pImageResult->detImg.channels() == 1) + { + cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR); + } + else + { + tem.srcImg = pImageResult->detImg(CutRoi).clone(); + } + cv::resize(tem.srcImg, tem.resizeImg, sz); } - cv::resize(tem.srcImg, tem.resizeImg, sz); -#endif int nqx_type = ConfigTypeToResultType(config_qx_type); tem.type = nqx_type; @@ -684,9 +691,10 @@ int ImageResultJudge::ResultJudge(std::shared_ptr pImageResult) m_CheckResult_shareP->nresult = nqx_type; } -#ifdef SAVE_RESIMG - GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img); -#endif + if (NeedDrawAndSave()) + { + GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img); + } m_CheckResult_shareP->qxImageResult.push_back(tem); } else @@ -697,9 +705,10 @@ int ImageResultJudge::ResultJudge(std::shared_ptr pImageResult) m_CheckResult_shareP->nYS_result = nqx_type; } -#ifdef SAVE_RESIMG - GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img); -#endif + if (NeedDrawAndSave()) + { + GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img); + } m_CheckResult_shareP->YS_ImageResult.push_back(tem); } @@ -989,17 +998,18 @@ int ImageResultJudge::MergeResult(std::shared_ptr pImageResult, cv::Rect CutRoi = GetCutRoi(roi, pImageResult->detImg); cv::Size sz = cv::Size(QX_SAMLLIMG_WIDTH, QX_SAMLLIMG_HEIGHT); -#ifdef SAVE_RESIMG - if (pImageResult->detImg.channels() == 1) + if (NeedDrawAndSave()) { - cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR); - } - else - { - tem.srcImg = pImageResult->detImg(CutRoi).clone(); + if (pImageResult->detImg.channels() == 1) + { + cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR); + } + else + { + tem.srcImg = pImageResult->detImg(CutRoi).clone(); + } + cv::resize(tem.srcImg, tem.resizeImg, sz); } - cv::resize(tem.srcImg, tem.resizeImg, sz); -#endif int nerrortype = 1; int checkFlage = ANALYSIS_TYPE_TF; @@ -1060,9 +1070,10 @@ int ImageResultJudge::MergeResult(std::shared_ptr pImageResult, { m_CheckResult_shareP->nresult = nqx_type; } -#ifdef SAVE_RESIMG - GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img); -#endif + if (NeedDrawAndSave()) + { + GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img); + } m_CheckResult_shareP->qxImageResult.push_back(tem); } } diff --git a/AlgorithmModule/src/ImgCheckAnalysisy.cpp b/AlgorithmModule/src/ImgCheckAnalysisy.cpp index 90188ba..59ada27 100644 --- a/AlgorithmModule/src/ImgCheckAnalysisy.cpp +++ b/AlgorithmModule/src/ImgCheckAnalysisy.cpp @@ -529,19 +529,20 @@ int ImgCheckAnalysisy::CheckRun() m_pdetlog->AddCheckstr(PrintLevel_0, "4、BQ Detect", "-------------------------BQ AI Detect--------%ld ms-------\n", t_BQ_e - t_BQ_s); } -#ifdef SAVE_RESIMG - m_CheckResult_shareP->resultMaskImg = m_pImageAllResult->qx_DetAIResult->AI_MaskImg; - - // 将BQ标签的AI mask合并到结果mask中 - if (m_pImageAllResult->bq_DetAIResult && !m_pImageAllResult->bq_DetAIResult->AI_MaskImg.empty()) + if (NeedDrawAndSave()) { - cv::Mat &bqMask = m_pImageAllResult->bq_DetAIResult->AI_MaskImg; - if (bqMask.size() == m_CheckResult_shareP->resultMaskImg.size()) + m_CheckResult_shareP->resultMaskImg = m_pImageAllResult->qx_DetAIResult->AI_MaskImg.clone(); + + // 将BQ标签的AI mask合并到结果mask中 + if (m_pImageAllResult->bq_DetAIResult && !m_pImageAllResult->bq_DetAIResult->AI_MaskImg.empty()) { - cv::bitwise_or(m_CheckResult_shareP->resultMaskImg, bqMask, m_CheckResult_shareP->resultMaskImg); + cv::Mat &bqMask = m_pImageAllResult->bq_DetAIResult->AI_MaskImg; + if (bqMask.size() == m_CheckResult_shareP->resultMaskImg.size()) + { + cv::bitwise_or(m_CheckResult_shareP->resultMaskImg, bqMask, m_CheckResult_shareP->resultMaskImg); + } } } -#endif // cv::imwrite("dddddddd.png", m_pImageAllResult->qx_DetAIResult->AI_MaskImg); // if (!m_pImageAllResult->qx_DetAIResult->AI_MaskImg.empty()) @@ -3185,16 +3186,17 @@ int ImgCheckAnalysisy::AI_Detect_QX() } // 仅在调试模式下保存 AI_Qx_MaskList,并限制数量 -#ifdef SAVE_RESIMG - if (DetImgInfo_shareP->bDebugsaveImg && pDetAIResult->AI_Qx_MaskList.size() < 200) + if (NeedDrawAndSave()) { - std::shared_ptr temAIresult = std::make_shared(); - temAIresult->roi = result->roi; - temAIresult->AI_inImg = result->input; - temAIresult->AI_mask = outimg; - pDetAIResult->AI_Qx_MaskList.push_back(temAIresult); + if (DetImgInfo_shareP->bDebugsaveImg && pDetAIResult->AI_Qx_MaskList.size() < 200) + { + std::shared_ptr temAIresult = std::make_shared(); + temAIresult->roi = result->roi; + temAIresult->AI_inImg = result->input; + temAIresult->AI_mask = outimg; + pDetAIResult->AI_Qx_MaskList.push_back(temAIresult); + } } -#endif { std::shared_ptr temAIresult = std::make_shared(); @@ -3367,7 +3369,7 @@ int ImgCheckAnalysisy::AI_Detect_127Cell() AIresult.copyTo(AIresultMask(result->roi), AIresult); } -#ifdef SAVE_RESIMG + if (NeedDrawAndSave()) { std::shared_ptr temAIresult = std::make_shared(); temAIresult->roi = result->roi; @@ -3375,8 +3377,6 @@ int ImgCheckAnalysisy::AI_Detect_127Cell() temAIresult->AI_mask = outimg; pDetAIResult->AI_Qx_MaskList.push_back(temAIresult); } -#endif - { std::shared_ptr temAIresult = std::make_shared(); temAIresult->roi = result->roi; @@ -3560,7 +3560,7 @@ int ImgCheckAnalysisy::AI_Detect_RLine_512() AIresult.copyTo(AIresultMask(result->roi), AIresult); } -#ifdef SAVE_RESIMG + if (NeedDrawAndSave()) { std::shared_ptr temAIresult = std::make_shared(); temAIresult->roi = result->roi; @@ -3568,8 +3568,6 @@ int ImgCheckAnalysisy::AI_Detect_RLine_512() temAIresult->AI_mask = outimg; pDetAIResult->AI_Qx_MaskList.push_back(temAIresult); } -#endif - { std::shared_ptr temAIresult = std::make_shared(); temAIresult->roi = result->roi; @@ -3707,6 +3705,12 @@ int ImgCheckAnalysisy::ThreadTask(int nId) return 0; } +bool ImgCheckAnalysisy::NeedDrawAndSave() +{ + // base 层“是否存图绘制”开关:绘制并保存结果图(运行时替代 SAVE_RESIMG 宏) + return m_pbaseCheckFunction != NULL && m_pbaseCheckFunction->bDrawAndSave; +} + int ImgCheckAnalysisy::ResizeImg() { @@ -3716,35 +3720,37 @@ int ImgCheckAnalysisy::ResizeImg() float fw = RESIZE_IMAGE_WIDTH * 1.0f / m_pImageAllResult->detImg.cols; sz.height = int(m_pImageAllResult->detImg.rows * fw); -#ifdef SAVE_RESIMG - cv::resize(m_pImageAllResult->detImg, m_pImageAllResult->resultImg, sz); - - // 需要绘制屏蔽区 - if ((m_pBasicConfig && m_pBasicConfig->bDrawShieldRoi) || - (m_pFuntion && m_pFuntion->function.f_ShieldRegion.bOpen && m_pFuntion->function.f_ShieldRegion.bDraw)) + if (NeedDrawAndSave()) { - m_pdetlog->AddCheckstr(PrintLevel_1, "ResizeImg", "DrawShieldR param is open"); - cv::Mat shieldImg = m_pImageAllResult->shieldImg; - cv::Mat sizeshieldimg; - if (!shieldImg.empty()) + cv::resize(m_pImageAllResult->detImg, m_pImageAllResult->resultImg, sz); + + // 需要绘制屏蔽区 + if ((m_pBasicConfig && m_pBasicConfig->bDrawShieldRoi) || + (m_pFuntion && m_pFuntion->function.f_ShieldRegion.bOpen && m_pFuntion->function.f_ShieldRegion.bDraw)) + { + m_pdetlog->AddCheckstr(PrintLevel_1, "ResizeImg", "DrawShieldR param is open"); + cv::Mat shieldImg = m_pImageAllResult->shieldImg; + cv::Mat sizeshieldimg; + if (!shieldImg.empty()) + { + cv::resize(shieldImg, sizeshieldimg, sz); + sizeshieldimg *= 0.2; + m_pImageAllResult->resultImg += sizeshieldimg; + } + } + if (m_pImageAllResult->resultImg.channels() == 1) { - cv::resize(shieldImg, sizeshieldimg, sz); - sizeshieldimg *= 0.2; - m_pImageAllResult->resultImg += sizeshieldimg; + cv::cvtColor(m_pImageAllResult->resultImg, m_pImageAllResult->resultImg, cv::COLOR_GRAY2BGR); } + + m_CheckResult_shareP->resultimg = m_pImageAllResult->resultImg; } - if (m_pImageAllResult->resultImg.channels() == 1) + else { - cv::cvtColor(m_pImageAllResult->resultImg, m_pImageAllResult->resultImg, cv::COLOR_GRAY2BGR); + m_pImageAllResult->fscale_detToresult_x = RESIZE_IMAGE_WIDTH * 1.0f / m_pImageAllResult->detImg.cols; + m_pImageAllResult->fscale_detToresult_y = sz.height * 1.0f / m_pImageAllResult->detImg.rows; } - m_CheckResult_shareP->resultimg = m_pImageAllResult->resultImg; - -#else - m_pImageAllResult->fscale_detToresult_x = RESIZE_IMAGE_WIDTH * 1.0f / m_pImageAllResult->detImg.cols; - m_pImageAllResult->fscale_detToresult_y = sz.height * 1.0f / m_pImageAllResult->detImg.rows; -#endif - m_pdetlog->AddCheckstr(PrintLevel_1, "ResizeImg", "showImg size [w %d,h %d]-> show img [w %d,h %d] ", m_CutRoi.width, m_CutRoi.height, sz.width, sz.height); return 0; @@ -3973,12 +3979,10 @@ int ImgCheckAnalysisy::UpdateBlobHFlag_RLine_512() int ImgCheckAnalysisy::DrawResult_Step_1() { m_pdetlog->AddCheckstr(PrintLevel_0, "DrawResult_Step_1", "=======start"); -#ifndef SAVE_RESIMG if (m_CheckResult_shareP->resultimg.empty()) { return 0; } -#endif // std::cout << m_pBasicConfig->bDrawPreRoi << std::endl; if (m_pBasicConfig->bDrawPreRoi) { @@ -4994,14 +4998,17 @@ int ImgCheckAnalysisy::ImgPreDet() creatsavedir(); } -#ifdef SAVE_RESIMG - m_CheckResult_shareP->cutSrcimg = m_pImageAllResult->detImg; - ResizeImg(); - m_pImageAllResult->fscale_detToresult_x = m_pImageAllResult->resultImg.cols * 1.0f / m_pImageAllResult->detImg.cols; - m_pImageAllResult->fscale_detToresult_y = m_pImageAllResult->resultImg.rows * 1.0f / m_pImageAllResult->detImg.rows; -#else - ResizeImg(); -#endif + if (NeedDrawAndSave()) + { + m_CheckResult_shareP->cutSrcimg = m_pImageAllResult->detImg; + ResizeImg(); + m_pImageAllResult->fscale_detToresult_x = m_pImageAllResult->resultImg.cols * 1.0f / m_pImageAllResult->detImg.cols; + m_pImageAllResult->fscale_detToresult_y = m_pImageAllResult->resultImg.rows * 1.0f / m_pImageAllResult->detImg.rows; + } + else + { + ResizeImg(); + } return 0; } diff --git a/ConfigModule/include/CheckConfigDefine.h b/ConfigModule/include/CheckConfigDefine.h index 8a4fabb..8f51eea 100644 --- a/ConfigModule/include/CheckConfigDefine.h +++ b/ConfigModule/include/CheckConfigDefine.h @@ -2383,6 +2383,7 @@ struct BaseCheckFunction Base_Function_BigNG bigNG; Base_Function_EdgeChannel edgeChannel; Base_Function_AD_Check ad_check; + bool bDrawAndSave; // 是否存图绘制(绘制并保存结果图,运行时替代 SAVE_RESIMG 宏) BaseCheckFunction() { Init(); @@ -2395,6 +2396,7 @@ struct BaseCheckFunction bigNG.Init(); edgeChannel.Init(); ad_check.Init(); + bDrawAndSave = false; } void copy(BaseCheckFunction tem) { @@ -2404,6 +2406,7 @@ struct BaseCheckFunction this->bigNG.copy(tem.bigNG); this->edgeChannel.copy(tem.edgeChannel); this->ad_check.copy(tem.ad_check); + this->bDrawAndSave = tem.bDrawAndSave; } void print(std::string str) { @@ -2414,6 +2417,7 @@ struct BaseCheckFunction bigNG.print("bigNG"); edgeChannel.print("edgeChannel"); ad_check.print("ad_check"); + printf("bDrawAndSave %d\n", bDrawAndSave); } std::string GetInfo(std::string str) { diff --git a/ConfigModule/src/JsonConfig.cpp b/ConfigModule/src/JsonConfig.cpp index 156b5f4..4ff0544 100644 --- a/ConfigModule/src/JsonConfig.cpp +++ b/ConfigModule/src/JsonConfig.cpp @@ -1537,6 +1537,11 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value) _config.ad_check.Init(); } } + // 是否存图绘制开关:控制结果图绘制与保存(运行时替代 SAVE_RESIMG 宏) + if ("bDrawAndSave" == strCode) + { + _config.bDrawAndSave = value["isOpen"].asBool(); + } return 0; }