feat 主通道为空,使用次通道走老逻辑

dev_lsy
liusiyang 4 weeks ago
parent ee98ece5ff
commit 01247bccb9

@ -214,7 +214,8 @@ private:
int Judge_OK_Config();
int Judge_NG_Config();
int Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx);
// pAllowChannels 非空时仅列表内通道参与分析(用于主通道为空回退时仅跑次通道); nullptr=不过滤
int Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx, const std::vector<std::string> *pAllowChannels = nullptr);
int Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_idx);
// 关联过滤源过滤:移除与关联通道过滤源缺陷重叠的缺陷,使其不参与后续数量/距离/S分析

@ -318,18 +318,18 @@ int ALLImgCheckAnalysisy::InitAIFactory()
GPU_Config gpu;
int num = 0;
for (int i = 0; i < MAX_GPU_NUM; i++)
{
gpu.UseGPUList[i] = m_RunConfig.UseGPUList[i];
if (gpu.UseGPUList[i] >= 0)
{
num++;
}
}
if (num == 0)
// for (int i = 0; i < MAX_GPU_NUM; i++)
// {
// gpu.UseGPUList[i] = m_RunConfig.UseGPUList[i];
// if (gpu.UseGPUList[i] >= 0)
// {
// num++;
// }
// }
// if (num == 0)
{
gpu.UseGPUList[0] = 0;
gpu.UseGPUList[1] = 1;
gpu.UseGPUList[0] = 1;
gpu.UseGPUList[1] = -1;
}
for (int i = 0; i < MAX_GPU_NUM; i++)
{

@ -8,6 +8,9 @@
#include "CheckUtil.hpp"
#include "CheckConfigDefine.h"
// Analysis_AD_Bind 返回码: 主通道为空(配置为空或本次无匹配通道), 调用方回退执行 Analysis_AD
static const int AD_BIND_RE_MAIN_EMPTY = 2;
QX_Merge_Analysis::QX_Merge_Analysis()
{
m_bExit = false;
@ -1025,7 +1028,35 @@ int QX_Merge_Analysis::Analysis_QXtype(ALL_Qx_DataList *pALLTypeqxList, int qx_i
{
if(m_pbaseCheckFunction->ad_check.analysis_bind.bUse)
{
Analysis_AD_Bind(pALLTypeqxList, qx_idx);
// 主通道为空: Analysis_AD_Bind 返回回退码, 用次通道列表里的通道走 Analysis_AD 老逻辑
if (Analysis_AD_Bind(pALLTypeqxList, qx_idx) == AD_BIND_RE_MAIN_EMPTY)
{
// 回退过滤: 仅次通道列表(2s_second_channel + 3s_second_channel, 去重)中的通道参与
std::vector<std::string> fallback_channels;
const std::vector<std::string> &fallback_sec2 = m_pbaseCheckFunction->ad_check.analysis_bind.second_channel_2s;
const std::vector<std::string> &fallback_sec3 = m_pbaseCheckFunction->ad_check.analysis_bind.second_channel_3s;
fallback_channels.insert(fallback_channels.end(), fallback_sec2.begin(), fallback_sec2.end());
for (size_t k = 0; k < fallback_sec3.size(); k++)
{
if (std::find(fallback_channels.begin(), fallback_channels.end(), fallback_sec3[k]) == fallback_channels.end())
{
fallback_channels.push_back(fallback_sec3[k]);
}
}
std::string strFallbackChannels;
for (size_t k = 0; k < fallback_channels.size(); k++)
{
strFallbackChannels += fallback_channels[k];
if (k + 1 < fallback_channels.size())
{
strFallbackChannels += ",";
}
}
m_pMergedetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD_Bind",
"main channel empty --> fallback Analysis_AD (only second channels: %s)",
fallback_channels.empty() ? "<empty>" : strFallbackChannels.c_str());
Analysis_AD(pALLTypeqxList, qx_idx, &fallback_channels);
}
}
else
{
@ -1073,7 +1104,7 @@ int QX_Merge_Analysis::Judge_NG_Config()
return 0;
}
int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx)
int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx, const std::vector<std::string> *pAllowChannels)
{
AD_list.clear();
if (!m_pbaseCheckFunction)
@ -1092,6 +1123,14 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx)
{
QX_channel_List *pQXChannelList = &pALLTypeqxList->channelqxList[i];
// 回退过滤: pAllowChannels 非空时仅允许列表内(次通道列表)的通道参与
if (pAllowChannels &&
std::find(pAllowChannels->begin(), pAllowChannels->end(), pQXChannelList->channel_name) == pAllowChannels->end())
{
pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD",
"channel %s not in allow list(fallback) --> skip", pQXChannelList->channel_name.c_str());
continue;
}
if (!pAd_checkParma)
{
continue;
@ -1336,6 +1375,14 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx)
{
QX_channel_List *pQXChannelList = &pALLTypeqxList->channelqxList[i];
// 回退过滤: pAllowChannels 非空时仅允许列表内(次通道列表)的通道被判定NG
if (pAllowChannels &&
std::find(pAllowChannels->begin(), pAllowChannels->end(), pQXChannelList->channel_name) == pAllowChannels->end())
{
pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD",
"channel %s not in allow list(fallback) --> skip NG mark", pQXChannelList->channel_name.c_str());
continue;
}
if (!pAd_checkParma->bOpen)
{
@ -1546,6 +1593,12 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
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());
/* 主通道为空(配置为空或本次无匹配通道): 返回回退码, 由调用方改用 Analysis_AD 老逻辑 */
if (main_channel_s_qxList.empty())
{
return AD_BIND_RE_MAIN_EMPTY;
}
/* 画面分析 */
AD_list_bind.clear();
for(int i_main = 0; i_main < main_channel_s_qxList.size(); i_main++)

Loading…
Cancel
Save