Revert "feat 传统检测模式添加AI结果存图"

This reverts commit 1a1edf8475.
dev_lsy
liusiyang 3 weeks ago
parent 3655110ce2
commit 1d9168128b

@ -64,8 +64,6 @@ public:
cv::Mat detImg; cv::Mat detImg;
// AI 推理的mask图片 // AI 推理的mask图片
cv::Mat AIMaskImg; cv::Mat AIMaskImg;
// AI 推理的mask图片传统检测开启时AI 与传统并行检测AI 结果存于此,不参与最终 NG 判定)
cv::Mat AIDetMaskImg;
// 结果图片 // 结果图片
cv::Mat resultImg; cv::Mat resultImg;

@ -163,7 +163,7 @@ private:
// 参数 核对 // 参数 核对
int ConfigCheck(cv::Mat img); int ConfigCheck(cv::Mat img);
// 多线程方式处理 // 多线程方式处理
int AI_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg, bool bPushBlobQueue = true); int AI_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg);
// 传统检测 // 传统检测
int Traditional_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg); int Traditional_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg);
// 缺陷分类 // 缺陷分类
@ -181,9 +181,6 @@ private:
// 缺陷分类任务函数 // 缺陷分类任务函数
void TaskFun_QxClass(std::shared_ptr<TaskInfo> task); void TaskFun_QxClass(std::shared_ptr<TaskInfo> task);
// 保存 AI 检测结果(并行模式下,用于模型优化)
int SaveAIDetResult();
// 更新 检测区域 // 更新 检测区域
int Update_DetRoiList(); int Update_DetRoiList();
@ -274,7 +271,6 @@ private:
std::string m_strRootPath_TA_cls; std::string m_strRootPath_TA_cls;
std::string m_strRootPath_CA_cls; std::string m_strRootPath_CA_cls;
std::string m_strRootPath_Det; // AI 检测结果存图根目录(根目录 + 产品ID + TA/CA + 日期)
std::string m_strSavePath_cls; std::string m_strSavePath_cls;
std::string m_strLastDate; std::string m_strLastDate;

@ -182,7 +182,7 @@ int CameraCheckAnalysisy::Detect_Pre()
if (pImageResult->result->in_shareImage->Det_Mode == DET_MODE_MergeImg) if (pImageResult->result->in_shareImage->Det_Mode == DET_MODE_MergeImg)
{ {
cv::imwrite(pImageResult->result->in_shareImage->strCameraName + "_MergeImg.jpg", pImageResult->result->in_shareImage->img); cv::imwrite(pImageResult->result->in_shareImage->strCameraName + "_MergeImg.png", pImageResult->result->in_shareImage->img);
return 2; return 2;
} }

@ -39,7 +39,6 @@ ImgCheckAnalysisy::ImgCheckAnalysisy()
m_strLastDate = ""; m_strLastDate = "";
m_strRootPath_TA_cls = "/home/aidlux/BOE/Cls/TA/"; m_strRootPath_TA_cls = "/home/aidlux/BOE/Cls/TA/";
m_strRootPath_CA_cls = "/home/aidlux/BOE/Cls/CA/"; m_strRootPath_CA_cls = "/home/aidlux/BOE/Cls/CA/";
m_strRootPath_Det = "/home/aidlux/BOE/CELL_AOI/AI_RESULT/";
creatsavedir(); creatsavedir();
m_pImageStorage = ImageStorage::getInstance(); m_pImageStorage = ImageStorage::getInstance();
m_nConfigIdx = -1; m_nConfigIdx = -1;
@ -1651,7 +1650,7 @@ int ImgCheckAnalysisy::ConfigCheck(cv::Mat img)
return re; return re;
} }
int ImgCheckAnalysisy::AI_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg, bool bPushBlobQueue) int ImgCheckAnalysisy::AI_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg)
{ {
std::shared_ptr<AIModel_Base> pAIDet; std::shared_ptr<AIModel_Base> pAIDet;
// printf("=====>>>>AI_Detect_Thread m_strCurDetChannel %s \n", m_strCurDetChannel.c_str()); // printf("=====>>>>AI_Detect_Thread m_strCurDetChannel %s \n", m_strCurDetChannel.c_str());
@ -1742,7 +1741,6 @@ int ImgCheckAnalysisy::AI_Detect_Thread(const cv::Mat &img, cv::Mat &ResultImg,
if (runner->PopResult(result)) if (runner->PopResult(result))
{ {
if (bPushBlobQueue)
{ {
std::lock_guard<std::mutex> lock(mtx_AIMaskImgBLobQueue); std::lock_guard<std::mutex> lock(mtx_AIMaskImgBLobQueue);
m_AIMaskImgBLobQueue.push(result); m_AIMaskImgBLobQueue.push(result);
@ -2131,28 +2129,7 @@ void ImgCheckAnalysisy::TaskFun_AIDet(std::shared_ptr<TaskInfo> task)
int rec; int rec;
if(m_pbaseCheckFunction->traditionDet.bOpen) if(m_pbaseCheckFunction->traditionDet.bOpen)
{ {
// 传统检测与 AI 检测并行执行;
// 最终 NG 结果只由传统检测决定AI 检测结果仅用于记录与展示。
int recAI = 0;
std::thread aiThread([this, &recAI]()
{
recAI = AI_Detect_Thread(m_pImageAllResult->detImg, m_pImageAllResult->AIDetMaskImg, false);
});
rec = Traditional_Detect_Thread(m_pImageAllResult->detImg, m_pImageAllResult->AIMaskImg); rec = Traditional_Detect_Thread(m_pImageAllResult->detImg, m_pImageAllResult->AIMaskImg);
if (aiThread.joinable())
{
aiThread.join();
}
m_pdetlog->AddCheckstr(PrintLevel_0, DET_LOG_LEVEL_3, "TaskFun_AIDet", "traditional rec %d, AI rec %d", rec, recAI);
// 保存 AI 检测结果,用于模型优化(需在配置 Det_Image_Save 下开启 Det_Save
if (m_pbaseCheckFunction->saveImg.bSaveDetImg)
{
SaveAIDetResult();
}
} }
else else
{ {
@ -2165,61 +2142,6 @@ void ImgCheckAnalysisy::TaskFun_AIDet(std::shared_ptr<TaskInfo> task)
task->SetStatus(TaskStep_compate); task->SetStatus(TaskStep_compate);
} }
int ImgCheckAnalysisy::SaveAIDetResult()
{
// 保存 AI 检测结果,用于模型优化
std::string strProductID = DetImgInfo_shareP->strImgProductID;
if (strProductID.empty())
{
strProductID = "Default";
}
std::string strChannelDir;
if (m_strCurDetChannel.find("TA") != std::string::npos)
{
strChannelDir = "TA";
}
else
{
strChannelDir = "CA";
}
// 目录结构:/home/aidlux/BOE/Det/<产品ID>/<TA|CA>/<日期>/
std::string strRoot = m_strRootPath_Det + strProductID + "/" + strChannelDir + "/" + CheckUtil::getCurrentDate() + "/";
CheckUtil::CreateDir(strRoot);
std::string strBase = strRoot + m_strCurDetChannel + "_" + std::to_string(DetImgInfo_shareP->img_id) + "_" + std::to_string(CheckUtil::getcurTime());
// 1、保存整幅 AI mask 与 检测输入图
if (!m_pImageAllResult->AIDetMaskImg.empty())
{
m_pImageStorage->addImage(strBase + "_AI_mask.png", m_pImageAllResult->AIDetMaskImg);
}
if (!m_pImageAllResult->detImg.empty())
{
m_pImageStorage->addImage(strBase + "_src.png", m_pImageAllResult->detImg);
}
// 2、保存每个 AI 检出缺陷的小图(输入 + mask只存有残点的 ROI
int nSaveIdx = 0;
for (auto &pAIMask : m_pImageAllResult->AI_Qx_MaskList)
{
if (!pAIMask || pAIMask->AI_mask.empty())
{
continue;
}
if (cv::countNonZero(pAIMask->AI_mask) == 0)
{
continue;
}
m_pImageStorage->addImage(strBase + "_" + std::to_string(nSaveIdx) + "_in.png", pAIMask->AI_inImg);
m_pImageStorage->addImage(strBase + "_" + std::to_string(nSaveIdx) + "_mask.png", pAIMask->AI_mask);
nSaveIdx++;
}
m_pdetlog->AddCheckstr(PrintLevel_0, DET_LOG_LEVEL_3, "SaveAIDetResult", "save %d AI defect imgs to %s", nSaveIdx, strRoot.c_str());
return 0;
}
void ImgCheckAnalysisy::TaskFun_QxClass(std::shared_ptr<TaskInfo> task) void ImgCheckAnalysisy::TaskFun_QxClass(std::shared_ptr<TaskInfo> task)
{ {
task->SetStatus(TaskStep_run); task->SetStatus(TaskStep_run);

@ -1747,7 +1747,6 @@ struct Base_Function_SaveImg
bool bSaveMarkImg; // mark 存图 bool bSaveMarkImg; // mark 存图
bool bSaveClsImg; // 分类 存图 bool bSaveClsImg; // 分类 存图
bool bSaveAlginImg; // 分类 存图 bool bSaveAlginImg; // 分类 存图
bool bSaveDetImg; // AI 检测存图(并行模式下保存 AI 检测结果,用于模型优化)
Base_Function_SaveImg() Base_Function_SaveImg()
{ {
@ -1759,7 +1758,6 @@ struct Base_Function_SaveImg
bSaveMarkImg = false; bSaveMarkImg = false;
bSaveClsImg = false; bSaveClsImg = false;
bSaveAlginImg = false; bSaveAlginImg = false;
bSaveDetImg = false;
} }
void copy(Base_Function_SaveImg tem) void copy(Base_Function_SaveImg tem)
@ -1769,18 +1767,17 @@ struct Base_Function_SaveImg
this->bSaveMarkImg = tem.bSaveMarkImg; this->bSaveMarkImg = tem.bSaveMarkImg;
this->bSaveClsImg = tem.bSaveClsImg; this->bSaveClsImg = tem.bSaveClsImg;
this->bSaveAlginImg = tem.bSaveAlginImg; this->bSaveAlginImg = tem.bSaveAlginImg;
this->bSaveDetImg = tem.bSaveDetImg;
} }
void print(std::string str) void print(std::string str)
{ {
printf("%s>>bOpen %d bSaveMarkImg %d bSaveClsImg %d bSaveAlginImg %d bSaveDetImg %d \n", str.c_str(), printf("%s>>bOpen %d bSaveMarkImg %d bSaveClsImg %d bSaveAlginImg %d \n", str.c_str(),
bOpen, bSaveMarkImg, bSaveClsImg, bSaveAlginImg, bSaveDetImg); bOpen, bSaveMarkImg, bSaveClsImg, bSaveAlginImg);
} }
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 bSaveDetImg %d \n", str.c_str(), sprintf(buffer, "%s>>bOpen %d bSaveMarkImg %d bSaveClsImg %d bSaveAlginImg %d \n", str.c_str(),
bOpen, bSaveMarkImg, bSaveClsImg, bSaveAlginImg, bSaveDetImg); bOpen, bSaveMarkImg, bSaveClsImg, bSaveAlginImg);
std::string str123 = buffer; std::string str123 = buffer;
return str123; return str123;
} }

@ -1310,10 +1310,6 @@ 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"]["Det_Save"])
{
_config.saveImg.bSaveDetImg = value_f["form"]["SaveImg_Config"]["Det_Save"].asBool();
}
} }
else else
{ {

Loading…
Cancel
Save