|
|
|
|
@ -238,6 +238,8 @@ int ALLImgCheckAnalysisy::UpdateConfig(void *pconfig, int nConfigType)
|
|
|
|
|
break;
|
|
|
|
|
case CHECK_CONFIG_Module:
|
|
|
|
|
m_pConfigManager = (ConfigManagerBase *)pconfig;
|
|
|
|
|
// 更新参数后, 立即按相机提取需要回传的参数值
|
|
|
|
|
UpdateParamOutConfig();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
@ -246,6 +248,128 @@ int ALLImgCheckAnalysisy::UpdateConfig(void *pconfig, int nConfigType)
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 缺陷项 -> 回传结构体字段 的对应关系
|
|
|
|
|
struct QX_FIELD_MAP_
|
|
|
|
|
{
|
|
|
|
|
int nQxType; // 缺陷类型(CONFIG_QX_NAME_)
|
|
|
|
|
flaw_info UpdateParamOutST::*pField; // 回传结构体中对应的缺陷参数
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 从单个相机的配置中提取需要回传的参数值
|
|
|
|
|
// 取值位置与 ImageResultJudge::GetParamidx() 保持一致:
|
|
|
|
|
// 成像精度 <- commonCheckConfig.baseConfig.fImage_Scale_x / y
|
|
|
|
|
// 缺陷面积/灰阶 <- 第0个节点第0个区域的参数, 按缺陷名(param_name)匹配
|
|
|
|
|
static void FillUpdateParamOut(const AnalysisyConfigST &config, UpdateParamOutST &outParam)
|
|
|
|
|
{
|
|
|
|
|
// 1、成像检测精度
|
|
|
|
|
outParam.pixel_precision_x = config.commonCheckConfig.baseConfig.fImage_Scale_x;
|
|
|
|
|
outParam.pixel_precision_y = config.commonCheckConfig.baseConfig.fImage_Scale_y;
|
|
|
|
|
|
|
|
|
|
// 2、缺陷参数(面积/灰阶)
|
|
|
|
|
if (config.commonCheckConfig.nodeConfigArr.size() <= 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const CommonConfigNodeST &node = config.commonCheckConfig.nodeConfigArr.at(0);
|
|
|
|
|
if (node.regionConfigArr.size() <= 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const RegionConfigST ®ion = node.regionConfigArr.at(0);
|
|
|
|
|
const CheckConfig_Regions_type &typeParam = region.checkConfig_Regions_type[ANALYSIS_TYPE_TF];
|
|
|
|
|
|
|
|
|
|
const QX_FIELD_MAP_ qxFieldMap[] = {
|
|
|
|
|
{CONFIG_QX_NAME_cell_aotudian, &UpdateParamOutST::aotudian},
|
|
|
|
|
{CONFIG_QX_NAME_cell_zangwu, &UpdateParamOutST::zangwu},
|
|
|
|
|
{CONFIG_QX_NAME_cell_line, &UpdateParamOutST::line},
|
|
|
|
|
{CONFIG_QX_NAME_cell_dianzhuang, &UpdateParamOutST::dianzhuang},
|
|
|
|
|
{CONFIG_QX_NAME_cell_xianwei, &UpdateParamOutST::xianwei},
|
|
|
|
|
{CONFIG_QX_NAME_cell_posun, &UpdateParamOutST::posun},
|
|
|
|
|
};
|
|
|
|
|
const int nQxFieldNum = sizeof(qxFieldMap) / sizeof(qxFieldMap[0]);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < nQxFieldNum; i++)
|
|
|
|
|
{
|
|
|
|
|
const std::string strQxName = CONFIG_QX_NAME_Names[qxFieldMap[i].nQxType];
|
|
|
|
|
flaw_info *pOut = &(outParam.*(qxFieldMap[i].pField));
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < typeParam.checkConfig_Regions_Param.size(); j++)
|
|
|
|
|
{
|
|
|
|
|
const CheckConfig_Regions_Param ¶m = typeParam.checkConfig_Regions_Param.at(j);
|
|
|
|
|
if (param.param_name != strQxName || param.paramArr.size() <= 0)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
pOut->area = param.paramArr.at(0).area; // 缺陷面积
|
|
|
|
|
pOut->gray_dis = param.paramArr.at(0).hj; // 缺陷灰阶
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ALLImgCheckAnalysisy::UpdateParamOutConfig()
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(mtx_UpdateParamOut);
|
|
|
|
|
m_UpdateParamOutMap.clear();
|
|
|
|
|
|
|
|
|
|
if (m_pConfigManager == nullptr)
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 每个相机一份参数(Config_instances_ 的 key 为 json 中的 cameraCode)
|
|
|
|
|
for (const auto &config : m_pConfigManager->Config_instances_)
|
|
|
|
|
{
|
|
|
|
|
if (!config.second)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AnalysisyConfigST analysisyConfig;
|
|
|
|
|
if (config.second->GetConfig(ConfigType_Analysisy_Common_XL, &analysisyConfig) != 0)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UpdateParamOutST paramOut;
|
|
|
|
|
FillUpdateParamOut(analysisyConfig, paramOut);
|
|
|
|
|
m_UpdateParamOutMap[config.first] = paramOut;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("ALLImgCheckAnalysisy::UpdateParamOutConfig cam num %zu \n", m_UpdateParamOutMap.size());
|
|
|
|
|
return m_UpdateParamOutMap.size() > 0 ? 0 : 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ALLImgCheckAnalysisy::GetUpdateParamOut(const std::string &strCamera, UpdateParamOutST &outParam)
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(mtx_UpdateParamOut);
|
|
|
|
|
|
|
|
|
|
auto it = m_UpdateParamOutMap.find(strCamera);
|
|
|
|
|
if (it != m_UpdateParamOutMap.end())
|
|
|
|
|
{
|
|
|
|
|
outParam.copy(it->second);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 兜底: 缓存中没有时, 直接按相机名从参数模块实时取一次
|
|
|
|
|
if (m_pConfigManager != nullptr)
|
|
|
|
|
{
|
|
|
|
|
auto itConfig = m_pConfigManager->Config_instances_.find(strCamera);
|
|
|
|
|
if (itConfig != m_pConfigManager->Config_instances_.end() && itConfig->second)
|
|
|
|
|
{
|
|
|
|
|
AnalysisyConfigST analysisyConfig;
|
|
|
|
|
if (itConfig->second->GetConfig(ConfigType_Analysisy_Common_XL, &analysisyConfig) == 0)
|
|
|
|
|
{
|
|
|
|
|
FillUpdateParamOut(analysisyConfig, outParam);
|
|
|
|
|
m_UpdateParamOutMap[strCamera] = outParam;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string ALLImgCheckAnalysisy::GetVersion()
|
|
|
|
|
{
|
|
|
|
|
return std::string("BOE_2.0.5");
|
|
|
|
|
|