update 暗点Bind日志整理,拆分主通道结果

dev_lsy
liusiyang 2 months ago
parent 584daf6e0b
commit 85460ca7ac

@ -101,6 +101,31 @@ public:
} }
}; };
struct AD_Channel_Stat_
{
int num_1s;
int num_2s;
int num_3s;
int num_2s_s;
int num_2s_m;
int num_3s_s;
int num_3s_m;
int product_AD_num;
float min_dis;
AD_Channel_Stat_()
{
num_1s = 0;
num_2s = 0;
num_3s = 0;
num_2s_s = 0;
num_2s_m = 0;
num_3s_s = 0;
num_3s_m = 0;
product_AD_num = 0;
min_dis = 9999999999;
}
};
public: public:
QX_Merge_Analysis(); QX_Merge_Analysis();
~QX_Merge_Analysis(); ~QX_Merge_Analysis();

@ -1144,7 +1144,6 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
Base_Function_AD_Check *pAd_checkParma = &m_pbaseCheckFunction->ad_check; Base_Function_AD_Check *pAd_checkParma = &m_pbaseCheckFunction->ad_check;
int product_AD_num = 0; // 整个产品的 暗点数目。
int check_s_Num = 0; int check_s_Num = 0;
int s_param_value = -1; int s_param_value = -1;
int s_param_num = 0; int s_param_num = 0;
@ -1169,6 +1168,7 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
pAd_checkParma->bOpen, bana_num, bana_dis, bana_S); pAd_checkParma->bOpen, bana_num, bana_dis, bana_S);
/* 获取绑定通道 */ /* 获取绑定通道 */
vector<string> merge_analysy_s_sf = pAd_checkParma->analysis_sf.s_sf;
vector<string> main_channel_2s = pAd_checkParma->analysis_bind.main_channel_2s; vector<string> main_channel_2s = pAd_checkParma->analysis_bind.main_channel_2s;
vector<string> second_channel_2s = pAd_checkParma->analysis_bind.second_channel_2s; vector<string> second_channel_2s = pAd_checkParma->analysis_bind.second_channel_2s;
vector<string> main_channel_3s = pAd_checkParma->analysis_bind.main_channel_3s; vector<string> main_channel_3s = pAd_checkParma->analysis_bind.main_channel_3s;
@ -1303,20 +1303,24 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
cv::Rect roi_second = pQXChannelList_second->qxList[j_second].product_roi; 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); 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); float fiou = CheckUtil::CalIoU(roi_main, roi_second);
m_pMergedetlog->AddCheckstr(PrintLevel_3, 3, "CalIoU", // m_pMergedetlog->AddCheckstr(PrintLevel_3, 3, "CalIoU",
"roi1 %s roi2 %s expand %d iou %f", // "roi1 %s roi2 %s expand %d iou %f",
CheckUtil::GetRectString(roi_main).c_str(), // CheckUtil::GetRectString(roi_main).c_str(),
CheckUtil::GetRectString(roi_second).c_str(), // CheckUtil::GetRectString(roi_second).c_str(),
roi_expand, fiou); // roi_expand, fiou);
if (fiou > pAd_checkParma->analysis_iou.AD_IOU) 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()) 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); tmp_main_qxInfo.s_name_2.push_back(second_channel_name);
m_pMergedetlog->AddCheckstr(PrintLevel_3, 3, "Add 2s", "%s roi1 %s roi2 %s expand %d iou %f",
second_channel_name.c_str(), CheckUtil::GetRectString(roi_main).c_str(),CheckUtil::GetRectString(roi_second).c_str(),roi_expand, fiou);
} }
if(std::find(second_channel_3s.begin(), second_channel_3s.end(), second_channel_name) != second_channel_3s.end()) 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); tmp_main_qxInfo.s_name_3.push_back(second_channel_name);
m_pMergedetlog->AddCheckstr(PrintLevel_3, 3, "Add 3s", "%s roi1 %s roi2 %s expand %d iou %f",
second_channel_name.c_str(), CheckUtil::GetRectString(roi_main).c_str(),CheckUtil::GetRectString(roi_second).c_str(),roi_expand, fiou);
} }
break; break;
@ -1334,13 +1338,11 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
} }
/* 数量距离统计 */ /* 数量距离统计 */
int num_1s = 0; std::unordered_map<string, AD_Channel_Stat_> AD_stat_map;
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++) 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; string main_channel_name = main_channel_s_qxList[i_main].channel_name;
AD_Channel_Stat_ &stat = AD_stat_map[main_channel_name];
for(int j = 0; j < AD_list_bind[main_channel_name].size(); j++) for(int j = 0; j < AD_list_bind[main_channel_name].size(); j++)
{ {
bool bproduct_AD_num = false; bool bproduct_AD_num = false;
@ -1348,36 +1350,40 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
if(AD_list_bind[main_channel_name][j].s_type == 1) if(AD_list_bind[main_channel_name][j].s_type == 1)
{ {
bproduct_AD_num = true; bproduct_AD_num = true;
num_1s++; stat.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) if(AD_list_bind[main_channel_name][j].s_type == 2 || AD_list_bind[main_channel_name][j].s_name_2.size() >= 2)
{ {
if(AD_list_bind[main_channel_name][j].s_type == 2) stat.num_2s_s++;
if(AD_list_bind[main_channel_name][j].s_name_2.size() >= 2) stat.num_2s_m++;
bproduct_AD_num = true; bproduct_AD_num = true;
num_2s++; stat.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) if(AD_list_bind[main_channel_name][j].s_type == 3 || AD_list_bind[main_channel_name][j].s_name_3.size() >= 3)
{ {
if(AD_list_bind[main_channel_name][j].s_type == 3) stat.num_3s_s++;
if(AD_list_bind[main_channel_name][j].s_name_3.size() >= 3) stat.num_3s_m++;
bproduct_AD_num = true; bproduct_AD_num = true;
num_3s++; stat.num_3s++;
} }
if(bproduct_AD_num) if(bproduct_AD_num)
{ {
product_AD_num++; stat.product_AD_num++;
} }
// 距离计算 // 距离计算
for(int k = j + 1; k < AD_list_bind[main_channel_name].size(); k++) 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); 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) if (dis < stat.min_dis)
{ {
min_dis = dis; stat.min_dis = 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", m_pMergedetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD_Bind", "stat %s num_1s %d | num_2s %d [s %d m %d] | num_3s %d [s %d m %d] | product_AD_num %d | min_dis %0.2f",
num_1s, num_2s, num_3s, product_AD_num, min_dis); main_channel_name.c_str(), stat.num_1s, stat.num_2s, stat.num_2s_s, stat.num_2s_m, stat.num_3s, stat.num_3s_s, stat.num_3s_m, stat.product_AD_num, stat.min_dis);
}
/* NG分析 */ /* NG分析 */
for (int i = 0; i < pALLTypeqxList->channelqxList.size(); i++) for (int i = 0; i < pALLTypeqxList->channelqxList.size(); i++)
@ -1388,6 +1394,22 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
{ {
continue; continue;
} }
if(std::find(merge_analysy_s_sf.begin(), merge_analysy_s_sf.end(), pQXChannelList->channel_name) != merge_analysy_s_sf.end())
{
}
else
{
m_pMergedetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD_Bind", "merge_analysy_s_sf not found %s --> skip", pQXChannelList->channel_name.c_str());
continue;
}
// 获取该通道独立的统计
auto it_stat = AD_stat_map.find(pQXChannelList->channel_name);
if (it_stat == AD_stat_map.end())
{
m_pMergedetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD_Bind", "AD_stat_map not found %s --> skip", pQXChannelList->channel_name.c_str());
continue;
}
AD_Channel_Stat_ &stat = it_stat->second;
bool bNG = false; bool bNG = false;
bool NG_num = false; bool NG_num = false;
@ -1398,17 +1420,17 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
if (pAd_checkParma->analysis_num.bOpen) if (pAd_checkParma->analysis_num.bOpen)
{ {
// 数量分析 // 数量分析
if (product_AD_num >= pAd_checkParma->analysis_num.numT) if (stat.product_AD_num >= pAd_checkParma->analysis_num.numT)
{ {
m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "Num Analysis --> %s result NG ,product_AD_num %d >= parm num %d", m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "Num Analysis --> %s result NG ,product_AD_num %d >= parm num %d",
pQXChannelList->channel_name.c_str(), product_AD_num, pAd_checkParma->analysis_num.numT); pQXChannelList->channel_name.c_str(), stat.product_AD_num, pAd_checkParma->analysis_num.numT);
bNG = true; bNG = true;
NG_num = true; NG_num = true;
} }
else else
{ {
m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "Num Analysis--> %s result OK ,product_AD_num %d < parm num %d", m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "Num Analysis--> %s result OK ,product_AD_num %d < parm num %d",
pQXChannelList->channel_name.c_str(), product_AD_num, pAd_checkParma->analysis_num.numT); pQXChannelList->channel_name.c_str(), stat.product_AD_num, pAd_checkParma->analysis_num.numT);
} }
} }
// 不NG // 不NG
@ -1417,17 +1439,17 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
// 3S直接 NG // 3S直接 NG
if (pAd_checkParma->analysis_s.NG_3s) if (pAd_checkParma->analysis_s.NG_3s)
{ {
if (num_3s >= 1) if (stat.num_3s >= 1)
{ {
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 NG 3S %d >= 1",
pQXChannelList->channel_name.c_str(), num_3s); pQXChannelList->channel_name.c_str(), stat.num_3s);
bNG = true; bNG = true;
NG_3S = true; NG_3S = true;
} }
else else
{ {
m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "3S Analysis --> %s result OK 3S %d < 1", m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "3S Analysis --> %s result OK 3S %d < 1",
pQXChannelList->channel_name.c_str(), num_3s); pQXChannelList->channel_name.c_str(), stat.num_3s);
} }
} }
} }
@ -1437,17 +1459,17 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
// 距离判断 // 距离判断
if (pAd_checkParma->analysis_dis.bOpen) if (pAd_checkParma->analysis_dis.bOpen)
{ {
if (min_dis <= pAd_checkParma->analysis_dis.disT) if (stat.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", 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); pQXChannelList->channel_name.c_str(), stat.min_dis, pAd_checkParma->analysis_dis.disT);
bNG = true; bNG = true;
NG_dis = true; NG_dis = true;
} }
else else
{ {
m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "Dis Analysis--> %s Dis result OK ,min dis %f > parm dis %f", m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "Dis Analysis--> %s Dis result OK ,min dis %f > parm dis %f",
pQXChannelList->channel_name.c_str(), min_dis, pAd_checkParma->analysis_dis.disT); pQXChannelList->channel_name.c_str(), stat.min_dis, pAd_checkParma->analysis_dis.disT);
} }
} }
} }
@ -1457,17 +1479,17 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
// S标准判断 // S标准判断
if (pAd_checkParma->analysis_s.bOpen) if (pAd_checkParma->analysis_s.bOpen)
{ {
if (num_2s >= pAd_checkParma->analysis_s.Check_s_Num) if (stat.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", 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, num_2s, pAd_checkParma->analysis_s.Check_s_Num); pQXChannelList->channel_name.c_str(), pAd_checkParma->analysis_s.Check_s_Value, stat.num_2s, pAd_checkParma->analysis_s.Check_s_Num);
bNG = true; bNG = true;
NG_2S = true; NG_2S = true;
} }
else else
{ {
m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "AD RGBL255", "S Analysis--> %s result OK , Check %ds Num %d < parm S Num %d", 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, num_2s, pAd_checkParma->analysis_s.Check_s_Num); pQXChannelList->channel_name.c_str(), pAd_checkParma->analysis_s.Check_s_Value, stat.num_2s, pAd_checkParma->analysis_s.Check_s_Num);
} }
} }
} }

Loading…
Cancel
Save