|
|
|
@ -2313,12 +2313,19 @@ int ImgCheckAnalysisy::AI_Detect_BQ()
|
|
|
|
|
|
|
|
|
|
|
|
int submitted = 0;
|
|
|
|
int submitted = 0;
|
|
|
|
int completed = 0;
|
|
|
|
int completed = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 资源控制:限制最大并发数和最大待处理数
|
|
|
|
|
|
|
|
const int MAX_CONCURRENT = 5;
|
|
|
|
|
|
|
|
const int MAX_PENDING = 5;
|
|
|
|
|
|
|
|
|
|
|
|
long t2 = CheckUtil::getcurTime();
|
|
|
|
long t2 = CheckUtil::getcurTime();
|
|
|
|
|
|
|
|
|
|
|
|
while (completed < totalTasks)
|
|
|
|
while (completed < totalTasks)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// 提交任务
|
|
|
|
// 提交任务:满足并发限制和待处理限制
|
|
|
|
if (submitted < totalTasks && runner->GetProcessingCount() < 10)
|
|
|
|
if (submitted < totalTasks
|
|
|
|
|
|
|
|
&& runner->GetProcessingCount() < MAX_CONCURRENT
|
|
|
|
|
|
|
|
&& (submitted - completed) < MAX_PENDING)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>();
|
|
|
|
std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>();
|
|
|
|
task->id = submitted;
|
|
|
|
task->id = submitted;
|
|
|
|
@ -2878,12 +2885,18 @@ int ImgCheckAnalysisy::AI_Detect_QX()
|
|
|
|
cv::Mat shieldImg = m_pImageAllResult->AI_shieldImg;
|
|
|
|
cv::Mat shieldImg = m_pImageAllResult->AI_shieldImg;
|
|
|
|
cv::Mat AIresultMask = pDetAIResult->AI_MaskImg;
|
|
|
|
cv::Mat AIresultMask = pDetAIResult->AI_MaskImg;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 资源控制:限制最大并发数和最大待处理数,防止GPU/CPU内存压力导致推理异常
|
|
|
|
|
|
|
|
const int MAX_CONCURRENT = 5; // 最大同时在推理中的任务数(降低GPU并发压力)
|
|
|
|
|
|
|
|
const int MAX_PENDING = 5; // submitted - completed 最大差值(限制内存中待处理结果数)
|
|
|
|
|
|
|
|
|
|
|
|
t2 = CheckUtil::getcurTime();
|
|
|
|
t2 = CheckUtil::getcurTime();
|
|
|
|
|
|
|
|
|
|
|
|
while (completed < totalTasks)
|
|
|
|
while (completed < totalTasks)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// 如果任务还没提交完,且当前处理任务数 < 2,提交新任务
|
|
|
|
// 如果任务还没提交完,且满足并发限制和待处理限制,提交新任务
|
|
|
|
if (submitted < totalTasks && runner->GetProcessingCount() < 10)
|
|
|
|
if (submitted < totalTasks
|
|
|
|
|
|
|
|
&& runner->GetProcessingCount() < MAX_CONCURRENT
|
|
|
|
|
|
|
|
&& (submitted - completed) < MAX_PENDING)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>();
|
|
|
|
std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>();
|
|
|
|
@ -2934,6 +2947,8 @@ int ImgCheckAnalysisy::AI_Detect_QX()
|
|
|
|
AIresult.copyTo(AIresultMask(result->roi), AIresult);
|
|
|
|
AIresult.copyTo(AIresultMask(result->roi), AIresult);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 仅在调试模式下保存 AI_Qx_MaskList,并限制数量
|
|
|
|
|
|
|
|
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>();
|
|
|
|
std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>();
|
|
|
|
temAIresult->roi = result->roi;
|
|
|
|
temAIresult->roi = result->roi;
|
|
|
|
@ -3039,11 +3054,18 @@ int ImgCheckAnalysisy::AI_Detect_127Cell()
|
|
|
|
pDetAIResult->AI_MaskImg = cv::Mat::zeros(AI_detImage.size(), CV_8UC1);
|
|
|
|
pDetAIResult->AI_MaskImg = cv::Mat::zeros(AI_detImage.size(), CV_8UC1);
|
|
|
|
cv::Mat shieldImg = m_pImageAllResult->AI_shieldImg;
|
|
|
|
cv::Mat shieldImg = m_pImageAllResult->AI_shieldImg;
|
|
|
|
cv::Mat AIresultMask = pDetAIResult->AI_MaskImg;
|
|
|
|
cv::Mat AIresultMask = pDetAIResult->AI_MaskImg;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 资源控制:限制最大并发数和最大待处理数
|
|
|
|
|
|
|
|
const int MAX_CONCURRENT = 5;
|
|
|
|
|
|
|
|
const int MAX_PENDING = 5;
|
|
|
|
|
|
|
|
|
|
|
|
t2 = CheckUtil::getcurTime();
|
|
|
|
t2 = CheckUtil::getcurTime();
|
|
|
|
while (completed < totalTasks)
|
|
|
|
while (completed < totalTasks)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// 如果任务还没提交完,且当前处理任务数 < 2,提交新任务
|
|
|
|
// 如果任务还没提交完,且满足并发限制和待处理限制,提交新任务
|
|
|
|
if (submitted < totalTasks && runner->GetProcessingCount() < 10)
|
|
|
|
if (submitted < totalTasks
|
|
|
|
|
|
|
|
&& runner->GetProcessingCount() < MAX_CONCURRENT
|
|
|
|
|
|
|
|
&& (submitted - completed) < MAX_PENDING)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>();
|
|
|
|
std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>();
|
|
|
|
@ -3111,6 +3133,24 @@ int ImgCheckAnalysisy::AI_Detect_127Cell()
|
|
|
|
pDetAIResult->blobDetParam->AIMaskImgBLobQueue.push(temAIresult);
|
|
|
|
pDetAIResult->blobDetParam->AIMaskImgBLobQueue.push(temAIresult);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// AI检测残点图存图
|
|
|
|
|
|
|
|
if (DetImgInfo_shareP->bDebugsaveImg)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
bool bNeedSave = false;
|
|
|
|
|
|
|
|
std::string roi_ext = "[" + std::to_string(result->roi.x) + "," + std::to_string(result->roi.y) + "]";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bNeedSave = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (bNeedSave && !AIresult.empty())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
std::string strSaveDir = "/home/aidlux/BOE/FOG/AI_Detect_127/" + DetImgInfo_shareP->strImgProductID + "/";
|
|
|
|
|
|
|
|
CheckUtil::CreateDir(strSaveDir);
|
|
|
|
|
|
|
|
std::string strSavePath_in = strSaveDir + m_strCurDetChannel +"_"+ roi_ext + "_"+ "in" + ".png";
|
|
|
|
|
|
|
|
std::string strSavePath_out = strSaveDir + m_strCurDetChannel +"_"+ roi_ext + "_"+ "out" + ".png";
|
|
|
|
|
|
|
|
cv::imwrite(strSavePath_in, result->input);
|
|
|
|
|
|
|
|
cv::imwrite(strSavePath_out, AIresult);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
completed++;
|
|
|
|
completed++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|