update 添加开关控制是否绘制存图

dev_lsy
liusiyang 3 weeks ago
parent bbde51f4cc
commit 14c6066ff9

@ -26,7 +26,7 @@
// resize 图片的 宽度 // resize 图片的 宽度
#define RESIZE_IMAGE_WIDTH 1680 #define RESIZE_IMAGE_WIDTH 1680
// #define SAVE_RESIMG // 结果图保存/绘制开关:已由 SAVE_RESIMG 宏改为 base 层配置项“是否存图绘制”(baseCheckData 中 itemCode=bDrawAndSave 的 isOpen),运行时生效,无需再改此处宏
enum TEM_IMG_IDX_ enum TEM_IMG_IDX_
{ {

@ -120,6 +120,9 @@ private:
// 获取缺陷 对应的AI输入 输出图片, // 获取缺陷 对应的AI输入 输出图片,
int GetAIDetImg(std::shared_ptr<ImageAllResult> pImageResult, cv::Point pcenter, cv::Mat &AI_InImg, cv::Mat &AI_OutImg); int GetAIDetImg(std::shared_ptr<ImageAllResult> pImageResult, cv::Point pcenter, cv::Mat &AI_InImg, cv::Mat &AI_OutImg);
// 绘制并保存结果图开关(base 配置 bDrawAndSave,替代 SAVE_RESIMG 宏)
bool NeedDrawAndSave();
int sendTask(std::shared_ptr<DrawInfo> task); int sendTask(std::shared_ptr<DrawInfo> task);
std::shared_ptr<ImageResultJudge::DrawInfo> GetTask(); std::shared_ptr<ImageResultJudge::DrawInfo> GetTask();

@ -251,6 +251,9 @@ private:
// 临时绘制结果 // 临时绘制结果
int DrawResult_Step_1(); int DrawResult_Step_1();
// 绘制并保存结果图开关(base 配置 bDrawAndSave,替代 SAVE_RESIMG 宏)
bool NeedDrawAndSave();
// 参数缺陷类型转 结果参数类型 // 参数缺陷类型转 结果参数类型
int AIClassTypeToConfigType(int nAIQXType, cv::Rect qx_roi); int AIClassTypeToConfigType(int nAIQXType, cv::Rect qx_roi);

@ -361,9 +361,10 @@ int CameraCheckAnalysisy::ResultParamJudge()
long t1 = CheckUtil::getcurTime(); long t1 = CheckUtil::getcurTime();
int re = m_imageResultJudge.MergeResult(m_pCheck_Result->ImageALLDetResultList.at(imgidx), ptemre); int re = m_imageResultJudge.MergeResult(m_pCheck_Result->ImageALLDetResultList.at(imgidx), ptemre);
long t2 = CheckUtil::getcurTime(); long t2 = CheckUtil::getcurTime();
#ifdef SAVE_RESIMG if (m_pbaseCheckFunction != NULL && m_pbaseCheckFunction->bDrawAndSave)
m_imageResultJudge.DrawResult(m_pCheck_Result->ImageALLDetResultList.at(imgidx)); {
#endif m_imageResultJudge.DrawResult(m_pCheck_Result->ImageALLDetResultList.at(imgidx));
}
long t3 = CheckUtil::getcurTime(); long t3 = CheckUtil::getcurTime();
// m_pdetlog->AddCheckstr(PrintLevel_1, "ResultParamJudge", " det time %ld ms judge %ld draw %ld", t3 - t1, t2 - t1, t3 - t2); // m_pdetlog->AddCheckstr(PrintLevel_1, "ResultParamJudge", " det time %ld ms judge %ld draw %ld", t3 - t1, t2 - t1, t3 - t2);

@ -97,6 +97,12 @@ cv::Rect ImageResultJudge::GetCutRoi(cv::Rect &roi, const cv::Mat &img)
return cutroi; return cutroi;
} }
bool ImageResultJudge::NeedDrawAndSave()
{
// base 层“是否存图绘制”开关:绘制并保存结果图(运行时替代 SAVE_RESIMG 宏)
return m_pbaseCheckFunction != NULL && m_pbaseCheckFunction->bDrawAndSave;
}
int ImageResultJudge::GetAIDetImg(std::shared_ptr<ImageAllResult> pImageResult, cv::Point pcenter, cv::Mat &AI_InImg, cv::Mat &AI_OutImg) int ImageResultJudge::GetAIDetImg(std::shared_ptr<ImageAllResult> pImageResult, cv::Point pcenter, cv::Mat &AI_InImg, cv::Mat &AI_OutImg)
{ {
@ -629,17 +635,18 @@ int ImageResultJudge::ResultJudge(std::shared_ptr<ImageAllResult> pImageResult)
// CheckUtil::printROI(CutRoi, "CutRoi"); // CheckUtil::printROI(CutRoi, "CutRoi");
cv::Size sz = cv::Size(QX_SAMLLIMG_WIDTH, QX_SAMLLIMG_HEIGHT); cv::Size sz = cv::Size(QX_SAMLLIMG_WIDTH, QX_SAMLLIMG_HEIGHT);
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
if (pImageResult->detImg.channels() == 1)
{ {
cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR); if (pImageResult->detImg.channels() == 1)
} {
else cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR);
{ }
tem.srcImg = pImageResult->detImg(CutRoi).clone(); else
{
tem.srcImg = pImageResult->detImg(CutRoi).clone();
}
cv::resize(tem.srcImg, tem.resizeImg, sz);
} }
cv::resize(tem.srcImg, tem.resizeImg, sz);
#endif
int nqx_type = ConfigTypeToResultType(config_qx_type); int nqx_type = ConfigTypeToResultType(config_qx_type);
tem.type = nqx_type; tem.type = nqx_type;
@ -684,9 +691,10 @@ int ImageResultJudge::ResultJudge(std::shared_ptr<ImageAllResult> pImageResult)
m_CheckResult_shareP->nresult = nqx_type; m_CheckResult_shareP->nresult = nqx_type;
} }
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img); {
#endif GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img);
}
m_CheckResult_shareP->qxImageResult.push_back(tem); m_CheckResult_shareP->qxImageResult.push_back(tem);
} }
else else
@ -697,9 +705,10 @@ int ImageResultJudge::ResultJudge(std::shared_ptr<ImageAllResult> pImageResult)
m_CheckResult_shareP->nYS_result = nqx_type; m_CheckResult_shareP->nYS_result = nqx_type;
} }
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img); {
#endif GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img);
}
m_CheckResult_shareP->YS_ImageResult.push_back(tem); m_CheckResult_shareP->YS_ImageResult.push_back(tem);
} }
@ -989,17 +998,18 @@ int ImageResultJudge::MergeResult(std::shared_ptr<ImageAllResult> pImageResult,
cv::Rect CutRoi = GetCutRoi(roi, pImageResult->detImg); cv::Rect CutRoi = GetCutRoi(roi, pImageResult->detImg);
cv::Size sz = cv::Size(QX_SAMLLIMG_WIDTH, QX_SAMLLIMG_HEIGHT); cv::Size sz = cv::Size(QX_SAMLLIMG_WIDTH, QX_SAMLLIMG_HEIGHT);
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
if (pImageResult->detImg.channels() == 1)
{ {
cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR); if (pImageResult->detImg.channels() == 1)
} {
else cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR);
{ }
tem.srcImg = pImageResult->detImg(CutRoi).clone(); else
{
tem.srcImg = pImageResult->detImg(CutRoi).clone();
}
cv::resize(tem.srcImg, tem.resizeImg, sz);
} }
cv::resize(tem.srcImg, tem.resizeImg, sz);
#endif
int nerrortype = 1; int nerrortype = 1;
int checkFlage = ANALYSIS_TYPE_TF; int checkFlage = ANALYSIS_TYPE_TF;
@ -1060,9 +1070,10 @@ int ImageResultJudge::MergeResult(std::shared_ptr<ImageAllResult> pImageResult,
{ {
m_CheckResult_shareP->nresult = nqx_type; m_CheckResult_shareP->nresult = nqx_type;
} }
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img); {
#endif GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img);
}
m_CheckResult_shareP->qxImageResult.push_back(tem); m_CheckResult_shareP->qxImageResult.push_back(tem);
} }
} }

@ -529,19 +529,20 @@ int ImgCheckAnalysisy::CheckRun()
m_pdetlog->AddCheckstr(PrintLevel_0, "4、BQ Detect", "-------------------------BQ AI Detect--------%ld ms-------\n", t_BQ_e - t_BQ_s); m_pdetlog->AddCheckstr(PrintLevel_0, "4、BQ Detect", "-------------------------BQ AI Detect--------%ld ms-------\n", t_BQ_e - t_BQ_s);
} }
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
m_CheckResult_shareP->resultMaskImg = m_pImageAllResult->qx_DetAIResult->AI_MaskImg;
// 将BQ标签的AI mask合并到结果mask中
if (m_pImageAllResult->bq_DetAIResult && !m_pImageAllResult->bq_DetAIResult->AI_MaskImg.empty())
{ {
cv::Mat &bqMask = m_pImageAllResult->bq_DetAIResult->AI_MaskImg; m_CheckResult_shareP->resultMaskImg = m_pImageAllResult->qx_DetAIResult->AI_MaskImg.clone();
if (bqMask.size() == m_CheckResult_shareP->resultMaskImg.size())
// 将BQ标签的AI mask合并到结果mask中
if (m_pImageAllResult->bq_DetAIResult && !m_pImageAllResult->bq_DetAIResult->AI_MaskImg.empty())
{ {
cv::bitwise_or(m_CheckResult_shareP->resultMaskImg, bqMask, m_CheckResult_shareP->resultMaskImg); cv::Mat &bqMask = m_pImageAllResult->bq_DetAIResult->AI_MaskImg;
if (bqMask.size() == m_CheckResult_shareP->resultMaskImg.size())
{
cv::bitwise_or(m_CheckResult_shareP->resultMaskImg, bqMask, m_CheckResult_shareP->resultMaskImg);
}
} }
} }
#endif
// cv::imwrite("dddddddd.png", m_pImageAllResult->qx_DetAIResult->AI_MaskImg); // cv::imwrite("dddddddd.png", m_pImageAllResult->qx_DetAIResult->AI_MaskImg);
// if (!m_pImageAllResult->qx_DetAIResult->AI_MaskImg.empty()) // if (!m_pImageAllResult->qx_DetAIResult->AI_MaskImg.empty())
@ -3185,16 +3186,17 @@ int ImgCheckAnalysisy::AI_Detect_QX()
} }
// 仅在调试模式下保存 AI_Qx_MaskList,并限制数量 // 仅在调试模式下保存 AI_Qx_MaskList,并限制数量
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
if (DetImgInfo_shareP->bDebugsaveImg && pDetAIResult->AI_Qx_MaskList.size() < 200)
{ {
std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>(); if (DetImgInfo_shareP->bDebugsaveImg && pDetAIResult->AI_Qx_MaskList.size() < 200)
temAIresult->roi = result->roi; {
temAIresult->AI_inImg = result->input; std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>();
temAIresult->AI_mask = outimg; temAIresult->roi = result->roi;
pDetAIResult->AI_Qx_MaskList.push_back(temAIresult); temAIresult->AI_inImg = result->input;
temAIresult->AI_mask = outimg;
pDetAIResult->AI_Qx_MaskList.push_back(temAIresult);
}
} }
#endif
{ {
std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>(); std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>();
@ -3367,7 +3369,7 @@ int ImgCheckAnalysisy::AI_Detect_127Cell()
AIresult.copyTo(AIresultMask(result->roi), AIresult); AIresult.copyTo(AIresultMask(result->roi), AIresult);
} }
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
{ {
std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>(); std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>();
temAIresult->roi = result->roi; temAIresult->roi = result->roi;
@ -3375,8 +3377,6 @@ int ImgCheckAnalysisy::AI_Detect_127Cell()
temAIresult->AI_mask = outimg; temAIresult->AI_mask = outimg;
pDetAIResult->AI_Qx_MaskList.push_back(temAIresult); pDetAIResult->AI_Qx_MaskList.push_back(temAIresult);
} }
#endif
{ {
std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>(); std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>();
temAIresult->roi = result->roi; temAIresult->roi = result->roi;
@ -3560,7 +3560,7 @@ int ImgCheckAnalysisy::AI_Detect_RLine_512()
AIresult.copyTo(AIresultMask(result->roi), AIresult); AIresult.copyTo(AIresultMask(result->roi), AIresult);
} }
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
{ {
std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>(); std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>();
temAIresult->roi = result->roi; temAIresult->roi = result->roi;
@ -3568,8 +3568,6 @@ int ImgCheckAnalysisy::AI_Detect_RLine_512()
temAIresult->AI_mask = outimg; temAIresult->AI_mask = outimg;
pDetAIResult->AI_Qx_MaskList.push_back(temAIresult); pDetAIResult->AI_Qx_MaskList.push_back(temAIresult);
} }
#endif
{ {
std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>(); std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>();
temAIresult->roi = result->roi; temAIresult->roi = result->roi;
@ -3707,6 +3705,12 @@ int ImgCheckAnalysisy::ThreadTask(int nId)
return 0; return 0;
} }
bool ImgCheckAnalysisy::NeedDrawAndSave()
{
// base 层“是否存图绘制”开关:绘制并保存结果图(运行时替代 SAVE_RESIMG 宏)
return m_pbaseCheckFunction != NULL && m_pbaseCheckFunction->bDrawAndSave;
}
int ImgCheckAnalysisy::ResizeImg() int ImgCheckAnalysisy::ResizeImg()
{ {
@ -3716,35 +3720,37 @@ int ImgCheckAnalysisy::ResizeImg()
float fw = RESIZE_IMAGE_WIDTH * 1.0f / m_pImageAllResult->detImg.cols; float fw = RESIZE_IMAGE_WIDTH * 1.0f / m_pImageAllResult->detImg.cols;
sz.height = int(m_pImageAllResult->detImg.rows * fw); sz.height = int(m_pImageAllResult->detImg.rows * fw);
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
cv::resize(m_pImageAllResult->detImg, m_pImageAllResult->resultImg, sz);
// 需要绘制屏蔽区
if ((m_pBasicConfig && m_pBasicConfig->bDrawShieldRoi) ||
(m_pFuntion && m_pFuntion->function.f_ShieldRegion.bOpen && m_pFuntion->function.f_ShieldRegion.bDraw))
{ {
m_pdetlog->AddCheckstr(PrintLevel_1, "ResizeImg", "DrawShieldR param is open"); cv::resize(m_pImageAllResult->detImg, m_pImageAllResult->resultImg, sz);
cv::Mat shieldImg = m_pImageAllResult->shieldImg;
cv::Mat sizeshieldimg; // 需要绘制屏蔽区
if (!shieldImg.empty()) if ((m_pBasicConfig && m_pBasicConfig->bDrawShieldRoi) ||
(m_pFuntion && m_pFuntion->function.f_ShieldRegion.bOpen && m_pFuntion->function.f_ShieldRegion.bDraw))
{
m_pdetlog->AddCheckstr(PrintLevel_1, "ResizeImg", "DrawShieldR param is open");
cv::Mat shieldImg = m_pImageAllResult->shieldImg;
cv::Mat sizeshieldimg;
if (!shieldImg.empty())
{
cv::resize(shieldImg, sizeshieldimg, sz);
sizeshieldimg *= 0.2;
m_pImageAllResult->resultImg += sizeshieldimg;
}
}
if (m_pImageAllResult->resultImg.channels() == 1)
{ {
cv::resize(shieldImg, sizeshieldimg, sz); cv::cvtColor(m_pImageAllResult->resultImg, m_pImageAllResult->resultImg, cv::COLOR_GRAY2BGR);
sizeshieldimg *= 0.2;
m_pImageAllResult->resultImg += sizeshieldimg;
} }
m_CheckResult_shareP->resultimg = m_pImageAllResult->resultImg;
} }
if (m_pImageAllResult->resultImg.channels() == 1) else
{ {
cv::cvtColor(m_pImageAllResult->resultImg, m_pImageAllResult->resultImg, cv::COLOR_GRAY2BGR); m_pImageAllResult->fscale_detToresult_x = RESIZE_IMAGE_WIDTH * 1.0f / m_pImageAllResult->detImg.cols;
m_pImageAllResult->fscale_detToresult_y = sz.height * 1.0f / m_pImageAllResult->detImg.rows;
} }
m_CheckResult_shareP->resultimg = m_pImageAllResult->resultImg;
#else
m_pImageAllResult->fscale_detToresult_x = RESIZE_IMAGE_WIDTH * 1.0f / m_pImageAllResult->detImg.cols;
m_pImageAllResult->fscale_detToresult_y = sz.height * 1.0f / m_pImageAllResult->detImg.rows;
#endif
m_pdetlog->AddCheckstr(PrintLevel_1, "ResizeImg", "showImg size [w %d,h %d]-> show img [w %d,h %d] ", m_pdetlog->AddCheckstr(PrintLevel_1, "ResizeImg", "showImg size [w %d,h %d]-> show img [w %d,h %d] ",
m_CutRoi.width, m_CutRoi.height, sz.width, sz.height); m_CutRoi.width, m_CutRoi.height, sz.width, sz.height);
return 0; return 0;
@ -3973,12 +3979,10 @@ int ImgCheckAnalysisy::UpdateBlobHFlag_RLine_512()
int ImgCheckAnalysisy::DrawResult_Step_1() int ImgCheckAnalysisy::DrawResult_Step_1()
{ {
m_pdetlog->AddCheckstr(PrintLevel_0, "DrawResult_Step_1", "=======start"); m_pdetlog->AddCheckstr(PrintLevel_0, "DrawResult_Step_1", "=======start");
#ifndef SAVE_RESIMG
if (m_CheckResult_shareP->resultimg.empty()) if (m_CheckResult_shareP->resultimg.empty())
{ {
return 0; return 0;
} }
#endif
// std::cout << m_pBasicConfig->bDrawPreRoi << std::endl; // std::cout << m_pBasicConfig->bDrawPreRoi << std::endl;
if (m_pBasicConfig->bDrawPreRoi) if (m_pBasicConfig->bDrawPreRoi)
{ {
@ -4994,14 +4998,17 @@ int ImgCheckAnalysisy::ImgPreDet()
creatsavedir(); creatsavedir();
} }
#ifdef SAVE_RESIMG if (NeedDrawAndSave())
m_CheckResult_shareP->cutSrcimg = m_pImageAllResult->detImg; {
ResizeImg(); m_CheckResult_shareP->cutSrcimg = m_pImageAllResult->detImg;
m_pImageAllResult->fscale_detToresult_x = m_pImageAllResult->resultImg.cols * 1.0f / m_pImageAllResult->detImg.cols; ResizeImg();
m_pImageAllResult->fscale_detToresult_y = m_pImageAllResult->resultImg.rows * 1.0f / m_pImageAllResult->detImg.rows; m_pImageAllResult->fscale_detToresult_x = m_pImageAllResult->resultImg.cols * 1.0f / m_pImageAllResult->detImg.cols;
#else m_pImageAllResult->fscale_detToresult_y = m_pImageAllResult->resultImg.rows * 1.0f / m_pImageAllResult->detImg.rows;
ResizeImg(); }
#endif else
{
ResizeImg();
}
return 0; return 0;
} }

@ -2383,6 +2383,7 @@ struct BaseCheckFunction
Base_Function_BigNG bigNG; Base_Function_BigNG bigNG;
Base_Function_EdgeChannel edgeChannel; Base_Function_EdgeChannel edgeChannel;
Base_Function_AD_Check ad_check; Base_Function_AD_Check ad_check;
bool bDrawAndSave; // 是否存图绘制(绘制并保存结果图,运行时替代 SAVE_RESIMG 宏)
BaseCheckFunction() BaseCheckFunction()
{ {
Init(); Init();
@ -2395,6 +2396,7 @@ struct BaseCheckFunction
bigNG.Init(); bigNG.Init();
edgeChannel.Init(); edgeChannel.Init();
ad_check.Init(); ad_check.Init();
bDrawAndSave = false;
} }
void copy(BaseCheckFunction tem) void copy(BaseCheckFunction tem)
{ {
@ -2404,6 +2406,7 @@ struct BaseCheckFunction
this->bigNG.copy(tem.bigNG); this->bigNG.copy(tem.bigNG);
this->edgeChannel.copy(tem.edgeChannel); this->edgeChannel.copy(tem.edgeChannel);
this->ad_check.copy(tem.ad_check); this->ad_check.copy(tem.ad_check);
this->bDrawAndSave = tem.bDrawAndSave;
} }
void print(std::string str) void print(std::string str)
{ {
@ -2414,6 +2417,7 @@ struct BaseCheckFunction
bigNG.print("bigNG"); bigNG.print("bigNG");
edgeChannel.print("edgeChannel"); edgeChannel.print("edgeChannel");
ad_check.print("ad_check"); ad_check.print("ad_check");
printf("bDrawAndSave %d\n", bDrawAndSave);
} }
std::string GetInfo(std::string str) std::string GetInfo(std::string str)
{ {

@ -1537,6 +1537,11 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value)
_config.ad_check.Init(); _config.ad_check.Init();
} }
} }
// 是否存图绘制开关:控制结果图绘制与保存(运行时替代 SAVE_RESIMG 宏)
if ("bDrawAndSave" == strCode)
{
_config.bDrawAndSave = value["isOpen"].asBool();
}
return 0; return 0;
} }

Loading…
Cancel
Save