From 9f5ea554152b1f4ea99c6f8163a091bbf8d238c6 Mon Sep 17 00:00:00 2001 From: liusiyang Date: Thu, 3 Sep 2026 10:05:45 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=B7=BB=E5=8A=A0=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AlgorithmModule/src/ImgCheckAnalysisy.cpp | 25 +++++++++++++++++++---- ConfigModule/include/CheckConfigDefine.h | 4 ++++ ConfigModule/src/JsonConfig.cpp | 1 + 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/AlgorithmModule/src/ImgCheckAnalysisy.cpp b/AlgorithmModule/src/ImgCheckAnalysisy.cpp index 3a993fb..c13b81b 100644 --- a/AlgorithmModule/src/ImgCheckAnalysisy.cpp +++ b/AlgorithmModule/src/ImgCheckAnalysisy.cpp @@ -837,11 +837,21 @@ int ImgCheckAnalysisy::CheckRun() { m_pImageAllResult->detImg = image(m_CutRoi).clone(); } - // 多线程开启 传统/AI 推理检测 + + // bDetect为true才进行推理输出残点图,否则直接输出全黑残点图 long time_AI_s = CheckUtil::getcurTime(); - m_AItask = std::make_shared(); - m_AItask->taskname = Task_AI; - m_task.sendTask(m_AItask); + if(m_pBasicConfig->bDetect) + { + // 多线程开启 传统/AI 推理检测 + m_AItask = std::make_shared(); + m_AItask->taskname = Task_AI; + m_task.sendTask(m_AItask); + } + else + { + // 不推理:直接输出全黑残点图 + m_pImageAllResult->AIMaskImg = cv::Mat::zeros(m_pImageAllResult->detImg.size(), CV_8UC1); + } ImgPreDet(); // 更新检测区域 @@ -1465,6 +1475,13 @@ int ImgCheckAnalysisy::AIMaskDet() m_ImgBlobHFlagData = new unsigned char[m_pImageAllResult->detImg.rows]; memset(m_ImgBlobHFlagData, 0, sizeof(unsigned char) * m_pImageAllResult->detImg.rows); + // bDetect为false时不进行推理,直接输出全黑残点图 + if(!m_pBasicConfig->bDetect) + { + m_CheckResult_shareP->resultMaskImg = m_pImageAllResult->AIMaskImg; + return 0; + } + // 传统检测路径:等待异步任务完成后,计算HFlag if(m_pbaseCheckFunction->traditionDet.bOpen) { diff --git a/ConfigModule/include/CheckConfigDefine.h b/ConfigModule/include/CheckConfigDefine.h index ed06031..7afc443 100644 --- a/ConfigModule/include/CheckConfigDefine.h +++ b/ConfigModule/include/CheckConfigDefine.h @@ -407,6 +407,7 @@ struct BasicConfig float Product_Size_Height_mm; // 产品尺寸 高度 mm float fImage_Scale_x; // 成像精度 float fImage_Scale_y; // 成像精度 + bool bDetect; // 是否检测 std::string strCamName; // std::string strConfigVersion; // 配置版本 @@ -428,6 +429,7 @@ struct BasicConfig Product_Size_Height_mm = 1000; fImage_Scale_x = 0.03; fImage_Scale_y = 0.03; + bDetect = true; density_R_mm = 5; strCamName = ""; strConfigVersion = "1.0"; @@ -452,6 +454,7 @@ struct BasicConfig this->Product_Size_Height_mm = tem.Product_Size_Height_mm; this->fImage_Scale_x = tem.fImage_Scale_x; this->fImage_Scale_y = tem.fImage_Scale_y; + this->bDetect = tem.bDetect; this->density_R_mm = tem.density_R_mm; this->strCamearName = tem.strCamearName; this->strConfigVersion = tem.strConfigVersion; @@ -463,6 +466,7 @@ struct BasicConfig printf("bCal_ImageScale %d Product_Size_Width =%f Product_Size_Height =%f \n", bCal_ImageScale, Product_Size_Width_mm, Product_Size_Height_mm); printf("fImage_Scale_x =%f fImage_Scale_y=%f \n", fImage_Scale_x, fImage_Scale_y); printf("density_R_mm=%f \n", density_R_mm); + printf("bDetect=%d \n", bDetect); // printf("height_min =%d height_max=%d \n", height_min, height_max); printf("bDrawShieldRoi %d bShield_ZF %d DrawPreRoi %d fUP_IOU %f density_R_mm %f\n", bDrawShieldRoi, bShield_ZF, bDrawPreRoi, fUP_IOU, density_R_mm); printf("============================↑↑↑↑↑↑%s↑↑↑↑↑↑=========================\n", str.c_str()); diff --git a/ConfigModule/src/JsonConfig.cpp b/ConfigModule/src/JsonConfig.cpp index d406f64..a582c65 100644 --- a/ConfigModule/src/JsonConfig.cpp +++ b/ConfigModule/src/JsonConfig.cpp @@ -62,6 +62,7 @@ void CommonParamToCheckConfigJson::toObjectFromValue(Json::Value root) _config.baseConfig.Product_Size_Height_mm = value["Product_Size_H"].asFloat(); _config.baseConfig.fImage_Scale_x = value["Image_Scale_X"].asFloat(); _config.baseConfig.fImage_Scale_y = value["Image_Scale_Y"].asFloat(); + _config.baseConfig.bDetect = value["bDetect"].asFloat(); if (value["Density_R"]) { _config.baseConfig.density_R_mm = value["Density_R"].asFloat();