feat 初步完成AD绑定分析

dev_lsy
liusiyang 2 months ago
parent 5b7d9f11e8
commit bc0c7eaf3e

@ -68,6 +68,39 @@ public:
}
};
struct AD_Channel_BD_Info_
{
cv::Rect roi;
cv::Point2f location_product_mm;
vector<string> s_name_2;
vector<string> 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_Channel_Info_> AD_list;
std::unordered_map<string, vector<AD_Channel_BD_Info_>> AD_list_bind;
private:
};

@ -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,21 +1148,7 @@ 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;
// 遍历每个通道,找到开启的 进行分析。
for (int i = 0; i < pALLTypeqxList->channelqxList.size(); i++)
{
QX_channel_List *pQXChannelList = &pALLTypeqxList->channelqxList[i];
if (!pAd_checkParma)
{
continue;
}
if (pAd_checkParma && !pAd_checkParma->bOpen)
{
pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_2, 3, "Analysis_AD ",
"channel %s AD Check is close", pQXChannelList->channel_name.c_str());
continue;
}
bool bana_num = false;
bool bana_dis = false;
bool bana_S = false;
@ -1179,228 +1164,228 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
{
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<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> main_channel_3s = pAd_checkParma->analysis_bind.main_channel_3s;
vector<string> 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<QX_channel_List> main_channel_s_qxList;
vector<QX_channel_List> second_channel_s_qxList;
for (int i = 0; i < pALLTypeqxList->channelqxList.size(); i++)
{
QX_channel_List *pQXChannelList = &pALLTypeqxList->channelqxList[i];
if (!pAd_checkParma)
{
continue;
}
if (pAd_checkParma && !pAd_checkParma->bOpen)
{
pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_2, 3, "Analysis_AD ",
"channel %s AD Check is close", pQXChannelList->channel_name.c_str());
continue;
}
{
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)
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())
{
continue;
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++)
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++)
{
if (pQXChannelList->qxList[j].area >= pAd_checkParma->S_standard_1s.area &&
pQXChannelList->qxList[j].length >= pAd_checkParma->S_standard_1s.len)
string main_channel_name = main_channel_s_qxList[i_main].channel_name;
QX_channel_List *pQXChannelList_main = &main_channel_s_qxList[i_main];
vector<AD_Channel_BD_Info_> 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);
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);
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)
// 遍历次通道
for(int i_second = 0; i_second < second_channel_s_qxList.size(); i_second++)
{
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)
string second_channel_name = second_channel_s_qxList[i_second].channel_name;
if(second_channel_name == main_channel_name)
{
AD_list.at(list_idx).num_1s++;
continue;
}
else if (s_det_value == 2)
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(list_idx).num_2s++;
AD_list.at(list_idx).num_2sIdxList.push_back(tem_AD_qx);
}
else
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)
{
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;
tem.numIdxList.push_back(tem_AD_qx);
if (s_det_value == 1)
{
tem.num_1s++;
continue;
}
else if (s_det_value == 2)
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)
{
tem.num_2s++;
tem.num_2sIdxList.push_back(tem_AD_qx);
}
else
if (std::find(second_channel_2s.begin(), second_channel_2s.end(), second_channel_name) != second_channel_2s.end())
{
tem.num_3s++;
tem.num_3sIdxList.push_back(tem_AD_qx);
tmp_main_qxInfo.s_name_2.push_back(second_channel_name);
}
AD_list.push_back(tem);
// 如果要参与数量统计
if (bana_num)
if(std::find(second_channel_3s.begin(), second_channel_3s.end(), second_channel_name) != second_channel_3s.end())
{
product_AD_num++;
}
tmp_main_qxInfo.s_name_3.push_back(second_channel_name);
}
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);
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);
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);
}
AD_list_bind[main_channel_name] = tmp_main_qxInfo_all;
}
/* 数量距离统计 */
int num_1s = 0;
int num_2s = 0;
int num_3s = 0;
float min_dis = 9999999999;
// 求最小距离
if (true)
for(int i_main = 0; i_main < main_channel_s_qxList.size(); i_main++)
{
for (int ad_i = 0; ad_i < AD_list.size(); ad_i++)
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++)
{
for (int ad_j = 0; ad_j < AD_list.size(); ad_j++)
{
if (ad_i == ad_j)
bool bproduct_AD_num = false;
// 数量统计
if(AD_list_bind[main_channel_name][j].s_type == 1)
{
continue;
bproduct_AD_num = true;
num_1s++;
}
// 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)
if(AD_list_bind[main_channel_name][j].s_type == 2 || AD_list_bind[main_channel_name][j].s_name_2.size() >= 2)
{
AD_list.at(ad_i).fdis = dis;
AD_list.at(ad_i).dist_idx = ad_j;
if (dis < min_dis)
{
min_dis = dis;
}
}
bproduct_AD_num = true;
num_2s++;
}
}
}
int A_2S_num = 0;
int A_3S_num = 0;
// 统计 2s 总数
if (s_param_value > 0)
if(AD_list_bind[main_channel_name][j].s_type == 3 || AD_list_bind[main_channel_name][j].s_name_3.size() >= 3)
{
int channels = 0;
int oneimgs = check_s_Num;
for (int ad_i = 0; ad_i < AD_list.size(); ad_i++)
bproduct_AD_num = true;
num_3s++;
}
if(bproduct_AD_num)
{
if (AD_list.at(ad_i).num > 1)
product_AD_num++;
}
// 距离计算
for(int k = j + 1; k < AD_list_bind[main_channel_name].size(); k++)
{
AD_list.at(ad_i).num_2s++;
for (int i = 0; i < AD_list.at(ad_i).numIdxList.size(); i++)
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);

@ -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;
}

Loading…
Cancel
Save