#ifndef ImgCheckBase_H_ #define ImgCheckBase_H_ #include #include #define ALL_INTERFACE_VERSION 6 #define MAX_GPU_NUM 4 enum CHECK_THREAD_RUN_STATUS { CHECK_THREAD_STATUS_IDLE, // 空闲 0 CHECK_THREAD_STATUS_READY, // 准备好了 1 CHECK_THREAD_STATUS_BUSY, // 运行中 2 CHECK_THREAD_STATUS_COMPLETE, // 检测完成 3 CHECK_THREAD_STATUS_ERROR, // 运行错误 4 }; // 检测工位序号 enum DETECT_WROK_IDX { DETECT_WROK_0, // 0工位 DETECT_WROK_1, // 1工位 DETECT_WROK_2, // 2工位 DETECT_WROK_COUNT, }; struct RunInfoST { int nThreadIdx; // 线程号id int nWorkIdx; // 工位号 int nDeviceId; // GPU 设备 号 0 或 1 int UseGPUList[MAX_GPU_NUM]; // 使用的GPU设备号 int nCpu_start_Idx; // 绑定cpu 核号, int nCpu_num; // 8 至少需要 8个 bool bSaveCheckImg; // 是否存储 bool bRetest; // 是否是复测标志,复测不需要加载模型 int flag1; int flag2; std::string str1; std::string str2; RunInfoST() { nThreadIdx = 0; nDeviceId = 0; nWorkIdx = DETECT_WROK_0; nCpu_start_Idx = 0; nCpu_num = 8; flag1 = 0; flag2 = 0; bRetest = false; str1 = ""; str2 = ""; bSaveCheckImg = false; for (int i = 0; i < MAX_GPU_NUM; i++) { UseGPUList[i] = -1; } UseGPUList[0] = 0; UseGPUList[1] = 1; } void copy(RunInfoST tem) { for (int i = 0; i < MAX_GPU_NUM; i++) { this->UseGPUList[i] = tem.UseGPUList[i]; } this->nDeviceId = tem.nDeviceId; this->nThreadIdx = tem.nThreadIdx; this->nWorkIdx = tem.nWorkIdx; this->nCpu_start_Idx = tem.nCpu_start_Idx; this->nCpu_num = tem.nCpu_num; this->bSaveCheckImg = tem.bSaveCheckImg; this->flag1 = tem.flag1; this->flag2 = tem.flag2; this->bRetest = tem.bRetest; this->str1 = tem.str1; this->str2 = tem.str2; } }; /*******************一般调用流程*************************************************************************************************************************/ /*******************1、初始化 UpdateConfig*************************************************************************************************************************/ /*******************2、初始化 Init 并开启 *************************************************************************************************************************/ /*******************3、GetStatus 获取状态 如果 =CHECK_THREAD_STATUS_IDLE 可以设置检测数据并开启检测 SetDataRun***************************************************/ /*******************4、GetStatus 获取状态 如果 =CHECK_THREAD_STATUS_COMPLETE 检测完成,可以获取检测结果 GetCheckReuslt 拷贝检测结果 自动把状态设为 CHECK_THREAD_STATUS_IDLE*****************************/ struct shareImage; struct CheckResult; class ALLImgCheckBase { protected: ALLImgCheckBase() {} public: // delete camera interface ~ALLImgCheckBase() {} static ALLImgCheckBase *GetInstance(); // 初始化参数 pconfig 参数指针 返回:0 成功 其他异常 virtual int RunStart(void *pconfig1 = NULL) = 0; // 设置检测数据,并开启检测 返回:0 成功 其他异常 virtual int SetDataRun_SharePtr(std::shared_ptr p) = 0; // 获取结果信息 返回:0 成功 其他异常 virtual int GetCheckReuslt(std::shared_ptr &pResult) = 0; virtual int CheckImg(std::shared_ptr p, std::shared_ptr &pResult) = 0; // 获取检测库 状态信息 返回:CHECK_THREAD_RUN_STATUS virtual int GetStatus() = 0; // 更新参数 pconfig 参数指针,nConfigType 需要更新的参数类型 返回:0 成功 其他异常 virtual int UpdateConfig(void *pconfig, int nConfigType) = 0; // 返回检测版本信息 virtual std::string GetVersion() = 0; // 返回错误信息 virtual std::string GetErrorInfo() = 0; static ALLImgCheckBase *instance; }; #endif