You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
BOE_FOG_DETECT/AIEngineModule/src/AI_Factory.cpp

260 lines
9.2 KiB

/*
* @Author: xiewenji 527774126@qq.com
* @Date: 2025-09-03 10:33:48
* @LastEditors: xiewenji 527774126@qq.com
* @LastEditTime: 2025-09-25 15:42:47
* @FilePath: /AI_SO_Test/AIEngineModule/src/AI_Factory.cpp
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
#include "AI_Factory.h"
#include "AIModel_Impl.h"
std::shared_ptr<AIModel_Base> AIModel_Base::GetInstance()
{
std::shared_ptr<AIModel_Base> instance = std::make_shared<AIModel_Impl>();
return instance;
}
AIFactory::AIFactory()
{
}
AIFactory::~AIFactory()
{
}
std::shared_ptr<AIFactory> AIFactory::GetInstance()
{
static std::shared_ptr<AIFactory> instance = std::make_shared<AIFactory>();
return instance;
}
int AIFactory::InitALLAIModle(GPU_Config gupconfig)
{
if (gupconfig.GetNum() == 0)
{
printf("GPU Num Error \n");
return 1;
}
// 主检测
if (!AI_defect_NF)
{
AI_defect_NF = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/defect.engine";
boe_config.inputType = AIModel_Base::Input_CHW;
boe_config.strName = "Base_detect";
boe_config.Stream_num = 2;
AI_defect_NF->Init(boe_config);
}
// 黑白画面模型
if (!AI_defect_Type2)
{
AI_defect_Type2 = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/defect_WTB.engine";
boe_config.inputType = AIModel_Base::Input_CHW;
boe_config.strName = "WTB_detect";
boe_config.Stream_num = 2;
AI_defect_Type2->Init(boe_config);
}
// UP画面模型
if (!AI_defect_UP)
{
AI_defect_UP = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/defect_UP.engine";
boe_config.inputType = AIModel_Base::Input_CHW;
boe_config.strName = "UP_detect";
boe_config.Stream_num = 2;
AI_defect_UP->Init(boe_config);
}
// UP画面模型
if (!AI_defect_Chess)
{
AI_defect_Chess = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/defect_CHESS.engine";
boe_config.inputType = AIModel_Base::Input_CHW;
boe_config.strName = "chess_detect";
boe_config.Stream_num = 2;
AI_defect_Chess->Init(boe_config);
}
// 异显
if (!AI_defect_YX_1)
{
AI_defect_YX_1 = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/defect_YX_L0.engine";
boe_config.strName = "YX1";
boe_config.inputType = AIModel_Base::Input_CHW;
AI_defect_YX_1->Init(boe_config);
}
if (!AI_defect_YX_2)
{
AI_defect_YX_2 = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/defect_YX_L127L255.engine";
boe_config.strName = "YX2";
boe_config.inputType = AIModel_Base::Input_CHW;
AI_defect_YX_2->Init(boe_config);
}
// 分类
if (!AI_defect_Cls_L0)
{
AI_defect_Cls_L0 = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config jbl_config;
jbl_config.gpuconfig.copy(gupconfig);
jbl_config.strPath = "/home/aidlux/BOE/UseModel_FOG/class_14.engine";
jbl_config.inputType = AIModel_Base::Input_HWC;
jbl_config.strName = "14_Class";
jbl_config.IsClass = true;
AI_defect_Cls_L0->Init(jbl_config);
}
if (!AI_defect_Cls)
{
AI_defect_Cls = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config jbl_config;
jbl_config.gpuconfig.copy(gupconfig);
jbl_config.strPath = "/home/aidlux/BOE/UseModel_FOG/class_14.engine";
jbl_config.inputType = AIModel_Base::Input_HWC;
jbl_config.strName = "old_Class";
jbl_config.IsClass = true;
AI_defect_Cls->Init(jbl_config);
}
// 字符 检测
if (!AI_defect_zf)
{
AI_defect_zf = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/defect_zf.engine";
boe_config.strName = "zf";
boe_config.inputType = AIModel_Base::Input_CHW;
AI_defect_zf->Init(boe_config);
}
// 标签 检测
if (!AI_defect_bq)
{
AI_defect_bq = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/FOG_tag.engine";
boe_config.strName = "bq";
boe_config.inputType = AIModel_Base::Input_CHW;
AI_defect_bq->Init(boe_config);
}
// 字符 127cell
if (!AI_defect_127Cell)
{
AI_defect_127Cell = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/defect_L127.engine";
boe_config.strName = "127Cell";
boe_config.inputType = AIModel_Base::Input_CHW;
AI_defect_127Cell->Init(boe_config);
}
// 精确检测 POL 异物
if (!AI_defect_RE_POL)
{
AI_defect_RE_POL = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/BOE_POL_128x128.engine";
boe_config.strName = "RE_POL";
boe_config.inputType = AIModel_Base::Input_CHW;
AI_defect_RE_POL->Init(boe_config);
}
// 精确检测 AD 异物
if (!AI_defect_RE_AD)
{
AI_defect_RE_AD = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/BOE_AD_128x128.engine";
boe_config.strName = "RE_POL";
boe_config.inputType = AIModel_Base::Input_CHW;
AI_defect_RE_AD->Init(boe_config);
}
// RGBHGRAY检测
if (!AI_defect_RE_RGBHGRAY)
{
AI_defect_RE_RGBHGRAY = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/FOG_RGBHGRAY.engine";
boe_config.strName = "RE_RGBHGRAY";
boe_config.inputType = AIModel_Base::Input_CHW;
AI_defect_RE_RGBHGRAY->Init(boe_config);
}
// 边缘模型
if (!AI_defect_Edge_Big)
{
AI_defect_Edge_Big = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/Edge_Big.engine";
boe_config.strName = "Edge_Big";
boe_config.inputType = AIModel_Base::Input_HWC;
AI_defect_Edge_Big->Init(boe_config);
}
if (!AI_defect_Edge_Samll)
{
AI_defect_Edge_Samll = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/Edge_Small.engine";
boe_config.inputType = AIModel_Base::Input_HWC;
boe_config.strName = "Edge_Small";
AI_defect_Edge_Samll->Init(boe_config);
}
// 缺pol检测
if (!AI_defect_LackPol)
{
AI_defect_LackPol = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/BOE_LOSSPOL.engine";
boe_config.inputType = AIModel_Base::Input_CHW;
boe_config.strName = "BOE_LOSSPOL";
AI_defect_LackPol->Init(boe_config);
}
// 缺pol检测
if (!AI_defect_MarkLine)
{
AI_defect_MarkLine = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/defect_MARK_LINE.engine";
boe_config.inputType = AIModel_Base::Input_CHW;
boe_config.strName = "MarkLine";
AI_defect_MarkLine->Init(boe_config);
}
// 缺pol检测
if (!AI_defect_Edge_QX)
{
AI_defect_Edge_QX = AIModel_Base::GetInstance();
AIModel_Base::AIModelRun_Config boe_config;
boe_config.gpuconfig.copy(gupconfig);
boe_config.strPath = "/home/aidlux/BOE/UseModel_FOG/BOE_Edge_320x320.engine";
boe_config.inputType = AIModel_Base::Input_CHW;
boe_config.strName = "Edge_QX";
AI_defect_Edge_QX->Init(boe_config);
}
m_bInitSucc = true;
return 0;
}