|
|
|
@ -590,6 +590,8 @@ int ImageResultJudge::ResultJudge(std::shared_ptr<ImageAllResult> pImageResult)
|
|
|
|
tem.strTypeName = QX_Result_Names[nqx_type];
|
|
|
|
tem.strTypeName = QX_Result_Names[nqx_type];
|
|
|
|
tem.qx_Code = QX_Result_Code[nqx_type];
|
|
|
|
tem.qx_Code = QX_Result_Code[nqx_type];
|
|
|
|
tem.srcImgroi = roi;
|
|
|
|
tem.srcImgroi = roi;
|
|
|
|
|
|
|
|
tem.srcImgroi.x += pDetResult->CutRoi.x;
|
|
|
|
|
|
|
|
tem.srcImgroi.y += pDetResult->CutRoi.y;
|
|
|
|
tem.len = flen;
|
|
|
|
tem.len = flen;
|
|
|
|
tem.qx_type = 0;
|
|
|
|
tem.qx_type = 0;
|
|
|
|
tem.fScore = 0;
|
|
|
|
tem.fScore = 0;
|
|
|
|
@ -637,6 +639,9 @@ int ImageResultJudge::ResultJudge(std::shared_ptr<ImageAllResult> pImageResult)
|
|
|
|
|
|
|
|
|
|
|
|
m_CheckResult_shareP->YS_ImageResult.push_back(tem);
|
|
|
|
m_CheckResult_shareP->YS_ImageResult.push_back(tem);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pQxLog->AddCheckstr(PrintLevel_4, DET_LOG_LEVEL_3, " result ", " name %s ---code %s", tem.strTypeName.c_str(), tem.qx_Code.c_str());
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 对于大面积 的zara和 异显NG ,可以不接着分析后续的数据了。应为后续估计有很多错误类别。
|
|
|
|
// 对于大面积 的zara和 异显NG ,可以不接着分析后续的数据了。应为后续估计有很多错误类别。
|
|
|
|
@ -842,6 +847,8 @@ int ImageResultJudge::MergeResult(std::shared_ptr<ImageAllResult> pImageResult,
|
|
|
|
tem.strTypeName = QX_Result_Names[nqx_type];
|
|
|
|
tem.strTypeName = QX_Result_Names[nqx_type];
|
|
|
|
tem.qx_Code = QX_Result_Code[nqx_type];
|
|
|
|
tem.qx_Code = QX_Result_Code[nqx_type];
|
|
|
|
tem.srcImgroi = roi;
|
|
|
|
tem.srcImgroi = roi;
|
|
|
|
|
|
|
|
tem.srcImgroi.x += pDetResult->CutRoi.x;
|
|
|
|
|
|
|
|
tem.srcImgroi.y += pDetResult->CutRoi.y;
|
|
|
|
tem.len = flen;
|
|
|
|
tem.len = flen;
|
|
|
|
tem.qx_type = ptemre->resultList.at(iqx).error_Type;
|
|
|
|
tem.qx_type = ptemre->resultList.at(iqx).error_Type;
|
|
|
|
tem.minDis_mm = ptemre->resultList.at(iqx).mindis;
|
|
|
|
tem.minDis_mm = ptemre->resultList.at(iqx).mindis;
|
|
|
|
@ -1246,137 +1253,116 @@ int ImageResultJudge::GetParamidx()
|
|
|
|
|
|
|
|
|
|
|
|
int ImageResultJudge::ConfigTypeToResultType(int nconfigType)
|
|
|
|
int ImageResultJudge::ConfigTypeToResultType(int nconfigType)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
bool bdesc = false;
|
|
|
|
// CONFIG_QX_NAME_ok_yisi, // 疑似
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_AD_YX, // AD异显(P6873)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_X_line, // X_line(P3351)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_Y_line, // Y_line(P3452)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_Broken_line, // 断线(P3379)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_zara, // ZARA(P1153)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_MTX, // MTX(P1164)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_POL_Cell, // 异物(P1101)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_LD, // 亮点(P1112)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_AD, // 暗点(P1111)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_Scratch_L1, // 一级 轻 划伤(P1557)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_Scratch_L2, // 二级 严重 划伤(P1557)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_Dirty_L0, // 疑似浅层脏污(P0000)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_Dirty_L1, // 轻脏污(P0000)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_Dirty_L2, // 严重脏污(P0000)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_qipao, // 气泡(P0001)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_PS, // ps(P0002)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_Weak_Bright_Mura, // 白GAP(P1654)
|
|
|
|
|
|
|
|
// CONFIG_QX_NAME_No_Label, // 缺POL(P2833)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ERROR_TYPE_OK, // 0 疑是
|
|
|
|
|
|
|
|
// ERROR_TYPE_AD_YX, // 1 AD-异常显示
|
|
|
|
|
|
|
|
// ERROR_TYPE_Line_X, // 2 x line
|
|
|
|
|
|
|
|
// ERROR_TYPE_Line_Y, // 3 y line
|
|
|
|
|
|
|
|
// ERROR_TYPE_Rubbing_Mura, // 4
|
|
|
|
|
|
|
|
// ERROR_TYPE_line_Broken, // 5 断线
|
|
|
|
|
|
|
|
// ERROR_TYPE_ZARA, // 6 ZARA
|
|
|
|
|
|
|
|
// ERROR_TYPE_MTX, // 7 MTX
|
|
|
|
|
|
|
|
// ERROR_TYPE_POL_Cell, // 8 异物
|
|
|
|
|
|
|
|
// ERROR_TYPE_LD, // 9 亮点
|
|
|
|
|
|
|
|
// ERROR_TYPE_AD, // 10 暗点
|
|
|
|
|
|
|
|
// ERROR_TYPE_BD, // 11 黑点
|
|
|
|
|
|
|
|
// ERROR_TYPE_WD, // 12 白点
|
|
|
|
|
|
|
|
// ERROR_TYPE_Scratch, // 13 划伤
|
|
|
|
|
|
|
|
// ERROR_TYPE_Weak_Bright_Mura, // 14 白GAP
|
|
|
|
|
|
|
|
// ERROR_TYPE_No_Label, // 15 缺POL
|
|
|
|
|
|
|
|
// ERROR_TYPE_PS, // 16 PS
|
|
|
|
|
|
|
|
// ERROR_TYPE_GRID_LINE, // 17 方格线
|
|
|
|
|
|
|
|
// ERROR_TYPE_STEAM_POCKET, // 19 气泡
|
|
|
|
|
|
|
|
// ERROR_TYPE_Dirty, // 19 脏污
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int resultError_type = ERROR_TYPE_OK;
|
|
|
|
int resultError_type = ERROR_TYPE_OK;
|
|
|
|
switch (nconfigType)
|
|
|
|
if(nconfigType < CONFIG_QX_NAME_Names.size())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case CONFIG_QX_NAME_ok_yisi:
|
|
|
|
string cqn = CONFIG_QX_NAME_Names[nconfigType];
|
|
|
|
resultError_type = ERROR_TYPE_OK;
|
|
|
|
for(int i = 0; i < m_FlawCodeList.size(); i++)
|
|
|
|
break;
|
|
|
|
{
|
|
|
|
case CONFIG_QX_NAME_AD_YX:
|
|
|
|
for(int j = 0; j < m_FlawCodeList.at(i).config_flaw_name.size(); j++)
|
|
|
|
resultError_type = ERROR_TYPE_AD_YX;
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
if(cqn == m_FlawCodeList.at(i).config_flaw_name[j])
|
|
|
|
case CONFIG_QX_NAME_Class_AD_YX:
|
|
|
|
{
|
|
|
|
resultError_type = ERROR_TYPE_AD_YX;
|
|
|
|
resultError_type = i;
|
|
|
|
break;
|
|
|
|
bdesc = true;
|
|
|
|
case CONFIG_QX_NAME_X_line:
|
|
|
|
break;
|
|
|
|
resultError_type = ERROR_TYPE_Line_X;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case CONFIG_QX_NAME_Y_line:
|
|
|
|
}
|
|
|
|
resultError_type = ERROR_TYPE_Line_Y;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
// 如果描述没有配置,用默认值
|
|
|
|
case CONFIG_QX_NAME_Fangge:
|
|
|
|
if(!bdesc)
|
|
|
|
resultError_type = ERROR_TYPE_Line_fangge;
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
int resultError_type = ERROR_TYPE_OK;
|
|
|
|
case CONFIG_QX_NAME_Broken_line:
|
|
|
|
switch (nconfigType)
|
|
|
|
resultError_type = ERROR_TYPE_line_Broken;
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_ok_yisi:
|
|
|
|
case CONFIG_QX_NAME_zara:
|
|
|
|
resultError_type = ERROR_TYPE_OK;
|
|
|
|
resultError_type = ERROR_TYPE_ZARA;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_AD_YX:
|
|
|
|
case CONFIG_QX_NAME_MTX:
|
|
|
|
resultError_type = ERROR_TYPE_AD_YX;
|
|
|
|
resultError_type = ERROR_TYPE_MTX;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_Class_AD_YX:
|
|
|
|
case CONFIG_QX_NAME_POL_Cell:
|
|
|
|
resultError_type = ERROR_TYPE_AD_YX;
|
|
|
|
resultError_type = ERROR_TYPE_POL_Cell;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_X_line:
|
|
|
|
case CONFIG_QX_NAME_LD:
|
|
|
|
resultError_type = ERROR_TYPE_Line_X;
|
|
|
|
resultError_type = ERROR_TYPE_LD;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_Y_line:
|
|
|
|
case CONFIG_QX_NAME_AD:
|
|
|
|
resultError_type = ERROR_TYPE_Line_Y;
|
|
|
|
resultError_type = ERROR_TYPE_AD;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_Fangge:
|
|
|
|
case CONFIG_QX_NAME_Scratch_L1:
|
|
|
|
resultError_type = ERROR_TYPE_Line_fangge;
|
|
|
|
resultError_type = ERROR_TYPE_Scratch;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_Broken_line:
|
|
|
|
case CONFIG_QX_NAME_Scratch_L2:
|
|
|
|
resultError_type = ERROR_TYPE_line_Broken;
|
|
|
|
resultError_type = ERROR_TYPE_Scratch;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_zara:
|
|
|
|
case CONFIG_QX_NAME_Dirty_L0:
|
|
|
|
resultError_type = ERROR_TYPE_ZARA;
|
|
|
|
resultError_type = ERROR_TYPE_Dirty;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_MTX:
|
|
|
|
case CONFIG_QX_NAME_Dirty_L1:
|
|
|
|
resultError_type = ERROR_TYPE_MTX;
|
|
|
|
resultError_type = ERROR_TYPE_Dirty;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_POL_Cell:
|
|
|
|
case CONFIG_QX_NAME_Dirty_L2:
|
|
|
|
resultError_type = ERROR_TYPE_POL_Cell;
|
|
|
|
resultError_type = ERROR_TYPE_Dirty;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_LD:
|
|
|
|
case CONFIG_QX_NAME_qipao:
|
|
|
|
resultError_type = ERROR_TYPE_LD;
|
|
|
|
resultError_type = ERROR_TYPE_STEAM_POCKET;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_AD:
|
|
|
|
case CONFIG_QX_NAME_PS:
|
|
|
|
resultError_type = ERROR_TYPE_AD;
|
|
|
|
resultError_type = ERROR_TYPE_PS;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_Scratch_L1:
|
|
|
|
case CONFIG_QX_NAME_Weak_Bright_Mura:
|
|
|
|
resultError_type = ERROR_TYPE_Scratch;
|
|
|
|
resultError_type = ERROR_TYPE_Weak_Bright_Mura;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_Scratch_L2:
|
|
|
|
case CONFIG_QX_NAME_No_Label:
|
|
|
|
resultError_type = ERROR_TYPE_Scratch;
|
|
|
|
resultError_type = ERROR_TYPE_No_Label;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_Dirty_L0:
|
|
|
|
case CONFIG_QX_NAME_Other:
|
|
|
|
resultError_type = ERROR_TYPE_Dirty;
|
|
|
|
resultError_type = ERROR_TYPE_Other;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_Dirty_L1:
|
|
|
|
case CONFIG_QX_NAME_Chess:
|
|
|
|
resultError_type = ERROR_TYPE_Dirty;
|
|
|
|
resultError_type = ERROR_TYPE_Other;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_Dirty_L2:
|
|
|
|
case CONFIG_QX_NAME_127Cell:
|
|
|
|
resultError_type = ERROR_TYPE_Dirty;
|
|
|
|
resultError_type = ERROR_TYPE_POL_Cell;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_qipao:
|
|
|
|
case CONFIG_QX_NAME_white_Cell:
|
|
|
|
resultError_type = ERROR_TYPE_STEAM_POCKET;
|
|
|
|
resultError_type = ERROR_TYPE_Cell_W;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_PS:
|
|
|
|
case CONFIG_QX_NAME_black_Cell:
|
|
|
|
resultError_type = ERROR_TYPE_PS;
|
|
|
|
resultError_type = ERROR_TYPE_Cell_B;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_Weak_Bright_Mura:
|
|
|
|
case CONFIG_QX_NAME_LackPOL:
|
|
|
|
resultError_type = ERROR_TYPE_Weak_Bright_Mura;
|
|
|
|
resultError_type = ERROR_TYPE_LackPol;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CONFIG_QX_NAME_No_Label:
|
|
|
|
default:
|
|
|
|
resultError_type = ERROR_TYPE_No_Label;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case CONFIG_QX_NAME_Other:
|
|
|
|
|
|
|
|
resultError_type = ERROR_TYPE_Other;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case CONFIG_QX_NAME_Chess:
|
|
|
|
|
|
|
|
resultError_type = ERROR_TYPE_Other;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case CONFIG_QX_NAME_127Cell:
|
|
|
|
|
|
|
|
resultError_type = ERROR_TYPE_POL_Cell;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case CONFIG_QX_NAME_white_Cell:
|
|
|
|
|
|
|
|
resultError_type = ERROR_TYPE_Cell_W;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case CONFIG_QX_NAME_black_Cell:
|
|
|
|
|
|
|
|
resultError_type = ERROR_TYPE_Cell_B;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case CONFIG_QX_NAME_LackPOL:
|
|
|
|
|
|
|
|
resultError_type = ERROR_TYPE_LackPol;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return resultError_type;
|
|
|
|
return resultError_type;
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int ImageResultJudge::sendTask(std::shared_ptr<DrawInfo> task)
|
|
|
|
int ImageResultJudge::sendTask(std::shared_ptr<DrawInfo> task)
|
|
|
|
|