update 优化存图

dev_lsy
liusiyang 3 weeks ago
parent d4b37dc077
commit fe9fdcd781

@ -364,12 +364,6 @@ int AI_Edge_Algin::Get_Edge(int AIModel_type, const cv::Mat &img, DetConfig *pDe
cout << "imgSize: " << img.size() << ", " << "detImgSize: " << detImg.size() << ", " << "szSize: " << sz << endl; cout << "imgSize: " << img.size() << ", " << "detImgSize: " << detImg.size() << ", " << "szSize: " << sz << endl;
cv::resize(img, detImg, sz); cv::resize(img, detImg, sz);
// 存图用: 通道转换(灰度化)之前的模型输入图(未开启存图时不克隆, 节省时间/内存)
cv::Mat saveInImg;
if (pDetConfig->pBaseCheckFunction->saveImg.bSaveAlginImg)
{
saveInImg = detImg.clone();
}
int re = 0; int re = 0;
cv::Mat mask; cv::Mat mask;
// 模型输入要求单通道;原图为彩色时按 BGR 顺序转灰度(与 imread(path,0) 的亮度一致) // 模型输入要求单通道;原图为彩色时按 BGR 顺序转灰度(与 imread(path,0) 的亮度一致)
@ -392,14 +386,11 @@ int AI_Edge_Algin::Get_Edge(int AIModel_type, const cv::Mat &img, DetConfig *pDe
if (pDetConfig->pBaseCheckFunction->saveImg.bSaveAlginImg) if (pDetConfig->pBaseCheckFunction->saveImg.bSaveAlginImg)
{ {
creatsavedir(); std::string cur_time_s = CheckUtil::getCurTimeHMS();
std::string str = m_strSavePath_Big + pDetConfig->strProductID + "_" + pDetConfig->strChannel + "_" + std::to_string(AIModel_type) + "_Img.png"; std::string strSaveDir = "/home/aidlux/BOE/AI_Detect/" + pDetConfig->strProductID + "/";
int sr = m_pImageStorage->addImage(str, saveInImg); CheckUtil::CreateDir(strSaveDir);
if (sr == 0) std::string strSavePath_out = strSaveDir + cur_time_s + "_" + pDetConfig->strChannel + "_" + std::to_string(AIModel_type) + "_Align_out.png";
{ CheckUtil::SaveImgAsync(strSavePath_out, mask);
str = m_strSavePath_Big + pDetConfig->strProductID + "_" + pDetConfig->strChannel + "_" + std::to_string(AIModel_type) + "_Img_mask.png";
m_pImageStorage->addImage(str, mask, true);
}
} }
if (m_pDetConfig->bSaveResultImg) if (m_pDetConfig->bSaveResultImg)

@ -93,9 +93,9 @@ std::string CheckUtil::getCurTimeHMS()
int millisec = tv.tv_usec / 1000; // 微秒转毫秒 int millisec = tv.tv_usec / 1000; // 微秒转毫秒
std::ostringstream oss; std::ostringstream oss;
oss << std::setfill('0') << std::setw(2) << time_info->tm_hour << ":" oss << std::setfill('0') << std::setw(2) << time_info->tm_hour << "-"
<< std::setfill('0') << std::setw(2) << time_info->tm_min << ":" << std::setfill('0') << std::setw(2) << time_info->tm_min << "-"
<< std::setfill('0') << std::setw(2) << time_info->tm_sec << "." << std::setfill('0') << std::setw(2) << time_info->tm_sec << "-"
<< std::setfill('0') << std::setw(3) << millisec; << std::setfill('0') << std::setw(3) << millisec;
return oss.str(); // 返回格式 "HH:MM:SS.mmm" return oss.str(); // 返回格式 "HH:MM:SS.mmm"

@ -1556,6 +1556,7 @@ int ImgCheckAnalysisy::ConfigCheck(cv::Mat img)
int ImgCheckAnalysisy::AI_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg) int ImgCheckAnalysisy::AI_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg)
{ {
std::string cur_time_s = CheckUtil::getCurTimeHMS();
// 依次使用多个检测模型,各模型输出 mask 取并集作为最终 outmask; // 依次使用多个检测模型,各模型输出 mask 取并集作为最终 outmask;
// Defect_QueXi 模型是否参与合并由基础参数 Merge_QueXi 开关控制 // Defect_QueXi 模型是否参与合并由基础参数 Merge_QueXi 开关控制
std::vector<std::shared_ptr<AIModel_Base>> pAIDetList; std::vector<std::shared_ptr<AIModel_Base>> pAIDetList;
@ -1685,12 +1686,10 @@ int ImgCheckAnalysisy::AI_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg)
// 目录结构:/home/aidlux/BOE/ZB_SOCKET/AI_Detect/<模型名称>/<产品ID>/ // 目录结构:/home/aidlux/BOE/ZB_SOCKET/AI_Detect/<模型名称>/<产品ID>/
if (m_pbaseCheckFunction->saveImg.bSaveAIDetImg && !modelMaskFull.empty()) if (m_pbaseCheckFunction->saveImg.bSaveAIDetImg && !modelMaskFull.empty())
{ {
std::string strSaveDir = "/home/aidlux/BOE/AI_Detect/KK/" + strModelName + "/" + DetImgInfo_shareP->strImgProductID + "/"; std::string strSaveDir = "/home/aidlux/BOE/AI_Detect/" + DetImgInfo_shareP->strImgProductID + "/";
CheckUtil::CreateDir(strSaveDir); CheckUtil::CreateDir(strSaveDir);
std::string strSavePath_in = strSaveDir + m_strCurDetChannel + "_in.png"; std::string strSavePath_out = strSaveDir + cur_time_s + "_" + m_strCurDetChannel + "_" + strModelName + "_out.png";
std::string strSavePath_out = strSaveDir + m_strCurDetChannel + "_out.png"; CheckUtil::SaveImgAsync(strSavePath_out, modelMaskFull);
cv::imwrite(strSavePath_in, detInputImg);
cv::imwrite(strSavePath_out, modelMaskFull);
} }
// 4、mask 结果放入队列,用于 AIMaskDet 加速 blob 计算(整图 ROI) // 4、mask 结果放入队列,用于 AIMaskDet 加速 blob 计算(整图 ROI)
@ -1745,6 +1744,13 @@ int ImgCheckAnalysisy::AI_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg)
m_pdetlog->AddCheckstr(PrintLevel_0, DET_LOG_LEVEL_3, strBaseLog, "AI_Detect End"); m_pdetlog->AddCheckstr(PrintLevel_0, DET_LOG_LEVEL_3, strBaseLog, "AI_Detect End");
if (m_pbaseCheckFunction->saveImg.bSaveAIDetImg )
{
std::string strSaveDir = "/home/aidlux/BOE/AI_Detect/" + DetImgInfo_shareP->strImgProductID + "/";
CheckUtil::CreateDir(strSaveDir);
std::string strSavePath_in = strSaveDir + cur_time_s + "_" + m_strCurDetChannel + "_in.png";
CheckUtil::SaveImgAsync(strSavePath_in, m_CheckResult_shareP->cutSrcimg);
}
// 临时存图 // 临时存图
if (DetImgInfo_shareP->bsaveProcessImg) if (DetImgInfo_shareP->bsaveProcessImg)
{ {

@ -31,12 +31,6 @@ int Pin_QX_Det::GetPinMask(const cv::Mat &img, DetConfigResult *pDetConfig, Mat
cout << "imgSize: " << img.size() << ", " << "detImgSize: " << detImg.size() << ", " << "szSize: " << sz << endl; cout << "imgSize: " << img.size() << ", " << "detImgSize: " << detImg.size() << ", " << "szSize: " << sz << endl;
cv::resize(img, detImg, sz); cv::resize(img, detImg, sz);
// 存图用: 通道转换(灰度化)之前的模型输入图(未开启存图时不克隆, 节省时间/内存)
cv::Mat saveInImg;
if (pDetConfig->pBaseCheckFunction != NULL && pDetConfig->pBaseCheckFunction->saveImg.bSavePinImg)
{
saveInImg = detImg.clone();
}
int re = 0; int re = 0;
if (detImg.channels() != 1) if (detImg.channels() != 1)
{ {
@ -55,20 +49,18 @@ int Pin_QX_Det::GetPinMask(const cv::Mat &img, DetConfigResult *pDetConfig, Mat
// 输入图存未做通道转化(灰度化)之前的图; 文件名首位用产品ID // 输入图存未做通道转化(灰度化)之前的图; 文件名首位用产品ID
if (pDetConfig->pBaseCheckFunction != NULL && pDetConfig->pBaseCheckFunction->saveImg.bSavePinImg) if (pDetConfig->pBaseCheckFunction != NULL && pDetConfig->pBaseCheckFunction->saveImg.bSavePinImg)
{ {
creatsavedir(); std::string cur_time_s = CheckUtil::getCurTimeHMS();
std::string str = m_strSavePath_Pin + pDetConfig->strProductID + "_" + pDetConfig->strChannel + "_pin_in.png"; std::string strSaveDir = "/home/aidlux/BOE/AI_Detect/" + pDetConfig->strProductID + "/";
int sr = m_pImageStorage->addImage(str, saveInImg); CheckUtil::CreateDir(strSaveDir);
if (sr == 0) std::string strSavePath_out = strSaveDir + cur_time_s + "_" + pDetConfig->strChannel + "_pin_out.png";
{ CheckUtil::SaveImgAsync(strSavePath_out, mask);
str = m_strSavePath_Pin + pDetConfig->strProductID + "_" + pDetConfig->strChannel + "_pin_out_mask.png";
m_pImageStorage->addImage(str, mask, true);
}
} }
if (pDetConfig->bSaveResultImg) if (pDetConfig->bSaveResultImg)
{ {
cv::imwrite(pDetConfig->strChannel +"_pin_" +"in.png", detImg); CheckUtil::SaveImgAsync(pDetConfig->strChannel +"_pin_" +"in.png", detImg);
cv::imwrite(pDetConfig->strChannel +"_pin_" +"out_mask.png", mask); CheckUtil::SaveImgAsync(pDetConfig->strChannel +"_pin_" +"out_mask.png", mask);
} }
return 0; return 0;

Loading…
Cancel
Save