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

dev_lsy
liusiyang 3 weeks ago
parent bbde51f4cc
commit 14c6066ff9

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

@ -120,6 +120,9 @@ private:
// 获取缺陷 对应的AI输入 输出图片,
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);
std::shared_ptr<ImageResultJudge::DrawInfo> GetTask();

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

@ -361,9 +361,10 @@ int CameraCheckAnalysisy::ResultParamJudge()
long t1 = CheckUtil::getcurTime();
int re = m_imageResultJudge.MergeResult(m_pCheck_Result->ImageALLDetResultList.at(imgidx), ptemre);
long t2 = CheckUtil::getcurTime();
#ifdef SAVE_RESIMG
m_imageResultJudge.DrawResult(m_pCheck_Result->ImageALLDetResultList.at(imgidx));
#endif
if (m_pbaseCheckFunction != NULL && m_pbaseCheckFunction->bDrawAndSave)
{
m_imageResultJudge.DrawResult(m_pCheck_Result->ImageALLDetResultList.at(imgidx));
}
long t3 = CheckUtil::getcurTime();
// 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;
}
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)
{
@ -629,17 +635,18 @@ int ImageResultJudge::ResultJudge(std::shared_ptr<ImageAllResult> pImageResult)
// CheckUtil::printROI(CutRoi, "CutRoi");
cv::Size sz = cv::Size(QX_SAMLLIMG_WIDTH, QX_SAMLLIMG_HEIGHT);
#ifdef SAVE_RESIMG
if (pImageResult->detImg.channels() == 1)
if (NeedDrawAndSave())
{
cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR);
}
else
{
tem.srcImg = pImageResult->detImg(CutRoi).clone();
if (pImageResult->detImg.channels() == 1)
{
cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR);
}
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);
tem.type = nqx_type;
@ -684,9 +691,10 @@ int ImageResultJudge::ResultJudge(std::shared_ptr<ImageAllResult> pImageResult)
m_CheckResult_shareP->nresult = nqx_type;
}
#ifdef SAVE_RESIMG
GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img);
#endif
if (NeedDrawAndSave())
{
GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img);
}
m_CheckResult_shareP->qxImageResult.push_back(tem);
}
else
@ -697,9 +705,10 @@ int ImageResultJudge::ResultJudge(std::shared_ptr<ImageAllResult> pImageResult)
m_CheckResult_shareP->nYS_result = nqx_type;
}
#ifdef SAVE_RESIMG
GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img);
#endif
if (NeedDrawAndSave())
{
GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img);
}
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::Size sz = cv::Size(QX_SAMLLIMG_WIDTH, QX_SAMLLIMG_HEIGHT);
#ifdef SAVE_RESIMG
if (pImageResult->detImg.channels() == 1)
if (NeedDrawAndSave())
{
cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR);
}
else
{
tem.srcImg = pImageResult->detImg(CutRoi).clone();
if (pImageResult->detImg.channels() == 1)
{
cv::cvtColor(pImageResult->detImg(CutRoi), tem.srcImg, cv::COLOR_GRAY2BGR);
}
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 checkFlage = ANALYSIS_TYPE_TF;
@ -1060,9 +1070,10 @@ int ImageResultJudge::MergeResult(std::shared_ptr<ImageAllResult> pImageResult,
{
m_CheckResult_shareP->nresult = nqx_type;
}
#ifdef SAVE_RESIMG
GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img);
#endif
if (NeedDrawAndSave())
{
GetAIDetImg(pImageResult, pCenter, tem.AI_in_Img, tem.AI_out_img);
}
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);
}
#ifdef SAVE_RESIMG
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())
if (NeedDrawAndSave())
{
cv::Mat &bqMask = m_pImageAllResult->bq_DetAIResult->AI_MaskImg;
if (bqMask.size() == m_CheckResult_shareP->resultMaskImg.size())
m_CheckResult_shareP->resultMaskImg = m_pImageAllResult->qx_DetAIResult->AI_MaskImg.clone();
// 将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);
// if (!m_pImageAllResult->qx_DetAIResult->AI_MaskImg.empty())
@ -3185,16 +3186,17 @@ int ImgCheckAnalysisy::AI_Detect_QX()
}
// 仅在调试模式下保存 AI_Qx_MaskList,并限制数量
#ifdef SAVE_RESIMG
if (DetImgInfo_shareP->bDebugsaveImg && pDetAIResult->AI_Qx_MaskList.size() < 200)
if (NeedDrawAndSave())
{
std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>();
temAIresult->roi = result->roi;
temAIresult->AI_inImg = result->input;
temAIresult->AI_mask = outimg;
pDetAIResult->AI_Qx_MaskList.push_back(temAIresult);
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>();
temAIresult->roi = result->roi;
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>();
@ -3367,7 +3369,7 @@ int ImgCheckAnalysisy::AI_Detect_127Cell()
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>();
temAIresult->roi = result->roi;
@ -3375,8 +3377,6 @@ int ImgCheckAnalysisy::AI_Detect_127Cell()
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>();
temAIresult->roi = result->roi;
@ -3560,7 +3560,7 @@ int ImgCheckAnalysisy::AI_Detect_RLine_512()
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>();
temAIresult->roi = result->roi;
@ -3568,8 +3568,6 @@ int ImgCheckAnalysisy::AI_Detect_RLine_512()
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>();
temAIresult->roi = result->roi;
@ -3707,6 +3705,12 @@ int ImgCheckAnalysisy::ThreadTask(int nId)
return 0;
}
bool ImgCheckAnalysisy::NeedDrawAndSave()
{
// base 层“是否存图绘制”开关:绘制并保存结果图(运行时替代 SAVE_RESIMG 宏)
return m_pbaseCheckFunction != NULL && m_pbaseCheckFunction->bDrawAndSave;
}
int ImgCheckAnalysisy::ResizeImg()
{
@ -3716,35 +3720,37 @@ int ImgCheckAnalysisy::ResizeImg()
float fw = RESIZE_IMAGE_WIDTH * 1.0f / m_pImageAllResult->detImg.cols;
sz.height = int(m_pImageAllResult->detImg.rows * fw);
#ifdef SAVE_RESIMG
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))
if (NeedDrawAndSave())
{
m_pdetlog->AddCheckstr(PrintLevel_1, "ResizeImg", "DrawShieldR param is open");
cv::Mat shieldImg = m_pImageAllResult->shieldImg;
cv::Mat sizeshieldimg;
if (!shieldImg.empty())
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::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);
sizeshieldimg *= 0.2;
m_pImageAllResult->resultImg += sizeshieldimg;
cv::cvtColor(m_pImageAllResult->resultImg, m_pImageAllResult->resultImg, cv::COLOR_GRAY2BGR);
}
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_CutRoi.width, m_CutRoi.height, sz.width, sz.height);
return 0;
@ -3973,12 +3979,10 @@ int ImgCheckAnalysisy::UpdateBlobHFlag_RLine_512()
int ImgCheckAnalysisy::DrawResult_Step_1()
{
m_pdetlog->AddCheckstr(PrintLevel_0, "DrawResult_Step_1", "=======start");
#ifndef SAVE_RESIMG
if (m_CheckResult_shareP->resultimg.empty())
{
return 0;
}
#endif
// std::cout << m_pBasicConfig->bDrawPreRoi << std::endl;
if (m_pBasicConfig->bDrawPreRoi)
{
@ -4994,14 +4998,17 @@ int ImgCheckAnalysisy::ImgPreDet()
creatsavedir();
}
#ifdef SAVE_RESIMG
m_CheckResult_shareP->cutSrcimg = m_pImageAllResult->detImg;
ResizeImg();
m_pImageAllResult->fscale_detToresult_x = m_pImageAllResult->resultImg.cols * 1.0f / m_pImageAllResult->detImg.cols;
m_pImageAllResult->fscale_detToresult_y = m_pImageAllResult->resultImg.rows * 1.0f / m_pImageAllResult->detImg.rows;
#else
ResizeImg();
#endif
if (NeedDrawAndSave())
{
m_CheckResult_shareP->cutSrcimg = m_pImageAllResult->detImg;
ResizeImg();
m_pImageAllResult->fscale_detToresult_x = m_pImageAllResult->resultImg.cols * 1.0f / m_pImageAllResult->detImg.cols;
m_pImageAllResult->fscale_detToresult_y = m_pImageAllResult->resultImg.rows * 1.0f / m_pImageAllResult->detImg.rows;
}
else
{
ResizeImg();
}
return 0;
}

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

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

Loading…
Cancel
Save