From bc0c7eaf3e546384b19d2c94cbecb08097fe3672 Mon Sep 17 00:00:00 2001 From: liusiyang Date: Thu, 27 Aug 2026 16:18:17 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90AD?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AlgorithmModule/include/QX_Merge_Analysis.h | 37 +- AlgorithmModule/src/QX_Merge_Analysis.cpp | 391 +++++++++----------- ConfigModule/include/CheckConfigDefine.h | 9 +- 3 files changed, 227 insertions(+), 210 deletions(-) diff --git a/AlgorithmModule/include/QX_Merge_Analysis.h b/AlgorithmModule/include/QX_Merge_Analysis.h index bb17d37..47fd3a4 100644 --- a/AlgorithmModule/include/QX_Merge_Analysis.h +++ b/AlgorithmModule/include/QX_Merge_Analysis.h @@ -68,6 +68,39 @@ public: } }; + struct AD_Channel_BD_Info_ + { + cv::Rect roi; + cv::Point2f location_product_mm; + vector s_name_2; + vector s_name_3; + int s_type; + AD_Channel_BD_Info_() + { + roi = cv::Rect(0, 0, 0, 0); + location_product_mm = cv::Point2f(0, 0); + s_name_2.clear(); + s_name_3.clear(); + s_type = 0; + } + std::string GetInfo() + { + char buffer[256]; + snprintf(buffer, sizeof(buffer), "roi:[%d,%d,%d,%d] location [%f %f] s_type:%d", + roi.x, roi.y, roi.width, roi.height, location_product_mm.x, location_product_mm.y, s_type); + std::string str = buffer; + for(int i = 0; i < s_name_2.size(); i++) + { + str += " s_name_2[" + s_name_2[i] + "]"; + } + for(int i = 0; i < s_name_3.size(); i++) + { + str += " s_name_3[" + s_name_3[i] + "]"; + } + return str; + } + }; + public: QX_Merge_Analysis(); ~QX_Merge_Analysis(); @@ -118,7 +151,6 @@ private: int Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx); int Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_idx); - ChannelCheckFunction *GetChannelFuntion(std::string strChannelName); double DistanceBetweenRectCenters(const cv::Rect &rect1, const cv::Rect &rect2, float fx, float fy); @@ -142,6 +174,9 @@ private: std::vector AD_list; + std::unordered_map> AD_list_bind; + + private: }; diff --git a/AlgorithmModule/src/QX_Merge_Analysis.cpp b/AlgorithmModule/src/QX_Merge_Analysis.cpp index 8079a85..36b64b1 100644 --- a/AlgorithmModule/src/QX_Merge_Analysis.cpp +++ b/AlgorithmModule/src/QX_Merge_Analysis.cpp @@ -839,7 +839,7 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx) "%d %s 2S: cur[A %0.2f L %0.2f] parm[A %0.2f L %0.2f]", j, pQXChannelList->channel_name.c_str(), pQXChannelList->qxList[j].area, pQXChannelList->qxList[j].length, - pAd_checkParma->S_standard_2s.area, pAd_checkParma->S_standard_1s.len); + pAd_checkParma->S_standard_2s.area, pAd_checkParma->S_standard_2s.len); } else { @@ -847,7 +847,7 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx) "%d %s 1S: cur[A %0.2f L %0.2f] parm[A %0.2f L %0.2f]", j, pQXChannelList->channel_name.c_str(), pQXChannelList->qxList[j].area, pQXChannelList->qxList[j].length, - pAd_checkParma->S_standard_2s.area, pAd_checkParma->S_standard_1s.len); + pAd_checkParma->S_standard_1s.area, pAd_checkParma->S_standard_1s.len); s_det_value = 1; } if (s_det_value >= s_param_value) @@ -1137,7 +1137,6 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx) int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_idx) { - AD_list.clear(); if (!m_pbaseCheckFunction) { return 1; @@ -1149,7 +1148,38 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_ int check_s_Num = 0; int s_param_value = -1; int s_param_num = 0; - // 遍历每个通道,找到开启的 进行分析。 + + bool bana_num = false; + bool bana_dis = false; + bool bana_S = false; + if (pAd_checkParma->analysis_num.bOpen) + { + bana_num = true; + } + if (pAd_checkParma->analysis_dis.bOpen) + { + bana_dis = true; + } + if (pAd_checkParma->analysis_s.bOpen) + { + bana_S = true; + } + + m_pMergedetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD_Bind", "start bOpen %d num %d dis %d S %d", + pAd_checkParma->bOpen, bana_num, bana_dis, bana_S); + + /* 获取绑定通道 */ + vector main_channel_2s = pAd_checkParma->analysis_bind.main_channel_2s; + vector second_channel_2s = pAd_checkParma->analysis_bind.second_channel_2s; + vector main_channel_3s = pAd_checkParma->analysis_bind.main_channel_3s; + vector second_channel_3s = pAd_checkParma->analysis_bind.second_channel_3s; + + m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "Analysis_AD_Bind", "bind main_2s %d second_2s %d main_3s %d second_3s %d", + (int)main_channel_2s.size(), (int)second_channel_2s.size(), (int)main_channel_3s.size(), (int)second_channel_3s.size()); + + /* 获取主次通道的缺陷列表 */ + vector main_channel_s_qxList; + vector second_channel_s_qxList; for (int i = 0; i < pALLTypeqxList->channelqxList.size(); i++) { QX_channel_List *pQXChannelList = &pALLTypeqxList->channelqxList[i]; @@ -1164,243 +1194,198 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_ "channel %s AD Check is close", pQXChannelList->channel_name.c_str()); continue; } - bool bana_num = false; - bool bana_dis = false; - bool bana_S = false; - if (pAd_checkParma->analysis_num.bOpen) - { - bana_num = true; - } - if (pAd_checkParma->analysis_dis.bOpen) - { - bana_dis = true; - } - if (pAd_checkParma->analysis_s.bOpen) - { - bana_S = true; - } { pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_2, 3, "Analysis_AD ", "NUM --> %s Param num check %d dis check %d S check %d", pQXChannelList->channel_name.c_str(), bana_num, bana_dis, bana_S); } - if (!bana_num && !bana_dis && !bana_S) - { - continue; - } + + string cur_channel_name = pQXChannelList->channel_name; + + if (std::find(main_channel_2s.begin(), main_channel_2s.end(), cur_channel_name) != main_channel_2s.end() || + std::find(main_channel_3s.begin(), main_channel_3s.end(), cur_channel_name) != main_channel_3s.end()) + { + main_channel_s_qxList.push_back(pALLTypeqxList->channelqxList[i]); + } + if (std::find(second_channel_2s.begin(), second_channel_2s.end(), cur_channel_name) != second_channel_2s.end() || + std::find(second_channel_3s.begin(), second_channel_3s.end(), cur_channel_name) != second_channel_3s.end()) + { + second_channel_s_qxList.push_back(pALLTypeqxList->channelqxList[i]); + } + } - for (int j = 0; j < pQXChannelList->qxList.size(); j++) - { - if (pQXChannelList->qxList[j].area >= pAd_checkParma->S_standard_1s.area && - pQXChannelList->qxList[j].length >= pAd_checkParma->S_standard_1s.len) + m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "Analysis_AD_Bind", "main_channel %d second_channel %d", + (int)main_channel_s_qxList.size(), (int)second_channel_s_qxList.size()); + + /* 画面分析 */ + AD_list_bind.clear(); + for(int i_main = 0; i_main < main_channel_s_qxList.size(); i_main++) + { + string main_channel_name = main_channel_s_qxList[i_main].channel_name; + QX_channel_List *pQXChannelList_main = &main_channel_s_qxList[i_main]; + vector tmp_main_qxInfo_all; + // 遍历主通道cur_channel_name通道的缺陷 + for (int j_main = 0; j_main < pQXChannelList_main->qxList.size(); j_main++) + { + AD_Channel_BD_Info_ tmp_main_qxInfo; // 主通道单个缺陷 + if (pQXChannelList_main->qxList[j_main].area >= pAd_checkParma->S_standard_1s.area && + pQXChannelList_main->qxList[j_main].length >= pAd_checkParma->S_standard_1s.len) { } else { continue; } + tmp_main_qxInfo.roi = pQXChannelList_main->qxList[j_main].product_roi; + tmp_main_qxInfo.location_product_mm = pQXChannelList_main->qxList[j_main].pLocation_Product_mm; - tem_AD_QX_Info tem_AD_qx; // 暗点信息 - tem_AD_qx.channelidx = i; - tem_AD_qx.qxidx = j; - - int s_det_value = 0; + /*单画面*/ // 当前通道 要参与s标准分析 if (pAd_checkParma->analysis_s.bOpen) { s_param_num = pAd_checkParma->analysis_s.Check_s_Num; s_param_value = pAd_checkParma->analysis_s.Check_s_Value; - if (pQXChannelList->qxList[j].area >= pAd_checkParma->S_standard_3s.area && - pQXChannelList->qxList[j].length >= pAd_checkParma->S_standard_3s.len) + if (pQXChannelList_main->qxList[j_main].area >= pAd_checkParma->S_standard_3s.area && + pQXChannelList_main->qxList[j_main].length >= pAd_checkParma->S_standard_3s.len) { - s_det_value = 3; - pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_3, 3, "add AD ", + tmp_main_qxInfo.s_type = 3; + pQXChannelList_main->pChannelDetlog->AddCheckstr(PrintLevel_3, 3, "add AD ", "%d %s 3S: cur[A %0.2f L %0.2f] parm[A %0.2f L %0.2f]", - j, pQXChannelList->channel_name.c_str(), - pQXChannelList->qxList[j].area, pQXChannelList->qxList[j].length, + j_main, pQXChannelList_main->channel_name.c_str(), + pQXChannelList_main->qxList[j_main].area, pQXChannelList_main->qxList[j_main].length, pAd_checkParma->S_standard_3s.area, pAd_checkParma->S_standard_3s.len); } - else if (pQXChannelList->qxList[j].area >= pAd_checkParma->S_standard_2s.area && - pQXChannelList->qxList[j].length >= pAd_checkParma->S_standard_2s.len) + else if (pQXChannelList_main->qxList[j_main].area >= pAd_checkParma->S_standard_2s.area && + pQXChannelList_main->qxList[j_main].length >= pAd_checkParma->S_standard_2s.len) { - s_det_value = 2; - pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_3, 3, " add AD ", + tmp_main_qxInfo.s_type = 2; + pQXChannelList_main->pChannelDetlog->AddCheckstr(PrintLevel_3, 3, " add AD ", "%d %s 2S: cur[A %0.2f L %0.2f] parm[A %0.2f L %0.2f]", - j, pQXChannelList->channel_name.c_str(), - pQXChannelList->qxList[j].area, pQXChannelList->qxList[j].length, - pAd_checkParma->S_standard_2s.area, pAd_checkParma->S_standard_1s.len); + j_main, pQXChannelList_main->channel_name.c_str(), + pQXChannelList_main->qxList[j_main].area, pQXChannelList_main->qxList[j_main].length, + pAd_checkParma->S_standard_2s.area, pAd_checkParma->S_standard_2s.len); } else { - pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_3, 3, "add AD ", + pQXChannelList_main->pChannelDetlog->AddCheckstr(PrintLevel_3, 3, "add AD ", "%d %s 1S: cur[A %0.2f L %0.2f] parm[A %0.2f L %0.2f]", - j, pQXChannelList->channel_name.c_str(), - pQXChannelList->qxList[j].area, pQXChannelList->qxList[j].length, - pAd_checkParma->S_standard_2s.area, pAd_checkParma->S_standard_1s.len); - s_det_value = 1; - } - if (s_det_value >= s_param_value) - { - check_s_Num++; + j_main, pQXChannelList_main->channel_name.c_str(), + pQXChannelList_main->qxList[j_main].area, pQXChannelList_main->qxList[j_main].length, + pAd_checkParma->S_standard_1s.area, pAd_checkParma->S_standard_1s.len); + tmp_main_qxInfo.s_type = 1; } } - cv::Rect roi = pQXChannelList->qxList[j].product_roi; - - int list_idx = -1; - int channel_s = 0; + cv::Rect roi_main = pQXChannelList_main->qxList[j_main].product_roi; int roi_expand = (round)(pAd_checkParma->analysis_iou.AD_Expand); - bool bnew_add = true; - for (int idx = 0; idx < AD_list.size(); idx++) - { - cv::Rect tem_roi(AD_list.at(idx).roi.x-roi_expand, AD_list.at(idx).roi.y-roi_expand, AD_list.at(idx).roi.width+2*roi_expand, AD_list.at(idx).roi.height+2*roi_expand); - cv::Rect tem_roi2(roi.x-roi_expand, roi.y-roi_expand, roi.width+2*roi_expand, roi.height+2*roi_expand); - - float fiou = CheckUtil::CalIoU(AD_list.at(idx).roi, roi); - m_pMergedetlog->AddCheckstr(PrintLevel_3, 3, "CalIoU", - "roi1 %s roi2 %s expand %d iou %f", - CheckUtil::GetRectString(AD_list.at(idx).roi).c_str(), - CheckUtil::GetRectString(roi).c_str(), - roi_expand, fiou); - if (fiou > pAd_checkParma->analysis_iou.AD_IOU) - { - list_idx = idx; - } - } - // 在list已存在。 - if (list_idx >= 0) - { - AD_list.at(list_idx).num++; - AD_list.at(list_idx).numIdxList.push_back(tem_AD_qx); - - channel_s = AD_list.at(list_idx).num; - if (s_det_value == 1) - { - AD_list.at(list_idx).num_1s++; - } - else if (s_det_value == 2) - { - AD_list.at(list_idx).num_2s++; - AD_list.at(list_idx).num_2sIdxList.push_back(tem_AD_qx); - } - else - { - AD_list.at(list_idx).num_3s++; - AD_list.at(list_idx).num_3sIdxList.push_back(tem_AD_qx); - } - bnew_add = false; - } - else - { // 在list不存在。 - AD_Channel_Info_ tem; - tem.roi = roi; - tem.location_product_mm = pQXChannelList->qxList[j].pLocation_Product_mm; - tem.num = 1; - channel_s = 1; - tem.fdis = 99999999999; + roi_main = cv::Rect(roi_main.x - roi_expand, roi_main.y - roi_expand, roi_main.width + roi_expand * 2, roi_main.height + roi_expand * 2); - tem.numIdxList.push_back(tem_AD_qx); - - if (s_det_value == 1) - { - tem.num_1s++; - } - else if (s_det_value == 2) - { - tem.num_2s++; - tem.num_2sIdxList.push_back(tem_AD_qx); - } - else - { - tem.num_3s++; - tem.num_3sIdxList.push_back(tem_AD_qx); - } - AD_list.push_back(tem); - // 如果要参与数量统计 - if (bana_num) - { - product_AD_num++; - } - } - - m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "AD list size %ld; channel %s blob idx %d,new_add %d ,A %f len %f p %d %d", - AD_list.size(), pQXChannelList->channel_name.c_str(), j, bnew_add, pQXChannelList->qxList[j].area, - pQXChannelList->qxList[j].length, roi.x, roi.y); - - pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_2, 3, "Analysis_AD ", - "%d %s AD list size %ld product_AD_num Num %d; cur channel num = %d;cur S = %ds; param :%ds num %d;->S check_s_Num = %d", - j, pQXChannelList->channel_name.c_str(), AD_list.size(), - product_AD_num, channel_s, s_det_value, s_param_value, s_param_num, check_s_Num); - } - } - - float min_dis = 9999999999; - // 求最小距离 - if (true) - { - for (int ad_i = 0; ad_i < AD_list.size(); ad_i++) - { - for (int ad_j = 0; ad_j < AD_list.size(); ad_j++) + // 遍历次通道 + for(int i_second = 0; i_second < second_channel_s_qxList.size(); i_second++) { - if (ad_i == ad_j) + string second_channel_name = second_channel_s_qxList[i_second].channel_name; + if(second_channel_name == main_channel_name) { continue; } - // double dis = DistanceBetweenRectCenters(AD_list.at(ad_i).roi, AD_list.at(ad_j).roi, - // 1, - // 1); - - float dis = CheckUtil::calDis(AD_list.at(ad_i).location_product_mm, AD_list.at(ad_j).location_product_mm); - if (dis < AD_list.at(ad_i).fdis) + QX_channel_List *pQXChannelList_second = &second_channel_s_qxList[i_second]; + // 遍历次通道second_channel_name通道的缺陷 + for (int j_second = 0; j_second < pQXChannelList_second->qxList.size(); j_second++) { - AD_list.at(ad_i).fdis = dis; - AD_list.at(ad_i).dist_idx = ad_j; - if (dis < min_dis) + if (pQXChannelList_second->qxList[j_second].area >= pAd_checkParma->S_standard_1s.area && + pQXChannelList_second->qxList[j_second].length >= pAd_checkParma->S_standard_1s.len) { - min_dis = dis; } - } + else + { + continue; + } + cv::Rect roi_second = pQXChannelList_second->qxList[j_second].product_roi; + roi_second = cv::Rect(roi_second.x - roi_expand, roi_second.y - roi_expand, roi_second.width + roi_expand * 2, roi_second.height + roi_expand * 2); + float fiou = CheckUtil::CalIoU(roi_main, roi_second); + m_pMergedetlog->AddCheckstr(PrintLevel_3, 3, "CalIoU", + "roi1 %s roi2 %s expand %d iou %f", + CheckUtil::GetRectString(roi_main).c_str(), + CheckUtil::GetRectString(roi_second).c_str(), + roi_expand, fiou); + if (fiou > pAd_checkParma->analysis_iou.AD_IOU) + { + if (std::find(second_channel_2s.begin(), second_channel_2s.end(), second_channel_name) != second_channel_2s.end()) + { + tmp_main_qxInfo.s_name_2.push_back(second_channel_name); + } + if(std::find(second_channel_3s.begin(), second_channel_3s.end(), second_channel_name) != second_channel_3s.end()) + { + tmp_main_qxInfo.s_name_3.push_back(second_channel_name); + } + + break; + } + } } + m_pMergedetlog->AddCheckstr(PrintLevel_3, 3, "Analysis_AD_Bind", "main %s blob %d s_type %d s_name_2 %d s_name_3 %d roi %s", + main_channel_name.c_str(), j_main, tmp_main_qxInfo.s_type, + (int)tmp_main_qxInfo.s_name_2.size(), (int)tmp_main_qxInfo.s_name_3.size(), + CheckUtil::GetRectString(tmp_main_qxInfo.roi).c_str()); + tmp_main_qxInfo_all.push_back(tmp_main_qxInfo); + } + AD_list_bind[main_channel_name] = tmp_main_qxInfo_all; } - int A_2S_num = 0; - int A_3S_num = 0; - // 统计 2s 总数 - if (s_param_value > 0) - { - int channels = 0; - int oneimgs = check_s_Num; - for (int ad_i = 0; ad_i < AD_list.size(); ad_i++) + /* 数量距离统计 */ + int num_1s = 0; + int num_2s = 0; + int num_3s = 0; + float min_dis = 9999999999; + for(int i_main = 0; i_main < main_channel_s_qxList.size(); i_main++) + { + string main_channel_name = main_channel_s_qxList[i_main].channel_name; + for(int j = 0; j < AD_list_bind[main_channel_name].size(); j++) { - if (AD_list.at(ad_i).num > 1) + bool bproduct_AD_num = false; + // 数量统计 + if(AD_list_bind[main_channel_name][j].s_type == 1) { - AD_list.at(ad_i).num_2s++; - for (int i = 0; i < AD_list.at(ad_i).numIdxList.size(); i++) + bproduct_AD_num = true; + num_1s++; + } + if(AD_list_bind[main_channel_name][j].s_type == 2 || AD_list_bind[main_channel_name][j].s_name_2.size() >= 2) + { + bproduct_AD_num = true; + num_2s++; + } + if(AD_list_bind[main_channel_name][j].s_type == 3 || AD_list_bind[main_channel_name][j].s_name_3.size() >= 3) + { + bproduct_AD_num = true; + num_3s++; + } + if(bproduct_AD_num) + { + product_AD_num++; + } + // 距离计算 + for(int k = j + 1; k < AD_list_bind[main_channel_name].size(); k++) + { + float dis = CheckUtil::calDis(AD_list_bind[main_channel_name][j].location_product_mm, AD_list_bind[main_channel_name][k].location_product_mm); + if (dis < min_dis) { - AD_list.at(ad_i).num_2sIdxList.push_back(AD_list.at(ad_i).numIdxList.at(i)); + min_dis = dis; } } - 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 >= 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()); } - m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "product_AD_num %d 2S_num = %d 3S_num s = %d min_dis %0.2f", - product_AD_num, A_2S_num, A_3S_num, min_dis); } + m_pMergedetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD_Bind", "stat num_1s %d num_2s %d num_3s %d product_AD_num %d min_dis %0.2f", + num_1s, num_2s, num_3s, product_AD_num, min_dis); + + /* NG分析 */ for (int i = 0; i < pALLTypeqxList->channelqxList.size(); i++) { QX_channel_List *pQXChannelList = &pALLTypeqxList->channelqxList[i]; if (!pAd_checkParma->bOpen) { - continue; } bool bNG = false; @@ -1432,19 +1417,17 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_ // 3S直接 NG if (pAd_checkParma->analysis_s.NG_3s) { - // 数量分析 - if (A_3S_num >= 1) + if (num_3s >= 1) { m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "3S Analysis --> %s result NG 3S %d >= 1", - pQXChannelList->channel_name.c_str(), A_3S_num); - + pQXChannelList->channel_name.c_str(), num_3s); bNG = true; NG_3S = true; } else { m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "3S Analysis --> %s result OK 3S %d < 1", - pQXChannelList->channel_name.c_str(), A_3S_num); + pQXChannelList->channel_name.c_str(), num_3s); } } } @@ -1454,14 +1437,12 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_ // 距离判断 if (pAd_checkParma->analysis_dis.bOpen) { - // 数量分析 if (min_dis <= pAd_checkParma->analysis_dis.disT) { m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "Dis Analysis--> %s Dis result NG ,min dis %f <= parm dis %f", pQXChannelList->channel_name.c_str(), min_dis, pAd_checkParma->analysis_dis.disT); - bNG = true; - NG_2S = true; + NG_dis = true; } else { @@ -1476,41 +1457,37 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_ // S标准判断 if (pAd_checkParma->analysis_s.bOpen) { - // 数量分析 - if (A_2S_num >= pAd_checkParma->analysis_s.Check_s_Num) + if (num_2s >= pAd_checkParma->analysis_s.Check_s_Num) { m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "S Analysis--> %s result NG , Check %ds Num %d >= parm S Num %d", - pQXChannelList->channel_name.c_str(), pAd_checkParma->analysis_s.Check_s_Value, A_2S_num, pAd_checkParma->analysis_s.Check_s_Num); - + pQXChannelList->channel_name.c_str(), pAd_checkParma->analysis_s.Check_s_Value, num_2s, pAd_checkParma->analysis_s.Check_s_Num); bNG = true; NG_2S = true; } else { m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "S Analysis--> %s result OK , Check %ds Num %d < parm S Num %d", - pQXChannelList->channel_name.c_str(), pAd_checkParma->analysis_s.Check_s_Value, A_2S_num, pAd_checkParma->analysis_s.Check_s_Num); + pQXChannelList->channel_name.c_str(), pAd_checkParma->analysis_s.Check_s_Value, num_2s, pAd_checkParma->analysis_s.Check_s_Num); } } } // 已经NG if (bNG) { - QX_channel_List *pqxList = pQXChannelList; - for (int i = 0; i < (int)pqxList->qxList.size(); i++) + for (int idx = 0; idx < (int)pqxList->qxList.size(); idx++) { - - if (pqxList->qxList.at(i).result == 0) + if (pqxList->qxList.at(idx).result == 0) { - pqxList->qxList.at(i).result = 1; + pqxList->qxList.at(idx).result = 1; QX_RESULT tem; - tem.blobIdx = pqxList->qxList.at(i).blobIdx; - tem.mindis = pqxList->qxList.at(i).fmindis; - tem.flen = pqxList->qxList.at(i).length; - tem.error_Type = pqxList->qxList.at(i).nqx_type; - tem.camera_name = pqxList->qxList.at(i).camera_name; - tem.channel_name = pqxList->qxList.at(i).channel_name; + tem.blobIdx = pqxList->qxList.at(idx).blobIdx; + tem.mindis = pqxList->qxList.at(idx).fmindis; + tem.flen = pqxList->qxList.at(idx).length; + tem.error_Type = pqxList->qxList.at(idx).nqx_type; + tem.camera_name = pqxList->qxList.at(idx).camera_name; + tem.channel_name = pqxList->qxList.at(idx).channel_name; pqxList->pChannelDetlog->AddCheckstr(PrintLevel_4, 3, "result = NG", "Add New qx,Blob idx %d type %d num %d dis %f len %f ", tem.blobIdx, tem.error_Type, tem.qx_Num, tem.mindis, tem.flen); m_pMergedetlog->AddCheckstr(PrintLevel_4, 3, "result = NG", "%s Add New qx,Blob idx %d type %d num %d dis %f len %f ", tem.channel_name.c_str(), tem.blobIdx, tem.error_Type, tem.qx_Num, tem.mindis, tem.flen); diff --git a/ConfigModule/include/CheckConfigDefine.h b/ConfigModule/include/CheckConfigDefine.h index 5b098b6..2669116 100644 --- a/ConfigModule/include/CheckConfigDefine.h +++ b/ConfigModule/include/CheckConfigDefine.h @@ -2293,6 +2293,7 @@ struct Base_Function_AD_Check AD_Analysisy_IOU analysis_iou; // IOU 分析 AD_Analysisy_Bind analysis_bind; // 绑定分析 + Base_Function_AD_Check() { Init(); @@ -2307,6 +2308,7 @@ struct Base_Function_AD_Check analysis_dis.Init(); analysis_s.Init(); analysis_iou.Init(); + analysis_bind.Init(); } void copy(Base_Function_AD_Check tem) @@ -2319,17 +2321,19 @@ struct Base_Function_AD_Check this->analysis_dis.copy(tem.analysis_dis); this->analysis_s.copy(tem.analysis_s); this->analysis_iou.copy(tem.analysis_iou); + this->analysis_bind.copy(tem.analysis_bind); } void print(std::string str) { - printf("%s>>bOpen %d %s %s %s %s %s %s\n", str.c_str(), + printf("%s>>bOpen %d %s %s %s %s %s %s %s\n", str.c_str(), bOpen, S_standard_3s.GetInfo("3S").c_str(), S_standard_2s.GetInfo("2S").c_str(), S_standard_1s.GetInfo("1S").c_str(), analysis_num.GetInfo("analysis_num").c_str(), analysis_dis.GetInfo("analysis_dis").c_str(), analysis_s.GetInfo("analysis_s").c_str(), - analysis_iou.GetInfo("analysis_iou").c_str()); + analysis_iou.GetInfo("analysis_iou").c_str()), + analysis_bind.GetInfo("analysis_bind").c_str(); } std::string GetInfo(std::string str) { @@ -2343,6 +2347,7 @@ struct Base_Function_AD_Check str123 += analysis_dis.GetInfo("analysis_dis"); str123 += analysis_s.GetInfo("analysis_s"); str123 += analysis_iou.GetInfo("analysis_iou"); + str123 += analysis_bind.GetInfo("analysis_time"); return str123; }