update 优化存图

dev_lsy
liusiyang 3 weeks ago
parent df101943fe
commit ad4bc5cfc7

@ -94,6 +94,7 @@ public:
{
int ncamId; // 相机ID
BaseCheckFunction *pBaseCheckFunction;
std::string strProductID; // 产品ID(存图文件名用)
std::string strChannel; // 通道
int nthresholdvalue; // 背景阈值
int nAIErodesize; // 边缘腐蚀强度
@ -116,6 +117,7 @@ public:
saveProcessImg = Save_Close;
bUseDrawRoi_Check = false;
drawRoi = cv::Rect(0, 0, 0, 0);
strProductID = "";
if (!drawMask.empty())
{
drawMask.release();

@ -286,8 +286,7 @@ private:
std::vector<cv::Rect> SmallRoiList;
std::string m_strRootPath_TA_cls;
std::string m_strRootPath_CA_cls;
std::string m_strRootPath_KK_cls;
std::string m_strSavePath_cls;
std::string m_strLastDate;

@ -59,6 +59,7 @@ public:
BaseCheckFunction *pBaseCheckFunction;
std::string strChannel;
std::string strProductID; // 产品ID(存图文件名用)
bool bSaveResultImg;
DetConfigResult()
{
@ -68,6 +69,7 @@ public:
{
pBaseCheckFunction = NULL;
strChannel = "";
strProductID = "";
bSaveResultImg = false;
}
};
@ -80,6 +82,7 @@ public:
private:
int InitModel_Pin();
int creatsavedir();
private:
bool m_bInitSucc; // 是否初始化成功
@ -89,6 +92,12 @@ private:
bool m_bshowimg;
cv::Mat showimg;
std::string m_strRootPath_Pin;
std::string m_strSavePath_Pin;
std::string m_strLastDate;
ImageStorage *m_pImageStorage;
std::shared_ptr<AIFactory> AI_Factory;
private:

@ -183,8 +183,8 @@ AI_Edge_Algin::AI_Edge_Algin(std::shared_ptr<DetLog> &log_ref)
m_bModelSucc = false;
m_bModel_Mark_Succ = false;
m_bshowimg = false;
m_strRootPath_Big = "/home/aidlux/BOE/Algin/";
m_strRootPath_Mark = "/home/aidlux/BOE/MarkLine/";
m_strRootPath_Big = "/home/aidlux/BOE/Algin/KK/";
m_strRootPath_Mark = "/home/aidlux/BOE/MarkLine/KK/";
creatsavedir();
std::string m_strSavePath;
@ -364,6 +364,12 @@ 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;
cv::resize(img, detImg, sz);
// 存图用: 通道转换(灰度化)之前的模型输入图(未开启存图时不克隆, 节省时间/内存)
cv::Mat saveInImg;
if (pDetConfig->pBaseCheckFunction->saveImg.bSaveAlginImg)
{
saveInImg = detImg.clone();
}
int re = 0;
cv::Mat mask;
// 模型输入要求单通道;原图为彩色时按 BGR 顺序转灰度(与 imread(path,0) 的亮度一致)
@ -387,19 +393,12 @@ int AI_Edge_Algin::Get_Edge(int AIModel_type, const cv::Mat &img, DetConfig *pDe
if (pDetConfig->pBaseCheckFunction->saveImg.bSaveAlginImg)
{
creatsavedir();
static int sdk = 0;
std::string str = m_strSavePath_Big + std::to_string(sdk) + "_" + pDetConfig->strChannel + "_Img.png";
int sr = m_pImageStorage->addImage(str, detImg);
std::string str = m_strSavePath_Big + pDetConfig->strProductID + "_" + pDetConfig->strChannel + "_" + std::to_string(AIModel_type) + "_Img.png";
int sr = m_pImageStorage->addImage(str, saveInImg);
if (sr == 0)
{
str = m_strSavePath_Big + std::to_string(sdk) + "_" + pDetConfig->strChannel + "_Img_mask.png";
int sr = m_pImageStorage->addImage(str, mask, true);
sdk++;
if (sdk > 99999)
{
sdk = 0;
/* code */
}
str = m_strSavePath_Big + pDetConfig->strProductID + "_" + pDetConfig->strChannel + "_" + std::to_string(AIModel_type) + "_Img_mask.png";
m_pImageStorage->addImage(str, mask, true);
}
}

@ -40,8 +40,7 @@ ImgCheckAnalysisy::ImgCheckAnalysisy()
m_pbaseCheckFunction = &m_AnalysisyConfig.baseFunction;
m_strLastDate = "";
m_strRootPath_TA_cls = "/home/aidlux/BOE/Cls/TA/";
m_strRootPath_CA_cls = "/home/aidlux/BOE/Cls/CA/";
m_strRootPath_KK_cls = "/home/aidlux/BOE/Cls/KK/";
creatsavedir();
m_pImageStorage = ImageStorage::getInstance();
m_nConfigIdx = -1;
@ -202,12 +201,10 @@ int ImgCheckAnalysisy::creatsavedir()
return 0;
}
m_strLastDate = curDate;
m_strRootPath_TA_cls += m_strLastDate + "/";
m_strRootPath_CA_cls += m_strLastDate + "/";
m_strRootPath_KK_cls += m_strLastDate + "/";
for (int i = 0; i < AI_CLass_QX_NAME_count; i++)
{
CheckUtil::CreateDir(m_strRootPath_TA_cls + std::to_string(i) + "/");
CheckUtil::CreateDir(m_strRootPath_CA_cls + std::to_string(i) + "/");
CheckUtil::CreateDir(m_strRootPath_KK_cls + std::to_string(i) + "/");
}
return 0;
}
@ -1680,18 +1677,13 @@ int ImgCheckAnalysisy::AI_QX_Class_Thread()
// printf("AI Class num %d = %s %f\n", cls_num, strclassName.c_str(), result->cls_score);
// 分类存图 开启。
if (m_pbaseCheckFunction->saveImg.bSaveAlginImg)
if (m_pbaseCheckFunction->saveImg.bSaveClsImg)
{
std::string saveimgpaht = "";
if (m_strCurDetChannel == "TA")
{
saveimgpaht = m_strRootPath_TA_cls + std::to_string(cls_num) + "/" + std::to_string(CheckUtil::getcurTime()) + "_" + std::to_string(result->cls_score) + ".png";
}
else
{
saveimgpaht = m_strRootPath_CA_cls + std::to_string(cls_num) + "/" + std::to_string(CheckUtil::getcurTime()) + "_" + std::to_string(result->cls_score) + ".png";
saveimgpaht = m_strRootPath_KK_cls + std::to_string(cls_num) + "/" + std::to_string(CheckUtil::getcurTime()) + "_" + std::to_string(result->cls_score) + ".png";
}
{
@ -1989,6 +1981,7 @@ int ImgCheckAnalysisy::Pin_Qx_Det(const cv::Mat &img)
m_Edge_DetConfig.Init();
m_Edge_DetConfig.strChannel = m_strCurDetChannel;
m_Edge_DetConfig.strProductID = DetImgInfo_shareP->strImgProductID;
m_Edge_DetConfig.pBaseCheckFunction = m_pbaseCheckFunction;
m_Edge_DetConfig.bSaveResultImg = false;
@ -2932,6 +2925,7 @@ int ImgCheckAnalysisy::AI_Edge(const cv::Mat &img, cv::RotatedRect &outerRoi, cv
config.bSaveResultImg = true;
}
config.strChannel = DetImgInfo_shareP->strChannel;
config.strProductID = DetImgInfo_shareP->strImgProductID;
config.pBaseCheckFunction = m_pbaseCheckFunction;
int re = m_pAI_Edge_Algin.Detect(img, &config, m_pEdge_Align_Result);
if (re != 0)

@ -10,6 +10,10 @@ Pin_QX_Det::Pin_QX_Det(std::shared_ptr<DetLog> &log_ref)
{
std::string m_strSavePath;
AI_Factory = AIFactory::GetInstance();
m_strLastDate = "";
m_strRootPath_Pin = "/home/aidlux/BOE/Algin/Pin/";
m_pImageStorage = ImageStorage::getInstance();
creatsavedir();
}
Pin_QX_Det::~Pin_QX_Det()
{
@ -27,6 +31,12 @@ int Pin_QX_Det::GetPinMask(const cv::Mat &img, DetConfigResult *pDetConfig, Mat
cout << "imgSize: " << img.size() << ", " << "detImgSize: " << detImg.size() << ", " << "szSize: " << sz << endl;
cv::resize(img, detImg, sz);
// 存图用: 通道转换(灰度化)之前的模型输入图(未开启存图时不克隆, 节省时间/内存)
cv::Mat saveInImg;
if (pDetConfig->pBaseCheckFunction != NULL && pDetConfig->pBaseCheckFunction->saveImg.bSavePinImg)
{
saveInImg = detImg.clone();
}
int re = 0;
if (detImg.channels() != 1)
{
@ -41,6 +51,20 @@ int Pin_QX_Det::GetPinMask(const cv::Mat &img, DetConfigResult *pDetConfig, Mat
return re123;
}
// 参数 Align_Pin_Save 打开时, 保存Pin脚定位模型的输入/输出图(异步存图, 不阻塞检测)
// 输入图存未做通道转化(灰度化)之前的图; 文件名首位用产品ID
if (pDetConfig->pBaseCheckFunction != NULL && pDetConfig->pBaseCheckFunction->saveImg.bSavePinImg)
{
creatsavedir();
std::string str = m_strSavePath_Pin + pDetConfig->strProductID + "_" + pDetConfig->strChannel + "_pin_in.png";
int sr = m_pImageStorage->addImage(str, saveInImg);
if (sr == 0)
{
str = m_strSavePath_Pin + pDetConfig->strProductID + "_" + pDetConfig->strChannel + "_pin_out_mask.png";
m_pImageStorage->addImage(str, mask, true);
}
}
if (pDetConfig->bSaveResultImg)
{
cv::imwrite(pDetConfig->strChannel +"_pin_" +"in.png", detImg);
@ -49,3 +73,16 @@ int Pin_QX_Det::GetPinMask(const cv::Mat &img, DetConfigResult *pDetConfig, Mat
return 0;
}
int Pin_QX_Det::creatsavedir()
{
std::string curDate = CheckUtil::getCurrentDate();
if (curDate == m_strLastDate)
{
return 0;
}
m_strLastDate = curDate;
m_strSavePath_Pin = m_strRootPath_Pin + curDate + "/";
CheckUtil::CreateDir(m_strSavePath_Pin);
return 0;
}

@ -1060,9 +1060,9 @@ struct Base_Function_SaveImg
{
bool bOpen; // 是否开启
bool bSaveMarkImg; // mark 存图
bool bSaveClsImg; // 分类 存图
bool bSaveAlginImg; // 分类 存图
bool bSaveAlginImg; // 定位 存图
bool bSavePinImg; // pin 存图
bool bSaveAIDetImg; // AI 检测残点图 存图(每个模型单独一级目录)
Base_Function_SaveImg()
@ -1072,7 +1072,7 @@ struct Base_Function_SaveImg
void Init()
{
bOpen = false;
bSaveMarkImg = false;
bSavePinImg = false;
bSaveClsImg = false;
bSaveAlginImg = false;
bSaveAIDetImg = false;
@ -1082,21 +1082,21 @@ struct Base_Function_SaveImg
{
this->bOpen = tem.bOpen;
this->bSaveMarkImg = tem.bSaveMarkImg;
this->bSavePinImg = tem.bSavePinImg;
this->bSaveClsImg = tem.bSaveClsImg;
this->bSaveAlginImg = tem.bSaveAlginImg;
this->bSaveAIDetImg = tem.bSaveAIDetImg;
}
void print(std::string str)
{
printf("%s>>bOpen %d bSaveMarkImg %d bSaveClsImg %d bSaveAlginImg %d bSaveAIDetImg %d \n", str.c_str(),
bOpen, bSaveMarkImg, bSaveClsImg, bSaveAlginImg, bSaveAIDetImg);
printf("%s>>bOpen %d bSavePinImg %d bSaveClsImg %d bSaveAlginImg %d bSaveAIDetImg %d \n", str.c_str(),
bOpen, bSavePinImg, bSaveClsImg, bSaveAlginImg, bSaveAIDetImg);
}
std::string GetInfo(std::string str)
{
char buffer[256];
sprintf(buffer, "%s>>bOpen %d bSaveMarkImg %d bSaveClsImg %d bSaveAlginImg %d bSaveAIDetImg %d \n", str.c_str(),
bOpen, bSaveMarkImg, bSaveClsImg, bSaveAlginImg, bSaveAIDetImg);
sprintf(buffer, "%s>>bOpen %d bSavePinImg %d bSaveClsImg %d bSaveAlginImg %d bSaveAIDetImg %d \n", str.c_str(),
bOpen, bSavePinImg, bSaveClsImg, bSaveAlginImg, bSaveAIDetImg);
std::string str123 = buffer;
return str123;
}

@ -825,7 +825,7 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value)
// _config.pinDet.print("pinDet");
// getchar();
}
if ("Det_Image_Save" == strCode)
if ("KK_Image_Save" == strCode)
{
auto value_f = value;
// std::cout << value_f << std::endl;
@ -834,10 +834,6 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value)
if (_config.saveImg.bOpen)
{
if (value_f["form"]["SaveImg_Config"]["Mark_Save"])
{
_config.saveImg.bSaveMarkImg = value_f["form"]["SaveImg_Config"]["Mark_Save"].asBool();
}
if (value_f["form"]["SaveImg_Config"]["Cls_Save"])
{
_config.saveImg.bSaveClsImg = value_f["form"]["SaveImg_Config"]["Cls_Save"].asBool();
@ -846,6 +842,10 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value)
{
_config.saveImg.bSaveAlginImg = value_f["form"]["SaveImg_Config"]["Align_Big_Save"].asBool();
}
if (value_f["form"]["SaveImg_Config"]["Align_Pin_Save"])
{
_config.saveImg.bSavePinImg = value_f["form"]["SaveImg_Config"]["Align_Pin_Save"].asBool();
}
if (value_f["form"]["SaveImg_Config"]["AI_Det_Save"])
{
_config.saveImg.bSaveAIDetImg = value_f["form"]["SaveImg_Config"]["AI_Det_Save"].asBool();

Loading…
Cancel
Save