update 优化存图

dev_lsy
liusiyang 3 weeks ago
parent df101943fe
commit ad4bc5cfc7

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

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

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

@ -183,8 +183,8 @@ AI_Edge_Algin::AI_Edge_Algin(std::shared_ptr<DetLog> &log_ref)
m_bModelSucc = false; m_bModelSucc = false;
m_bModel_Mark_Succ = false; m_bModel_Mark_Succ = false;
m_bshowimg = false; m_bshowimg = false;
m_strRootPath_Big = "/home/aidlux/BOE/Algin/"; m_strRootPath_Big = "/home/aidlux/BOE/Algin/KK/";
m_strRootPath_Mark = "/home/aidlux/BOE/MarkLine/"; m_strRootPath_Mark = "/home/aidlux/BOE/MarkLine/KK/";
creatsavedir(); creatsavedir();
std::string m_strSavePath; 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; 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) 的亮度一致)
@ -387,19 +393,12 @@ 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(); creatsavedir();
static int sdk = 0; std::string str = m_strSavePath_Big + pDetConfig->strProductID + "_" + pDetConfig->strChannel + "_" + std::to_string(AIModel_type) + "_Img.png";
std::string str = m_strSavePath_Big + std::to_string(sdk) + "_" + pDetConfig->strChannel + "_Img.png"; int sr = m_pImageStorage->addImage(str, saveInImg);
int sr = m_pImageStorage->addImage(str, detImg);
if (sr == 0) if (sr == 0)
{ {
str = m_strSavePath_Big + std::to_string(sdk) + "_" + pDetConfig->strChannel + "_Img_mask.png"; str = m_strSavePath_Big + pDetConfig->strProductID + "_" + pDetConfig->strChannel + "_" + std::to_string(AIModel_type) + "_Img_mask.png";
int sr = m_pImageStorage->addImage(str, mask, true); m_pImageStorage->addImage(str, mask, true);
sdk++;
if (sdk > 99999)
{
sdk = 0;
/* code */
}
} }
} }

@ -40,8 +40,7 @@ ImgCheckAnalysisy::ImgCheckAnalysisy()
m_pbaseCheckFunction = &m_AnalysisyConfig.baseFunction; m_pbaseCheckFunction = &m_AnalysisyConfig.baseFunction;
m_strLastDate = ""; m_strLastDate = "";
m_strRootPath_TA_cls = "/home/aidlux/BOE/Cls/TA/"; m_strRootPath_KK_cls = "/home/aidlux/BOE/Cls/KK/";
m_strRootPath_CA_cls = "/home/aidlux/BOE/Cls/CA/";
creatsavedir(); creatsavedir();
m_pImageStorage = ImageStorage::getInstance(); m_pImageStorage = ImageStorage::getInstance();
m_nConfigIdx = -1; m_nConfigIdx = -1;
@ -202,12 +201,10 @@ int ImgCheckAnalysisy::creatsavedir()
return 0; return 0;
} }
m_strLastDate = curDate; m_strLastDate = curDate;
m_strRootPath_TA_cls += m_strLastDate + "/"; m_strRootPath_KK_cls += m_strLastDate + "/";
m_strRootPath_CA_cls += m_strLastDate + "/";
for (int i = 0; i < AI_CLass_QX_NAME_count; i++) 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_KK_cls + std::to_string(i) + "/");
CheckUtil::CreateDir(m_strRootPath_CA_cls + std::to_string(i) + "/");
} }
return 0; 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); // 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 = ""; 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"; saveimgpaht = m_strRootPath_KK_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";
} }
{ {
@ -1989,6 +1981,7 @@ int ImgCheckAnalysisy::Pin_Qx_Det(const cv::Mat &img)
m_Edge_DetConfig.Init(); m_Edge_DetConfig.Init();
m_Edge_DetConfig.strChannel = m_strCurDetChannel; m_Edge_DetConfig.strChannel = m_strCurDetChannel;
m_Edge_DetConfig.strProductID = DetImgInfo_shareP->strImgProductID;
m_Edge_DetConfig.pBaseCheckFunction = m_pbaseCheckFunction; m_Edge_DetConfig.pBaseCheckFunction = m_pbaseCheckFunction;
m_Edge_DetConfig.bSaveResultImg = false; 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.bSaveResultImg = true;
} }
config.strChannel = DetImgInfo_shareP->strChannel; config.strChannel = DetImgInfo_shareP->strChannel;
config.strProductID = DetImgInfo_shareP->strImgProductID;
config.pBaseCheckFunction = m_pbaseCheckFunction; config.pBaseCheckFunction = m_pbaseCheckFunction;
int re = m_pAI_Edge_Algin.Detect(img, &config, m_pEdge_Align_Result); int re = m_pAI_Edge_Algin.Detect(img, &config, m_pEdge_Align_Result);
if (re != 0) if (re != 0)

@ -10,6 +10,10 @@ Pin_QX_Det::Pin_QX_Det(std::shared_ptr<DetLog> &log_ref)
{ {
std::string m_strSavePath; std::string m_strSavePath;
AI_Factory = AIFactory::GetInstance(); 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() 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; 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)
{ {
@ -41,11 +51,38 @@ int Pin_QX_Det::GetPinMask(const cv::Mat &img, DetConfigResult *pDetConfig, Mat
return re123; 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) if (pDetConfig->bSaveResultImg)
{ {
cv::imwrite(pDetConfig->strChannel +"_pin_" +"in.png", detImg); cv::imwrite(pDetConfig->strChannel +"_pin_" +"in.png", detImg);
cv::imwrite(pDetConfig->strChannel +"_pin_" +"out_mask.png", mask); cv::imwrite(pDetConfig->strChannel +"_pin_" +"out_mask.png", mask);
} }
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; return 0;
} }

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

@ -825,7 +825,7 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value)
// _config.pinDet.print("pinDet"); // _config.pinDet.print("pinDet");
// getchar(); // getchar();
} }
if ("Det_Image_Save" == strCode) if ("KK_Image_Save" == strCode)
{ {
auto value_f = value; auto value_f = value;
// std::cout << value_f << std::endl; // std::cout << value_f << std::endl;
@ -834,10 +834,6 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value)
if (_config.saveImg.bOpen) 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"]) if (value_f["form"]["SaveImg_Config"]["Cls_Save"])
{ {
_config.saveImg.bSaveClsImg = value_f["form"]["SaveImg_Config"]["Cls_Save"].asBool(); _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(); _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"]) if (value_f["form"]["SaveImg_Config"]["AI_Det_Save"])
{ {
_config.saveImg.bSaveAIDetImg = value_f["form"]["SaveImg_Config"]["AI_Det_Save"].asBool(); _config.saveImg.bSaveAIDetImg = value_f["form"]["SaveImg_Config"]["AI_Det_Save"].asBool();

Loading…
Cancel
Save