From 63385495a186d98708da50eae0a4462d2b0161b1 Mon Sep 17 00:00:00 2001 From: liusiyang Date: Mon, 29 Jun 2026 13:39:04 +0800 Subject: [PATCH] =?UTF-8?q?feat=20LD=E6=96=B0=E5=A2=9E=E6=A3=80=E6=B5=8B(v?= =?UTF-8?q?1.2.7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AlgorithmModule/include/ImageDetConfig.h | 1 + AlgorithmModule/src/ImgCheckAnalysisy.cpp | 34 +++++++++++++++++++---- ConfigModule/include/CheckConfigDefine.h | 16 +++++++++++ ConfigModule/src/JsonConfig.cpp | 21 ++++++++++++++ 4 files changed, 66 insertions(+), 6 deletions(-) diff --git a/AlgorithmModule/include/ImageDetConfig.h b/AlgorithmModule/include/ImageDetConfig.h index 8f18198..9859ef6 100644 --- a/AlgorithmModule/include/ImageDetConfig.h +++ b/AlgorithmModule/include/ImageDetConfig.h @@ -40,6 +40,7 @@ struct QX_ERROR_INFO_ float grayDis; float fUpIou; float density; // Blob- 密度 + bool bIsStandardLD; // 是否通过LD标准判定(跳过UP/DP的IOU检查) std::vector detLogList; // 检测日志 std::shared_ptr detlog; std::vector detRegionidxList; // 对应检测区域的 idx. diff --git a/AlgorithmModule/src/ImgCheckAnalysisy.cpp b/AlgorithmModule/src/ImgCheckAnalysisy.cpp index b1faf3f..275e633 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.6_" + std::string(__DATE__) + "_" + std::string(__TIME__)); + return std::string("BOE_1.2.7_" + std::string(__DATE__) + "_" + std::string(__TIME__)); } std::string ImgCheckAnalysisy::GetErrorInfo() @@ -3360,6 +3360,7 @@ int ImgCheckAnalysisy::BLobToDetResult() } } + bool bLD_Standard = false; // 是否通过LD标准判定(跳过UP/DP的IOU检查) if (config_qx_type == CONFIG_QX_NAME_MTX || config_qx_type == CONFIG_QX_NAME_POL_Cell || config_qx_type == CONFIG_QX_NAME_Other || @@ -3367,7 +3368,24 @@ int ImgCheckAnalysisy::BLobToDetResult() { 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 dbresult = -1; + if(m_pFuntion->function.f_LDConfig.bOpen && m_pFuntion->function.f_LDConfig.bUseLD_Standard) + { + if(blobs.blobTab[i].JudgArea >= m_pFuntion->function.f_LDConfig.fLD_Area && + blobs.blobTab[i].grayDis >= m_pFuntion->function.f_LDConfig.fLD_HJ && + blobs.blobTab[i].energy >= m_pFuntion->function.f_LDConfig.fLD_En && + blobs.blobTab[i].len >= m_pFuntion->function.f_LDConfig.fLD_Len) + { + dbresult = 1; + bLD_Standard = true; + } + pQxlog->AddCheckstr(PrintLevel_3, DET_LOG_LEVEL_3, "LD Analysis", "Area %0.2f > %0.2f , hj %0.2f > %0.2f , Energy %0.2f > %0.2f , len %0.2f > %0.2f", + blobs.blobTab[i].JudgArea, m_pFuntion->function.f_LDConfig.fLD_Area, blobs.blobTab[i].grayDis, m_pFuntion->function.f_LDConfig.fLD_HJ, blobs.blobTab[i].energy, m_pFuntion->function.f_LDConfig.fLD_En, blobs.blobTab[i].len, m_pFuntion->function.f_LDConfig.fLD_Len); + } + if(dbresult != 1) + { + dbresult = LDJudge(config_qx_type, roi, JudgArea, blobs.blobTab[i].maxValue, blobs.blobTab[i].grayDis, pQxlog); + } //int detre = 1; // 表示L0 和 DP 都有的 亮的 if (dbresult == 1) @@ -3375,8 +3393,7 @@ int ImgCheckAnalysisy::BLobToDetResult() 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_Pass_1(dbresult), 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) { @@ -3437,8 +3454,8 @@ int ImgCheckAnalysisy::BLobToDetResult() QX_Stauts qx_status = QX_Stauts_Analysis; - // 和UP画面进行IOU判断 - if (m_pFuntion->function.f_UseUpQX.bOpen) + // 和UP画面进行IOU判断 (通过亮点标准的缺陷跳过此检查) + if (!bLD_Standard && m_pFuntion->function.f_UseUpQX.bOpen) { if (fupS >= m_pFuntion->function.f_UseUpQX.fIOU) { @@ -3450,6 +3467,10 @@ int ImgCheckAnalysisy::BLobToDetResult() pQxlog->AddCheckstr(PrintLevel_2, DET_LOG_LEVEL_3, "Up Mask judge", "UseUpQX.bOpen = true ;fupS = %0.2f < %02f ", fupS, m_pFuntion->function.f_UseUpQX.fIOU); } } + else if (bLD_Standard) + { + pQxlog->AddCheckstr(PrintLevel_2, DET_LOG_LEVEL_3, "Up Mask judge", "bLD_Standard = true, skip UP/DP IOU check ;fupS = %0.2f ", fupS); + } else { pQxlog->AddCheckstr(PrintLevel_2, DET_LOG_LEVEL_3, "Up Mask judge", "UseUpQX.bOpen = false ;fupS = %0.2f ", fupS); @@ -3505,6 +3526,7 @@ int ImgCheckAnalysisy::BLobToDetResult() temerror.grayDis = blobs.blobTab[i].grayDis; temerror.density = blobs.blobTab[i].density; temerror.fUpIou = fupS; + temerror.bIsStandardLD = bLD_Standard; temerror.whiteOrBlack = blobs.blobTab[i].whiteOrblack; temerror.qx_status = qx_status; diff --git a/ConfigModule/include/CheckConfigDefine.h b/ConfigModule/include/CheckConfigDefine.h index c290680..e1ddb7c 100644 --- a/ConfigModule/include/CheckConfigDefine.h +++ b/ConfigModule/include/CheckConfigDefine.h @@ -869,6 +869,12 @@ struct Function_AI_LD bool bWTBLD; // 是否是WTB亮点 bool bHSLD; // 黑闪类型的亮点 float fDP_IOU; // DP的IOU + + bool bUseLD_Standard; // 是否使用亮点标准化参数 + float fLD_Area; // 亮点面积 + float fLD_En; // 亮点的能量 + float fLD_HJ; // 亮点灰阶 + float fLD_Len; // 亮点长度 Function_AI_LD() { Init(); @@ -880,6 +886,11 @@ struct Function_AI_LD bWTBLD = false; bHSLD = false; fDP_IOU = 0.1; + fLD_Area = -1; + fLD_En = -1; + fLD_HJ = -1; + fLD_Len = -1; + bUseLD_Standard = false; } void copy(Function_AI_LD tem) { @@ -888,6 +899,11 @@ struct Function_AI_LD this->bWTBLD = tem.bWTBLD; this->bHSLD = tem.bHSLD; this->fDP_IOU = tem.fDP_IOU; + this->fLD_Area = tem.fLD_Area; + this->fLD_En = tem.fLD_En; + this->fLD_HJ = tem.fLD_HJ; + this->fLD_Len = tem.fLD_Len; + this->bUseLD_Standard = tem.bUseLD_Standard; } void print(std::string str) { diff --git a/ConfigModule/src/JsonConfig.cpp b/ConfigModule/src/JsonConfig.cpp index 040e9c5..a2e1f79 100644 --- a/ConfigModule/src/JsonConfig.cpp +++ b/ConfigModule/src/JsonConfig.cpp @@ -560,6 +560,27 @@ int ChannelFuntonConfigJson::GetFunction(Json::Value value, CheckFunction &funct { function.f_LDConfig.fDP_IOU = value_f["form"]["LD_Det"]["DP_IOU"].asFloat(); } + + if (value_f["form"]["LD_Standard"]["LD_Area"]) + { + function.f_LDConfig.fLD_Area = value_f["form"]["LD_Standard"]["LD_Area"].asFloat(); + } + if (value_f["form"]["LD_Standard"]["LD_En"]) + { + function.f_LDConfig.fLD_En = value_f["form"]["LD_Standard"]["LD_En"].asFloat(); + } + if (value_f["form"]["LD_Standard"]["LD_HJ"]) + { + function.f_LDConfig.fLD_HJ = value_f["form"]["LD_Standard"]["LD_HJ"].asFloat(); + } + if (value_f["form"]["LD_Standard"]["LD_Len"]) + { + function.f_LDConfig.fLD_Len = value_f["form"]["LD_Standard"]["LD_Len"].asFloat(); + } + if (value_f["form"]["LD_Standard"]["bUseLD_Standard"]) + { + function.f_LDConfig.bUseLD_Standard = value_f["form"]["LD_Standard"]["bUseLD_Standard"].asBool(); + } } else {