From 18a1394759fb3b8faaba0885fd87f821106b8ae4 Mon Sep 17 00:00:00 2001 From: liusiyang Date: Wed, 3 Jun 2026 18:43:36 +0800 Subject: [PATCH 1/8] =?UTF-8?q?feat=20=E6=B7=BB=E5=8A=A0RGB-HGRAY=E6=A3=80?= =?UTF-8?q?=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AlgorithmModule/src/ImgCheckAnalysisy.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AlgorithmModule/src/ImgCheckAnalysisy.cpp b/AlgorithmModule/src/ImgCheckAnalysisy.cpp index 9d05963..64de5e1 100644 --- a/AlgorithmModule/src/ImgCheckAnalysisy.cpp +++ b/AlgorithmModule/src/ImgCheckAnalysisy.cpp @@ -2482,6 +2482,11 @@ int ImgCheckAnalysisy::AI_Detect_QX() m_pdetlog->AddCheckstr(PrintLevel_2, DET_LOG_LEVEL_3, strBaseLog, "=======model use Chess"); pAI_Model = AI_Factory->AI_defect_Chess; } + else if (m_pFuntion->function.f_BaseDet.strAIMode == "RGB-HGRAY") + { + m_pdetlog->AddCheckstr(PrintLevel_2, DET_LOG_LEVEL_3, strBaseLog, "=======model use RE_RGBHGRAY"); + pAI_Model = AI_Factory->AI_defect_RE_RGBHGRAY; + } else { m_pdetlog->AddCheckstr(PrintLevel_2, DET_LOG_LEVEL_3, strBaseLog, "=======model use base"); From 0afe6c80a626a61d732d778759fc754fcf3d4ab9 Mon Sep 17 00:00:00 2001 From: liusiyang Date: Fri, 5 Jun 2026 12:26:54 +0800 Subject: [PATCH 2/8] =?UTF-8?q?fix=20LD=E6=BC=8F=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AlgorithmModule/src/ImageResultJudge.cpp | 1 + AlgorithmModule/src/ImgCheckAnalysisy.cpp | 11 ++++++----- ConfigModule/include/CheckConfigDefine.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/AlgorithmModule/src/ImageResultJudge.cpp b/AlgorithmModule/src/ImageResultJudge.cpp index 0a15846..9d1a722 100644 --- a/AlgorithmModule/src/ImageResultJudge.cpp +++ b/AlgorithmModule/src/ImageResultJudge.cpp @@ -415,6 +415,7 @@ int ImageResultJudge::ResultJudge(std::shared_ptr pImageResult) Judge_Status = true; checkFlage = ANALYSIS_TYPE_TF; nerrortype = 1; + bNG_Status = true; } } // 暗点 3S 分析 对 好品 或者 是 疑是的缺陷进行3S分析。S数量分析。 3S的暗点直接NG. diff --git a/AlgorithmModule/src/ImgCheckAnalysisy.cpp b/AlgorithmModule/src/ImgCheckAnalysisy.cpp index 9d05963..c594317 100644 --- a/AlgorithmModule/src/ImgCheckAnalysisy.cpp +++ b/AlgorithmModule/src/ImgCheckAnalysisy.cpp @@ -589,6 +589,7 @@ int ImgCheckAnalysisy::SetNewConfig() m_pRegionAnalysisyParam = &m_pCommonAnalysisyConfig->regionConfigArr.at(0); GetParamidx(); UpdateImgageScale(); + UPdateLDConfig(); if (true) { printf("SetNewConfig m_nConfigIdx %d m_CheckConfig.strSkuName %s \n", m_nConfigIdx, m_AnalysisyConfig.strSkuName.c_str()); @@ -3356,17 +3357,17 @@ int ImgCheckAnalysisy::BLobToDetResult() config_qx_type == CONFIG_QX_NAME_Other || config_qx_type == CONFIG_QX_NAME_LD) { - std::string qx_name = CONFIG_QX_NAME_Names[config_qx_type]; + qx_name = CONFIG_QX_NAME_Names[config_qx_type]; // m_TemCheck.AddCheckstr(PrintLevel_3, DET_LOG_LEVEL_3, "LD", "stsrt config_qx_type %s ", qx_name.c_str()); int dbresult = LDJudge(config_qx_type, roi, JudgArea, blobs.blobTab[i].maxValue, blobs.blobTab[i].grayDis, pQxlog); - int detre = 1; + //int detre = 1; // 表示L0 和 DP 都有的 亮的 if (dbresult == 1) { config_qx_type = CONFIG_QX_NAME_LD; qx_name = CONFIG_QX_NAME_Names[config_qx_type]; } - pQxlog->AddCheckstr(PrintLevel_2, DET_LOG_LEVEL_3, " LD Judge ", "%s qx %s ", Re_TO_STR_False(detre), qx_name.c_str()); + pQxlog->AddCheckstr(PrintLevel_2, DET_LOG_LEVEL_3, " LD Judge ", "%s qx %s ", Re_TO_STR_Pass_1(dbresult), qx_name.c_str()); } // 如果是chess 画面,缺陷类型直接是chess异常。 if (m_pFuntion->function.f_AIQX.bAllToChess) @@ -3450,7 +3451,7 @@ int ImgCheckAnalysisy::BLobToDetResult() bool ban = JudgeQXAnalysis(config_qx_type, pQxlog); if (!ban) { - std::string qx_name = CONFIG_QX_NAME_Names[config_qx_type]; + qx_name = CONFIG_QX_NAME_Names[config_qx_type]; pQxlog->AddCheckstr(PrintLevel_2, DET_LOG_LEVEL_3, "Judge QX", "qx function close, config_qx_type %s Not Det", qx_name.c_str()); @@ -3467,7 +3468,7 @@ int ImgCheckAnalysisy::BLobToDetResult() isMarksheildQX = Judge_MarkLine_QX(config_qx_type, roi, pQxlog); if (isMarksheildQX) { - std::string qx_name = CONFIG_QX_NAME_Names[config_qx_type]; + qx_name = CONFIG_QX_NAME_Names[config_qx_type]; pQxlog->AddCheckstr(PrintLevel_2, DET_LOG_LEVEL_3, "MarkLine_QX", "MarkLine_QX close, config_qx_type %s Not Det", qx_name.c_str()); diff --git a/ConfigModule/include/CheckConfigDefine.h b/ConfigModule/include/CheckConfigDefine.h index 11497a5..e9251d9 100644 --- a/ConfigModule/include/CheckConfigDefine.h +++ b/ConfigModule/include/CheckConfigDefine.h @@ -85,7 +85,7 @@ static std::vector CONFIG_QX_NAME_Names = "Broken_line", "zara", "MTX", - "Pol_Cell", + "POL_Cell", "LD", "AD", "Scratch_L1", From c1f4a2b451b450c3465aab8d34fc6aec3c97f4a6 Mon Sep 17 00:00:00 2001 From: liusiyang Date: Fri, 5 Jun 2026 15:00:20 +0800 Subject: [PATCH 3/8] =?UTF-8?q?update=20=E5=90=8C=E6=AD=A5cell=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=BB=B6=E8=BF=9F=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ConfigModule/src/ConfigInstance.cpp | 1 + ConfigModule/src/ConfigManager.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ConfigModule/src/ConfigInstance.cpp b/ConfigModule/src/ConfigInstance.cpp index 8755cd0..4b225da 100644 --- a/ConfigModule/src/ConfigInstance.cpp +++ b/ConfigModule/src/ConfigInstance.cpp @@ -213,6 +213,7 @@ int ConfigInstance::Updata_Check(Json::Value json_value) int ConfigInstance::SetStatus(int nConfigType) { + std::lock_guard lock(mutex_status); for (int i = 0; i < MAX_USER_COUNT; i++) { m_USER_ConfigUpdataStatusList[nConfigType][i] = true; diff --git a/ConfigModule/src/ConfigManager.cpp b/ConfigModule/src/ConfigManager.cpp index 1d78b57..70439ce 100644 --- a/ConfigModule/src/ConfigManager.cpp +++ b/ConfigModule/src/ConfigManager.cpp @@ -203,6 +203,7 @@ int ConfigManager::UpdateConfig() if (!std::filesystem::exists(strConfigPath)) { strConfigPath = m_strConfigRootPath + "/param.json"; } + printf("read param %s\n", strConfigPath.c_str()); std::shared_ptr temConfig = ConfigBase::GetInstance(); re = LoadParamConfig(temConfig, strConfigPath); if (re != 0) @@ -218,7 +219,12 @@ int ConfigManager::UpdateConfig() printf("Error >>>> camear Name is empty \n"); continue; } - Config_instances_[p.commonCheckConfig.baseConfig.strCamearName] = temConfig; + auto it = Config_instances_.find(p.commonCheckConfig.baseConfig.strCamearName); + if (it != Config_instances_.end() && it->second) { + LoadParamConfig(it->second, strConfigPath); + } else { + Config_instances_[p.commonCheckConfig.baseConfig.strCamearName] = temConfig; + } } // getchar(); From 085784744458c0365d5bb40796bcc0aff40c1360 Mon Sep 17 00:00:00 2001 From: liusiyang Date: Fri, 5 Jun 2026 18:15:49 +0800 Subject: [PATCH 4/8] =?UTF-8?q?fix=20=E6=9B=B4=E6=94=B9=E7=81=B0=E9=98=B6?= =?UTF-8?q?=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AlgorithmModule/include/CheckUtil.hpp | 1 + AlgorithmModule/src/CheckUtil.cpp | 26 +++++++++++++++++++++++ AlgorithmModule/src/ImgCheckAnalysisy.cpp | 4 ++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/AlgorithmModule/include/CheckUtil.hpp b/AlgorithmModule/include/CheckUtil.hpp index 946fc47..c781c31 100644 --- a/AlgorithmModule/include/CheckUtil.hpp +++ b/AlgorithmModule/include/CheckUtil.hpp @@ -44,6 +44,7 @@ public: static int SizeRect(cv::Rect &roi, int img_w, int img_h, int addw, int addh); static int CalHj(const cv::Mat &img, const cv::Mat &mask, int b_value); static int CalHj(const cv::Mat &img, const cv::Mat &mask, const cv::Mat &backgroundimg); + static int CalHjWeighted(const cv::Mat &img, const cv::Mat &mask, int b_value, float power = 2.0f); static float CalRoi2RoiPre(cv::Rect rect1, cv::Rect rect2); // 计算平均灰度 static float CalImgBrightness(cv::Mat imgRoi); diff --git a/AlgorithmModule/src/CheckUtil.cpp b/AlgorithmModule/src/CheckUtil.cpp index 7b247f8..d4848a1 100644 --- a/AlgorithmModule/src/CheckUtil.cpp +++ b/AlgorithmModule/src/CheckUtil.cpp @@ -457,6 +457,32 @@ int CheckUtil::CalHj(const cv::Mat &img, const cv::Mat &mask, const cv::Mat &bac return meanValue123[0]; } +int CheckUtil::CalHjWeighted(const cv::Mat &img, const cv::Mat &mask, int b_value, float power) +{ + cv::Mat imgf; + if (img.type() != CV_32F) + img.convertTo(imgf, CV_32F); + else + imgf = img; + + cv::Mat absDiff = cv::abs(imgf - b_value); + + cv::Mat weight; + cv::pow(absDiff, power, weight); + + cv::Mat maskedDiff, maskedWeight; + absDiff.copyTo(maskedDiff, mask); + weight.copyTo(maskedWeight, mask); + + cv::Scalar weightedSum = cv::sum(maskedDiff.mul(weight)); + cv::Scalar weightSum = cv::sum(maskedWeight); + + if (weightSum[0] < 1e-6) + return 0; + + return static_cast(weightedSum[0] / weightSum[0]); +} + float CheckUtil::CalRoi2RoiPre(cv::Rect rect1, cv::Rect rect2) { // 计算交集区域 diff --git a/AlgorithmModule/src/ImgCheckAnalysisy.cpp b/AlgorithmModule/src/ImgCheckAnalysisy.cpp index c594317..3033aac 100644 --- a/AlgorithmModule/src/ImgCheckAnalysisy.cpp +++ b/AlgorithmModule/src/ImgCheckAnalysisy.cpp @@ -332,7 +332,7 @@ cv::Scalar ImgCheckAnalysisy::calc_blob_info_withstats(cv::Mat &img, const cv::M // 计算 hj(差异图像大于0的像素均值) // double hj = std::abs(fbk - fdet); - double hj = CheckUtil::CalHj(cimg, cmask, mean_bk.val[0]); + double hj = CheckUtil::CalHjWeighted(cimg, cmask, fbk, 2.0f); int worb = 0; if (fdet >= fbk) @@ -381,7 +381,7 @@ double ImgCheckAnalysisy::CalBlobHJ(cv::Mat &img, const cv::Mat &mask, cv::Rect // 计算 hj(差异图像大于0的像素均值) // double hj = std::abs(fbk - fdet); - double hj = CheckUtil::CalHj(cimg, cmask, fbk); + double hj = CheckUtil::CalHjWeighted(cimg, cmask, fbk, 2.0f); static int kkk = 0; unsigned char *pErrordata = (unsigned char *)cimg.data; From 29086815bc6819694890c47814f89d6e9ab90e05 Mon Sep 17 00:00:00 2001 From: liusiyang Date: Mon, 8 Jun 2026 11:32:45 +0800 Subject: [PATCH 5/8] =?UTF-8?q?fix=20=E5=90=8C=E4=BD=8D=E7=BD=AE3s?= =?UTF-8?q?=E6=9A=97=E7=82=B9=E6=8A=A5=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AlgorithmModule/src/QX_Merge_Analysis.cpp | 4 + ConfigModule/src/JsonConfig.cpp | 150 ++++++++++------------ 2 files changed, 75 insertions(+), 79 deletions(-) diff --git a/AlgorithmModule/src/QX_Merge_Analysis.cpp b/AlgorithmModule/src/QX_Merge_Analysis.cpp index b02aaf5..fd44ccc 100644 --- a/AlgorithmModule/src/QX_Merge_Analysis.cpp +++ b/AlgorithmModule/src/QX_Merge_Analysis.cpp @@ -972,6 +972,10 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx) } A_2S_num += AD_list.at(ad_i).num_2s; A_3S_num += AD_list.at(ad_i).num_3s; + if(AD_list.at(ad_i).num_1s > 2) A_2S_num++; + if(AD_list.at(ad_i).num_1s > 3) A_3S_num++; + if(AD_list.at(ad_i).num_2s > 2) A_2S_num++; + if(AD_list.at(ad_i).num_2s > 3) A_3S_num++; m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "AD_list %d %s", ad_i, AD_list.at(ad_i).GetInfo().c_str()); } diff --git a/ConfigModule/src/JsonConfig.cpp b/ConfigModule/src/JsonConfig.cpp index b838f7f..3506282 100644 --- a/ConfigModule/src/JsonConfig.cpp +++ b/ConfigModule/src/JsonConfig.cpp @@ -32,7 +32,7 @@ void CommonParamToCheckConfigJson::toObjectFromValue(Json::Value root) std::unique_ptr reader(builder.newCharReader()); Json::Value rootvalue; std::string err; - // std::cout << strJson << std::endl; + std::cout << strJson << std::endl; auto nSize = strJson.size(); if (reader->parse(strJson.c_str(), strJson.c_str() + nSize, &rootvalue, &err)) { @@ -48,7 +48,8 @@ void CommonParamToCheckConfigJson::toObjectFromValue(Json::Value root) if ( _config.baseConfig.strConfigVersion == "") { _config.baseConfig.strConfigVersion = "NULL"; - } + } + _config.baseConfig.image_widht = value["image_widht"].asInt(); _config.baseConfig.Image_height = value["Image_height"].asInt(); _config.baseConfig.bDrawShieldRoi = value["bDrawShieldRoi"].asBool(); @@ -953,83 +954,6 @@ int ChannelFuntonConfigJson::GetFunction(Json::Value value, CheckFunction &funct } // getchar(); } - // 暗点检测 - if ("AD_Check" == strCode) - { - auto value_f = value[i]; - // std::cout << value_f << std::endl; - function.f_AD_Check.bOpen = value_f["isOpen"].asBool(); - if (function.f_AD_Check.bOpen) - { - if (value_f["form"]["AD_S_Standard"]["AD_3S_Area"]) - { - function.f_AD_Check.S_standard_3s.area = value_f["form"]["AD_S_Standard"]["AD_3S_Area"].asFloat(); - } - if (value_f["form"]["AD_S_Standard"]["AD_3S_Len"]) - { - function.f_AD_Check.S_standard_3s.len = value_f["form"]["AD_S_Standard"]["AD_3S_Len"].asFloat(); - } - - if (value_f["form"]["AD_S_Standard"]["AD_2S_Area"]) - { - function.f_AD_Check.S_standard_2s.area = value_f["form"]["AD_S_Standard"]["AD_2S_Area"].asFloat(); - } - if (value_f["form"]["AD_S_Standard"]["AD_2S_Len"]) - { - function.f_AD_Check.S_standard_2s.len = value_f["form"]["AD_S_Standard"]["AD_2S_Len"].asFloat(); - } - - if (value_f["form"]["AD_S_Standard"]["AD_1S_Area"]) - { - function.f_AD_Check.S_standard_1s.area = value_f["form"]["AD_S_Standard"]["AD_1S_Area"].asFloat(); - } - if (value_f["form"]["AD_S_Standard"]["AD_1S_Len"]) - { - function.f_AD_Check.S_standard_1s.len = value_f["form"]["AD_S_Standard"]["AD_1S_Len"].asFloat(); - } - - if (value_f["form"]["AD_Check_Num"]["Open"]) - { - function.f_AD_Check.analysis_num.bOpen = value_f["form"]["AD_Check_Num"]["Open"].asBool(); - } - if (value_f["form"]["AD_Check_Num"]["Num"]) - { - function.f_AD_Check.analysis_num.numT = value_f["form"]["AD_Check_Num"]["Num"].asInt(); - } - - if (value_f["form"]["AD_Check_Dis"]["Open"]) - { - function.f_AD_Check.analysis_dis.bOpen = value_f["form"]["AD_Check_Dis"]["Open"].asBool(); - } - if (value_f["form"]["AD_Check_Dis"]["Dis"]) - { - function.f_AD_Check.analysis_dis.disT = value_f["form"]["AD_Check_Dis"]["Dis"].asFloat(); - } - - if (value_f["form"]["AD_Check_S"]["Open"]) - { - function.f_AD_Check.analysis_s.bOpen = value_f["form"]["AD_Check_S"]["Open"].asBool(); - } - - if (value_f["form"]["AD_Check_S"]["S_value"]) - { - function.f_AD_Check.analysis_s.Check_s_Value = value_f["form"]["AD_Check_S"]["S_value"].asInt(); - } - if (value_f["form"]["AD_Check_S"]["NG_3s"]) - { - function.f_AD_Check.analysis_s.NG_3s = value_f["form"]["AD_Check_S"]["NG_3s"].asBool(); - } - if (value_f["form"]["AD_Check_S"]["Num"]) - { - function.f_AD_Check.analysis_s.Check_s_Num = value_f["form"]["AD_Check_S"]["Num"].asInt(); - } - } - else - { - function.f_AD_Check.Init(); - } - // getchar(); - } // 异物检测 if ("POL_Cam" == strCode) { @@ -1315,6 +1239,74 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value) // _config.edgeDet.print("edgeDet"); // getchar(); } + if ("AD_Check" == strCode) + { + auto value_f = value; + _config.ad_check.bOpen = value_f["isOpen"].asBool(); + if (_config.ad_check.bOpen) + { + if (value_f["form"]["AD_S_Standard"]["AD_3S_Area"]) + { + _config.ad_check.S_standard_3s.area = value_f["form"]["AD_S_Standard"]["AD_3S_Area"].asFloat(); + } + if (value_f["form"]["AD_S_Standard"]["AD_3S_Len"]) + { + _config.ad_check.S_standard_3s.len = value_f["form"]["AD_S_Standard"]["AD_3S_Len"].asFloat(); + } + if (value_f["form"]["AD_S_Standard"]["AD_2S_Area"]) + { + _config.ad_check.S_standard_2s.area = value_f["form"]["AD_S_Standard"]["AD_2S_Area"].asFloat(); + } + if (value_f["form"]["AD_S_Standard"]["AD_2S_Len"]) + { + _config.ad_check.S_standard_2s.len = value_f["form"]["AD_S_Standard"]["AD_2S_Len"].asFloat(); + } + if (value_f["form"]["AD_S_Standard"]["AD_1S_Area"]) + { + _config.ad_check.S_standard_1s.area = value_f["form"]["AD_S_Standard"]["AD_1S_Area"].asFloat(); + } + if (value_f["form"]["AD_S_Standard"]["AD_1S_Len"]) + { + _config.ad_check.S_standard_1s.len = value_f["form"]["AD_S_Standard"]["AD_1S_Len"].asFloat(); + } + if (value_f["form"]["AD_Check_Num"]["Open"]) + { + _config.ad_check.analysis_num.bOpen = value_f["form"]["AD_Check_Num"]["Open"].asBool(); + } + if (value_f["form"]["AD_Check_Num"]["Num"]) + { + _config.ad_check.analysis_num.numT = value_f["form"]["AD_Check_Num"]["Num"].asInt(); + } + if (value_f["form"]["AD_Check_Dis"]["Open"]) + { + _config.ad_check.analysis_dis.bOpen = value_f["form"]["AD_Check_Dis"]["Open"].asBool(); + } + if (value_f["form"]["AD_Check_Dis"]["Dis"]) + { + _config.ad_check.analysis_dis.disT = value_f["form"]["AD_Check_Dis"]["Dis"].asFloat(); + } + if (value_f["form"]["AD_S_Analysis"]["Open"]) + { + _config.ad_check.analysis_s.bOpen = value_f["form"]["AD_S_Analysis"]["Open"].asBool(); + } + if (value_f["form"]["AD_S_Analysis"]["NG_3S"]) + { + _config.ad_check.analysis_s.NG_3s = value_f["form"]["AD_S_Analysis"]["NG_3S"].asBool(); + } + if (value_f["form"]["AD_S_Analysis"]["S_Value"]) + { + _config.ad_check.analysis_s.Check_s_Value = value_f["form"]["AD_S_Analysis"]["S_Value"].asInt(); + } + if (value_f["form"]["AD_S_Analysis"]["S_Num"]) + { + _config.ad_check.analysis_s.Check_s_Num = value_f["form"]["AD_S_Analysis"]["S_Num"].asInt(); + } + } + else + { + _config.ad_check.Init(); + } + } if ("Det_Image_Save" == strCode) { auto value_f = value; From 8728bbdb6888adaed0d2b0bf524f27087a51b84c Mon Sep 17 00:00:00 2001 From: liusiyang Date: Tue, 9 Jun 2026 11:00:32 +0800 Subject: [PATCH 6/8] =?UTF-8?q?update=20=E6=A0=87=E7=AD=BE=E5=A4=96?= =?UTF-8?q?=E6=89=A92pix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AlgorithmModule/src/CameraCheckAnalysisy.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AlgorithmModule/src/CameraCheckAnalysisy.cpp b/AlgorithmModule/src/CameraCheckAnalysisy.cpp index 5bd93b8..2828720 100644 --- a/AlgorithmModule/src/CameraCheckAnalysisy.cpp +++ b/AlgorithmModule/src/CameraCheckAnalysisy.cpp @@ -724,6 +724,10 @@ int CameraCheckAnalysisy::preDet_BQ(const cv::Mat &L255CutImg, std::shared_ptrcameraBaseResult->pBQ_Result->pBQ_roiList.size(); i++) { cv::Rect boundingRect = m_pCheck_Result->cameraBaseResult->pBQ_Result->pBQ_roiList.at(i); + boundingRect.x -= 2; + boundingRect.y -= 2; + boundingRect.width += 4; + boundingRect.height += 4; detImg_mask(boundingRect).setTo(255); } if (L255->result->in_shareImage->bDebugsaveImg) From b535bc481e2d5de85c8d5338fc3a87116476cfeb Mon Sep 17 00:00:00 2001 From: liusiyang Date: Wed, 10 Jun 2026 16:54:53 +0800 Subject: [PATCH 7/8] =?UTF-8?q?fix=20=E5=BC=82=E7=89=A9=E6=BC=8F=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ConfigModule/include/CheckConfigDefine.h | 2 +- ConfigModule/src/JsonConfig.cpp | 145 ++++++++++++----------- 2 files changed, 78 insertions(+), 69 deletions(-) diff --git a/ConfigModule/include/CheckConfigDefine.h b/ConfigModule/include/CheckConfigDefine.h index e9251d9..11497a5 100644 --- a/ConfigModule/include/CheckConfigDefine.h +++ b/ConfigModule/include/CheckConfigDefine.h @@ -85,7 +85,7 @@ static std::vector CONFIG_QX_NAME_Names = "Broken_line", "zara", "MTX", - "POL_Cell", + "Pol_Cell", "LD", "AD", "Scratch_L1", diff --git a/ConfigModule/src/JsonConfig.cpp b/ConfigModule/src/JsonConfig.cpp index 3506282..6168c86 100644 --- a/ConfigModule/src/JsonConfig.cpp +++ b/ConfigModule/src/JsonConfig.cpp @@ -954,6 +954,83 @@ int ChannelFuntonConfigJson::GetFunction(Json::Value value, CheckFunction &funct } // getchar(); } + // 暗点检测 + if ("AD_Check" == strCode) + { + auto value_f = value[i]; + // std::cout << value_f << std::endl; + function.f_AD_Check.bOpen = value_f["isOpen"].asBool(); + if (function.f_AD_Check.bOpen) + { + if (value_f["form"]["AD_S_Standard"]["AD_3S_Area"]) + { + function.f_AD_Check.S_standard_3s.area = value_f["form"]["AD_S_Standard"]["AD_3S_Area"].asFloat(); + } + if (value_f["form"]["AD_S_Standard"]["AD_3S_Len"]) + { + function.f_AD_Check.S_standard_3s.len = value_f["form"]["AD_S_Standard"]["AD_3S_Len"].asFloat(); + } + + if (value_f["form"]["AD_S_Standard"]["AD_2S_Area"]) + { + function.f_AD_Check.S_standard_2s.area = value_f["form"]["AD_S_Standard"]["AD_2S_Area"].asFloat(); + } + if (value_f["form"]["AD_S_Standard"]["AD_2S_Len"]) + { + function.f_AD_Check.S_standard_2s.len = value_f["form"]["AD_S_Standard"]["AD_2S_Len"].asFloat(); + } + + if (value_f["form"]["AD_S_Standard"]["AD_1S_Area"]) + { + function.f_AD_Check.S_standard_1s.area = value_f["form"]["AD_S_Standard"]["AD_1S_Area"].asFloat(); + } + if (value_f["form"]["AD_S_Standard"]["AD_1S_Len"]) + { + function.f_AD_Check.S_standard_1s.len = value_f["form"]["AD_S_Standard"]["AD_1S_Len"].asFloat(); + } + + if (value_f["form"]["AD_Check_Num"]["Open"]) + { + function.f_AD_Check.analysis_num.bOpen = value_f["form"]["AD_Check_Num"]["Open"].asBool(); + } + if (value_f["form"]["AD_Check_Num"]["Num"]) + { + function.f_AD_Check.analysis_num.numT = value_f["form"]["AD_Check_Num"]["Num"].asInt(); + } + + if (value_f["form"]["AD_Check_Dis"]["Open"]) + { + function.f_AD_Check.analysis_dis.bOpen = value_f["form"]["AD_Check_Dis"]["Open"].asBool(); + } + if (value_f["form"]["AD_Check_Dis"]["Dis"]) + { + function.f_AD_Check.analysis_dis.disT = value_f["form"]["AD_Check_Dis"]["Dis"].asFloat(); + } + + if (value_f["form"]["AD_Check_S"]["Open"]) + { + function.f_AD_Check.analysis_s.bOpen = value_f["form"]["AD_Check_S"]["Open"].asBool(); + } + + if (value_f["form"]["AD_Check_S"]["S_value"]) + { + function.f_AD_Check.analysis_s.Check_s_Value = value_f["form"]["AD_Check_S"]["S_value"].asInt(); + } + if (value_f["form"]["AD_Check_S"]["NG_3s"]) + { + function.f_AD_Check.analysis_s.NG_3s = value_f["form"]["AD_Check_S"]["NG_3s"].asBool(); + } + if (value_f["form"]["AD_Check_S"]["Num"]) + { + function.f_AD_Check.analysis_s.Check_s_Num = value_f["form"]["AD_Check_S"]["Num"].asInt(); + } + } + else + { + function.f_AD_Check.Init(); + } + // getchar(); + } // 异物检测 if ("POL_Cam" == strCode) { @@ -1239,74 +1316,6 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value) // _config.edgeDet.print("edgeDet"); // getchar(); } - if ("AD_Check" == strCode) - { - auto value_f = value; - _config.ad_check.bOpen = value_f["isOpen"].asBool(); - if (_config.ad_check.bOpen) - { - if (value_f["form"]["AD_S_Standard"]["AD_3S_Area"]) - { - _config.ad_check.S_standard_3s.area = value_f["form"]["AD_S_Standard"]["AD_3S_Area"].asFloat(); - } - if (value_f["form"]["AD_S_Standard"]["AD_3S_Len"]) - { - _config.ad_check.S_standard_3s.len = value_f["form"]["AD_S_Standard"]["AD_3S_Len"].asFloat(); - } - if (value_f["form"]["AD_S_Standard"]["AD_2S_Area"]) - { - _config.ad_check.S_standard_2s.area = value_f["form"]["AD_S_Standard"]["AD_2S_Area"].asFloat(); - } - if (value_f["form"]["AD_S_Standard"]["AD_2S_Len"]) - { - _config.ad_check.S_standard_2s.len = value_f["form"]["AD_S_Standard"]["AD_2S_Len"].asFloat(); - } - if (value_f["form"]["AD_S_Standard"]["AD_1S_Area"]) - { - _config.ad_check.S_standard_1s.area = value_f["form"]["AD_S_Standard"]["AD_1S_Area"].asFloat(); - } - if (value_f["form"]["AD_S_Standard"]["AD_1S_Len"]) - { - _config.ad_check.S_standard_1s.len = value_f["form"]["AD_S_Standard"]["AD_1S_Len"].asFloat(); - } - if (value_f["form"]["AD_Check_Num"]["Open"]) - { - _config.ad_check.analysis_num.bOpen = value_f["form"]["AD_Check_Num"]["Open"].asBool(); - } - if (value_f["form"]["AD_Check_Num"]["Num"]) - { - _config.ad_check.analysis_num.numT = value_f["form"]["AD_Check_Num"]["Num"].asInt(); - } - if (value_f["form"]["AD_Check_Dis"]["Open"]) - { - _config.ad_check.analysis_dis.bOpen = value_f["form"]["AD_Check_Dis"]["Open"].asBool(); - } - if (value_f["form"]["AD_Check_Dis"]["Dis"]) - { - _config.ad_check.analysis_dis.disT = value_f["form"]["AD_Check_Dis"]["Dis"].asFloat(); - } - if (value_f["form"]["AD_S_Analysis"]["Open"]) - { - _config.ad_check.analysis_s.bOpen = value_f["form"]["AD_S_Analysis"]["Open"].asBool(); - } - if (value_f["form"]["AD_S_Analysis"]["NG_3S"]) - { - _config.ad_check.analysis_s.NG_3s = value_f["form"]["AD_S_Analysis"]["NG_3S"].asBool(); - } - if (value_f["form"]["AD_S_Analysis"]["S_Value"]) - { - _config.ad_check.analysis_s.Check_s_Value = value_f["form"]["AD_S_Analysis"]["S_Value"].asInt(); - } - if (value_f["form"]["AD_S_Analysis"]["S_Num"]) - { - _config.ad_check.analysis_s.Check_s_Num = value_f["form"]["AD_S_Analysis"]["S_Num"].asInt(); - } - } - else - { - _config.ad_check.Init(); - } - } if ("Det_Image_Save" == strCode) { auto value_f = value; From eba708f32a9dd7a376891781904e7a1499ffecad Mon Sep 17 00:00:00 2001 From: liusiyang Date: Wed, 10 Jun 2026 16:56:09 +0800 Subject: [PATCH 8/8] =?UTF-8?q?fix=203s=E6=9A=97=E7=82=B9=E6=BC=8F?= =?UTF-8?q?=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AlgorithmModule/src/ImgCheckAnalysisy.cpp | 2 +- AlgorithmModule/src/QX_Merge_Analysis.cpp | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/AlgorithmModule/src/ImgCheckAnalysisy.cpp b/AlgorithmModule/src/ImgCheckAnalysisy.cpp index 57a6d6c..ebc3bbb 100644 --- a/AlgorithmModule/src/ImgCheckAnalysisy.cpp +++ b/AlgorithmModule/src/ImgCheckAnalysisy.cpp @@ -170,7 +170,7 @@ int ImgCheckAnalysisy::GetStatus() std::string ImgCheckAnalysisy::GetVersion() { - return std::string("BOE_1.2.0"); + return std::string("BOE_1.2.1_" + std::string(__DATE__) + "_" + std::string(__TIME__)); } std::string ImgCheckAnalysisy::GetErrorInfo() diff --git a/AlgorithmModule/src/QX_Merge_Analysis.cpp b/AlgorithmModule/src/QX_Merge_Analysis.cpp index fd44ccc..1325992 100644 --- a/AlgorithmModule/src/QX_Merge_Analysis.cpp +++ b/AlgorithmModule/src/QX_Merge_Analysis.cpp @@ -972,10 +972,7 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx) } A_2S_num += AD_list.at(ad_i).num_2s; A_3S_num += AD_list.at(ad_i).num_3s; - if(AD_list.at(ad_i).num_1s > 2) A_2S_num++; - if(AD_list.at(ad_i).num_1s > 3) A_3S_num++; - if(AD_list.at(ad_i).num_2s > 2) A_2S_num++; - if(AD_list.at(ad_i).num_2s > 3) A_3S_num++; + if(AD_list.at(ad_i).num_1s >= 3) A_3S_num++; m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "AD_list %d %s", ad_i, AD_list.at(ad_i).GetInfo().c_str()); } @@ -1032,7 +1029,7 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx) } else { - m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "3S Analysis --> %s result NG 3S %d < 1", + m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "3S Analysis --> %s result OK 3S %d < 1", pQXChannelList->channel_name.c_str(), A_3S_num); } }