diff --git a/HanddleAI.zip b/HanddleAI.zip new file mode 100644 index 00000000..34ecb8ae Binary files /dev/null and b/HanddleAI.zip differ diff --git a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h index 822fd6e3..d91cb484 100644 --- a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h +++ b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h @@ -16,7 +16,7 @@ bool pinHalconEvaluate(std::shared_ptr data, cv::Rect& Result, cv::Mat std::vector pinDetEvaluate(std::shared_ptr data, cv::Mat& src, handleAiModelManager* _handleAiModelManager) { std::vector result; - handleAiModelDet* detPtr = _handleAiModelManager->getDetModel(data->_productDataStruct.handleAiData.detModelName); + handleAiModelDet* detPtr = _handleAiModelManager->getDetModel("connectorDet.BHD"); if (detPtr == nullptr) return std::vector(); detPtr->Evaluate(src, result); @@ -43,215 +43,7 @@ std::vector getpinHandleAiEvaluateRect(std::shared_ptr getTopPoints(std::vector& rectangles) -{ - double minX, maxX, avgX; - double minY, maxY, avgY; - for (auto data : rectangles) - { - std::cout << data.y << std::endl; - } - return std::vector(); -} -void halconEvaluate(std::shared_ptr data, std::vectorconnectorPos, std::vector& halconImgResult) -{ - cv::Mat src = data->oriImgs[0]; - for (auto& box : connectorPos) - { - cv::Mat halconMatResult; - bool halconBoolResult = pinHalconEvaluate(data, BboxToRect(box), src, halconMatResult, 5); - if (halconBoolResult == true) - halconImgResult.push_back(halconMatResult);//HALCON检测结果 - } -} -bool pinHalconEvaluate(std::shared_ptr data, cv::Rect& Result, cv::Mat& src, cv::Mat& out, int productType) -{ -#pragma region halcon变量定义 - //测量 - HObject ho_in_Image; - HObject ho_in_Image2; - HTuple hv_in_ShapePath; - HTuple hv_in_Parameter; - HTuple hv_out_Pings_X; - HTuple hv_out_Pings_Y; - HTuple hv_out_NG_Pings_X; - HTuple hv_out_NG_Pings_Y; - HTuple hv_out_Pings_Num; - HTuple hv_out_NG_Pings_Num; - HTuple hv_out_Flag_INS; - HObject hv_out_Img_INS; - //ROI - HTuple hv_out_ROI_Value; - HTuple hv_out_Flag_ROI; -#pragma endregion - cv::Mat halconImg = src(cv::Rect(Result.x, Result.y, Result.width, Result.height)).clone(); - ho_in_Image = MatToHObject(halconImg); - //hv_in_Parameter - //[0]-产品种类; 1A正面 2A反面 3B正面 4C正面 - //[1]-图像序号第一位; - //[2]-图像序号第二位; - //[3]-3d相机精度(mm); - //[4]-ping针偏移判NG阈值(mm); - //[5]-切图存图开关 - hv_in_Parameter.Append(3); - hv_in_Parameter.Append(1); - hv_in_Parameter.Append(1); - hv_in_Parameter.Append(0.0135); - hv_in_Parameter.Append(0.2); - hv_in_Parameter.Append(2); - hv_in_ShapePath = "./halconModel"; - // - HTuple hv_in_FilePath = ".\\halconFiles\\"; - HTuple hv_out_OK_Pings; - HTuple hv_out_NG_Pings; - // - switch (productType) - { - case 0: - Pings_Inspection_2_Front_New(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_Pings_X, - &hv_out_Pings_Y, &hv_out_NG_Pings_X, &hv_out_NG_Pings_Y, &hv_out_Pings_Num, - &hv_out_NG_Pings_Num, &hv_out_Flag_INS, &hv_out_Img_INS); - break; - case 3: - Pings_Inspection_1_Back_New(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_Pings_X, - &hv_out_Pings_Y, &hv_out_NG_Pings_X, &hv_out_NG_Pings_Y, &hv_out_Pings_Num, - &hv_out_NG_Pings_Num, &hv_out_Flag_INS, &hv_out_Img_INS); - case 2: - Pings_Inspection_1_Front_New(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_Pings_X, - &hv_out_Pings_Y, &hv_out_NG_Pings_X, &hv_out_NG_Pings_Y, &hv_out_Pings_Num, - &hv_out_NG_Pings_Num, &hv_out_Flag_INS, &hv_out_Img_INS); - break; - case 5: - Inspenction_stargazer_pin(ho_in_Image, hv_in_FilePath, &hv_out_OK_Pings, &hv_out_NG_Pings, - &hv_out_Flag_INS); - break; - default: - break; - } - int flag = hv_out_Flag_INS.D(); - if (flag == 1) - { - if (productType == 5) - { - halconImg.copyTo(out); - if (out.channels() == 1) - cv::cvtColor(out, out, cv::COLOR_GRAY2BGR); - int hv_out_OK_PingsSize = hv_out_OK_Pings.Length(), hv_out_NG_PingsSize = hv_out_NG_Pings.Length(); - std::cout << "OKSize" << hv_out_OK_PingsSize << "NGSize" << hv_out_NG_PingsSize << std::endl; - std::vectorokPos, ngPos, AllPoints; - for (int i = 0; i < hv_out_OK_PingsSize / 4; i++) - { - cv::Rect rect( - hv_out_OK_Pings[i * 4].D(), - hv_out_OK_Pings[i * 4 + 1].D(), - hv_out_OK_Pings[i * 4 + 2].D(), - hv_out_OK_Pings[i * 4 + 3].D()); - okPos.push_back(rect); - AllPoints.push_back(rect); - } - for (int i = 0; i < hv_out_NG_PingsSize / 4; i++) - { - cv::Rect rect( - hv_out_NG_Pings[i + 1].D(), - hv_out_NG_Pings[i].D(), - hv_out_NG_Pings[i + 4].D(), - hv_out_NG_Pings[i + 3].D()); - ngPos.push_back(rect); - AllPoints.push_back(rect); - } - //画线 - //halconPaint(out, AllPoints); - } - else - out = HObject2Mat(hv_out_Img_INS); - return true; - } - if (hv_out_Pings_X.Length() > 0) - data->halconOK = false; - std::cout << "HALCON FAILURE" << std::endl; - out = halconImg; - return false; - //Pings_ROI(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_ROI_Value, &hv_out_Flag_ROI); - //for (int i = 0; i < hv_out_ROI_Value.Length() / 4; i++) - //{ - // Result.push_back( - // cv::Rect( - // hv_out_ROI_Value[i * 4 + 1].D(), - // hv_out_ROI_Value[i * 4].D(), - // hv_out_ROI_Value[i * 4 + 3].D() - hv_out_ROI_Value[i * 4 + 1].D(), - // hv_out_ROI_Value[i * 4 + 2].D() - hv_out_ROI_Value[i * 4].D() - // )); - //} -} - -//缺陷检测 -cv::Size minPin(30, 30), maxPin(200, 200); -cv::Mat pinHandleAiEvaluate(std::shared_ptr data, cv::Mat& src, - handleAiModelSeg* segPtr, handleAiModelCls* clsPtr) -{ - //结果图 - cv::Mat Paint; - if (src.channels() == 3) - src.copyTo(Paint); - else - cvtColor(src, Paint, cv::COLOR_GRAY2BGR); - //处理 - auto start = std::chrono::high_resolution_clock::now(); - cv::Mat segRes = ~segPtr->Evaluate(src); - std::vector> contours; - cv::findContours(segRes, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); - int cnt = 0; - if (contours.size())//如果有缺陷 - data->segOriginImgs.push_back(src); - for (auto contour : contours) - { - cv::Rect originRect = cv::boundingRect(contour); - if (originRect.width < minPin.width || originRect.height < minPin.height || originRect.width > maxPin.width || originRect.height > maxPin.height) - continue; - cv::Rect rect = originRect; - cv::Mat clsImg = cutImg2Cls(rect, src); - int clsRes = clsPtr->Evaluate(clsImg); - clsRes = 1; - cv::Scalar color = cv::Scalar(0, 0, 255, 30); - std::string clsFileName; - switch (clsRes) - { - case 0: - color = cv::Scalar(0, 255, 0, 30); - clsFileName = "OK"; - break; - case 1: - color = cv::Scalar(0, 0, 255, 30); - clsFileName = "NG1"; - data->aiDetOK = false; - break; - default: - clsFileName = std::to_string(clsRes); - data->aiDetOK = false; - } - data->clsOriginImgs.push_back(std::make_pair(clsFileName, clsImg)); - cv::rectangle(Paint, originRect, color, 2); - } - //返回结果图 - return Paint; -} -void handleAiEvaluate(std::shared_ptr data, handleAiModelManager* _handleAiModelManager, std::vectorconnectorPos, std::vector& aiImgResult) -{ - cv::Mat src = data->oriImgs[0]; - for (auto& handleAiData : data->_productDataStruct.handleAiData.detResultHandle) - { - handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel(handleAiData.segModelName); - handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel(handleAiData.clsModelName); - for (auto box : connectorPos) - { - cv::Mat handleAiMat = pinHandleAiEvaluate(data, src(BboxToRect(box)), - segPtr, clsPtr); - aiImgResult.push_back(handleAiMat);//AI检测结果 - } - } -} //主函数 int ALGO_InspectionErrorCheck(std::shared_ptr data) { @@ -294,7 +86,6 @@ void ALGO_Inspection(std::shared_ptr data, handleAiModelManager* _hand //box.classes = 2; //std::vector pinPos; //pinPos.push_back(box); - bool tempCompared = false; //检测 std::vectorhalconImgResult; std::vectoraiImgResult; @@ -308,59 +99,40 @@ void ALGO_Inspection(std::shared_ptr data, handleAiModelManager* _hand data->handleAiEndTime = std::chrono::high_resolution_clock::now(); aiImgResult.push_back(asrHandleAiAlgo(data, src(BboxToRect(connector)), _handleAiModelManager)); data->halconEndTime = std::chrono::high_resolution_clock::now(); - tempCompared = true; break; case 2://APEX halconImgResult.push_back(apexHalconAlgo(data, src(BboxToRect(connector)))); data->handleAiEndTime = std::chrono::high_resolution_clock::now(); aiImgResult.push_back(apexHandleAiAlgo(data, src(BboxToRect(connector)),_handleAiModelManager)); data->halconEndTime = std::chrono::high_resolution_clock::now(); - tempCompared = true; break; case 3://APEX BACK halconImgResult.push_back(apexBackHalconAlgo(data, src(BboxToRect(connector)))); data->handleAiEndTime = std::chrono::high_resolution_clock::now(); aiImgResult.push_back(apexBackHandleAiAlgo(data, src(BboxToRect(connector)), _handleAiModelManager)); data->halconEndTime = std::chrono::high_resolution_clock::now(); - tempCompared = true; break; case 5://STARGAZER halconImgResult.push_back(stargazerHalconAlgo(data, src(BboxToRect(connector)))); data->handleAiEndTime = std::chrono::high_resolution_clock::now(); aiImgResult.push_back(stargazerHandleAiAlgo(data, _handleAiModelManager)); data->halconEndTime = std::chrono::high_resolution_clock::now(); - tempCompared = true; break; case 1://APEX SMALL halconImgResult.push_back(apexSmallHalconAlgo(data, src(BboxToRect(connector)))); data->handleAiEndTime = std::chrono::high_resolution_clock::now(); aiImgResult.push_back(apexSmallHandleAiAlgo(data, src(BboxToRect(connector)), _handleAiModelManager)); data->halconEndTime = std::chrono::high_resolution_clock::now(); - tempCompared = true; break; case 7://APEX SMALL BACK halconImgResult.push_back(apexSmallBackHalconAlgo(data, src(BboxToRect(connector)))); data->handleAiEndTime = std::chrono::high_resolution_clock::now(); aiImgResult.push_back(apexSmalllBackHandleAiAlgo(data, src(BboxToRect(connector)), _handleAiModelManager)); data->halconEndTime = std::chrono::high_resolution_clock::now(); - tempCompared = true; break; } } - if(tempCompared == false) - { - - //HANDLEAI - - handleAiEvaluate(data, _handleAiModelManager, pinPos, aiImgResult); - data->handleAiEndTime = std::chrono::high_resolution_clock::now(); - - //HALCON - - halconEvaluate(data, pinPos, halconImgResult); - data->halconEndTime = std::chrono::high_resolution_clock::now(); - } //平铺结果图 if (aiImgResult.size() > 0) diff --git a/HanddleAI/HandleAiUi-new/algo/CISCO_APEXSMALL.hpp b/HanddleAI/HandleAiUi-new/algo/CISCO_APEXSMALL.hpp index 148f9a01..b465082c 100644 --- a/HanddleAI/HandleAiUi-new/algo/CISCO_APEXSMALL.hpp +++ b/HanddleAI/HandleAiUi-new/algo/CISCO_APEXSMALL.hpp @@ -62,7 +62,7 @@ static void apexSmallHalconPaint(cv::Mat& out, std::vectorxLi static cv::Mat apexSmallHalconAlgo(std::shared_ptrdata, cv::Mat& src) { cv::Mat halconImg; - src(cv::Rect(50, 50, src.cols - 100, src.rows - 150)).copyTo(halconImg); + src.copyTo(halconImg); HTuple hv_out_OK_Pings; HTuple hv_out_NG_Pings; HTuple hv_out_Flag_INS; diff --git a/HanddleAI/HandleAiUi-new/appConfig/appConfig.cpp b/HanddleAI/HandleAiUi-new/appConfig/appConfig.cpp index 2b9855d6..e6bd5819 100644 --- a/HanddleAI/HandleAiUi-new/appConfig/appConfig.cpp +++ b/HanddleAI/HandleAiUi-new/appConfig/appConfig.cpp @@ -80,36 +80,6 @@ void appConfig::parsingProductData(std::string path) { productData.lightSetting.insert(std::make_pair(std::stoi(it.key()), it.value())); } - if (res["HandleAi"].empty() == false) - { - productData.handleAiData.detModelName = res["HandleAi"]["detModelName"]; - productData.handleAiData.detGpuIndex = res["HandleAi"]["detGpuIndex"]; - for (auto& data : res["HandleAi"]["segHandle"]) - { - detResultHandleStruct detResultHandle; - detResultHandle.detResultIndex = std::vector(data["detResultIndex"].begin(), data["detResultIndex"].end()); - detResultHandle.segModelName = data["segModelName"]; - detResultHandle.segNgIndex = std::vector(data["segNgIndex"].begin(), data["segNgIndex"].end()); - detResultHandle.segGpuIndex = data["segGpuIndex"]; - - detResultHandle.clsModelName = data["clsModelName"]; - detResultHandle.clsNgIndex = std::vector(data["clsNgIndex"].begin(), data["clsNgIndex"].end()); - detResultHandle.segGpuIndex = data["segGpuIndex"]; - for (auto it = data["clsResultHandle"].begin(); it != data["clsResultHandle"].end(); ++it) - { - std::vector result = split(it.value(), ','); - if (result.size() != 4) - { - fancyWarnWindow* warn = new fancyWarnWindow - (fancyWarnWindow::Warning, QString("在%1中的clsResultHandle发现格式错误").arg(QString::fromStdString(fileManager::getFileName(file)), true), - QString("%1").arg(QString::fromStdString(it.value())), true); - continue; - } - detResultHandle.clsResultHandle.insert(std::make_pair(std::stoi(it.key()), std::make_pair(result[0], cv::Scalar(std::stoi(result[3]), std::stoi(result[2]), std::stoi(result[1]))))); - } - productData.handleAiData.detResultHandle.push_back(detResultHandle); - } - } if (res["productSign"].empty() == false) { for (auto it = res["productSign"].begin(); it != res["productSign"].end(); ++it) diff --git a/HanddleAI/HandleAiUi-new/appConfig/appconfigStruct.h b/HanddleAI/HandleAiUi-new/appConfig/appconfigStruct.h index 770c1160..cbb29484 100644 --- a/HanddleAI/HandleAiUi-new/appConfig/appconfigStruct.h +++ b/HanddleAI/HandleAiUi-new/appConfig/appconfigStruct.h @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -36,7 +35,6 @@ struct productDataStruct bool disableHandleAiConfig = false; bool enableCodedAlgo = false; int codedAlgoIndex = -1; - handleAiSimpleDet handleAiData; std::unordered_map productSign; }; diff --git a/HanddleAI/HandleAiUi-new/back/cameraManager.cpp b/HanddleAI/HandleAiUi-new/back/cameraManager.cpp index f0cbf73c..2964c123 100644 --- a/HanddleAI/HandleAiUi-new/back/cameraManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/cameraManager.cpp @@ -151,8 +151,11 @@ void cameraManager::initialization() } } -void cameraManager::start() +void cameraManager::run() { + if (initFlag == true) + return; + bool initReuslt = true; for (auto i = 0; i < camerasVec.size(); i++) { cameraModule m_module = camerasVec.at(i); @@ -171,11 +174,18 @@ void cameraManager::start() { QByteArray errorStr("getStatus"); m_module.module_ptr->sendData(vec_mat, errorStr); - initFlag = false; + initReuslt = false; qCritical() << "[Error] " << " moduleName:" << m_module.moduleName << " initParas failed!"; emit _core._qtFunc.sendInitString("相机" + m_module.key + "初始化失败->"+ errorStr); } } + if (initReuslt == true) + { + initFlag = true; + status = InitOK; + } + else + status = InitFailure; } bool cameraManager::loadModule( QString keyName, diff --git a/HanddleAI/HandleAiUi-new/back/cameraManager.h b/HanddleAI/HandleAiUi-new/back/cameraManager.h index 82439158..6f9e7cd6 100644 --- a/HanddleAI/HandleAiUi-new/back/cameraManager.h +++ b/HanddleAI/HandleAiUi-new/back/cameraManager.h @@ -12,6 +12,7 @@ #include #include #include +#include //硬触发要求在触发相机前给出触发信号 class backEndManager; class camera : public QThread @@ -105,14 +106,14 @@ private: int imgLost = 0;//未取用从而丢失的图片数量 int showLost = 0;//因为窗口刷新速率低而未显示的数量 }; -class cameraManager : public QObject +class cameraManager : public serviceModule { Q_OBJECT public: - bool initFlag = true; + bool initFlag = false; void initialization(); ~cameraManager(); - void start(); + void run(); std::unordered_mapcameras;//key 相机名 camera* getCamera(std::string cameraName) { diff --git a/HanddleAI/HandleAiUi-new/back/lightSource.hpp b/HanddleAI/HandleAiUi-new/back/lightSource.hpp index 5340a1b6..6a54b521 100644 --- a/HanddleAI/HandleAiUi-new/back/lightSource.hpp +++ b/HanddleAI/HandleAiUi-new/back/lightSource.hpp @@ -1,6 +1,7 @@ #include #include #include +#include enum lightSourceChannel { AChannel, BChannel, CChannel, DChannel @@ -62,7 +63,7 @@ public: serialPort->waitForBytesWritten(); } }; -class lightSourceManager +class lightSourceManager : public QThread { public: lightSourceManager() @@ -70,7 +71,11 @@ public: } - void start() + void run() + { + init(); + } + void init() { insertLightSource("COM9", 19200, "SA0000#SB0000#SC0000#SD0000#"); } diff --git a/HanddleAI/HandleAiUi-new/back/serviceModule.hpp b/HanddleAI/HandleAiUi-new/back/serviceModule.hpp new file mode 100644 index 00000000..5fd49c37 --- /dev/null +++ b/HanddleAI/HandleAiUi-new/back/serviceModule.hpp @@ -0,0 +1,8 @@ +#include +#include +class serviceModule :public QThread +{ +public: + initStatus status = NotInit; +}; +#pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/triggerManager.cpp b/HanddleAI/HandleAiUi-new/back/triggerManager.cpp index 41d8385f..52d74e2a 100644 --- a/HanddleAI/HandleAiUi-new/back/triggerManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/triggerManager.cpp @@ -34,10 +34,20 @@ void triggerManager::initialization(detProcess* _detProcessIn) } -void triggerManager::connectHost() +void triggerManager::run() +{ + connectHost(); + QThread::msleep(3000); + while (runFlag) + { + reciveCommond(); + QThread::msleep(10); + } +} +bool triggerManager::connectHost() { if (init == true) - return; + return true; if (libLoadedflag) { CreateFunction createFun = (CreateFunction)m_lib->resolve("create"); @@ -55,7 +65,6 @@ void triggerManager::connectHost() trigger->reciveData(vec_mat, QByteArray(IpAndPort.toUtf8())); emit _core._qtFunc.sendInitString(triggerFileName + "连接到" + IpAndPort); initFailure = trigger->initParas(initByte); - this->start(); } if (initFailure == false) @@ -64,12 +73,15 @@ void triggerManager::connectHost() delete m_lib; m_lib = nullptr; emit _core._qtFunc.sendInitString(triggerFileName + "初始化失败"); - return; - } + status = InitFailure; + return false; + } else { + status = InitOK; init = true; emit _core._qtFunc.sendInitString(triggerFileName + "成功"); + return true; } } } @@ -82,11 +94,7 @@ void triggerManager::reciveCommond() if (!reciveFinsMsg(readByte)) qCritical() << "[TCP] " << " finstcp_ptr sendData error!"; tLocker.reFreshLocker(readByte);//经过检查后再触发 - //auto end = std::chrono::high_resolution_clock::now(); - //auto duration = std::chrono::duration_cast(end - start); - //std::cout << "cost: " << duration.count() << " mm" << std::endl; decodeCameraCMD(readByte); - //workThread->snDatas.checkSnFromWaittingVec(readByte); } void triggerManager::decodeCameraCMD(QByteArray byte) diff --git a/HanddleAI/HandleAiUi-new/back/triggerManager.h b/HanddleAI/HandleAiUi-new/back/triggerManager.h index 00ed195f..7a8d8166 100644 --- a/HanddleAI/HandleAiUi-new/back/triggerManager.h +++ b/HanddleAI/HandleAiUi-new/back/triggerManager.h @@ -8,6 +8,7 @@ #include #include #include +#include using triggerCallback = std::function; class cameraManager; class detThreadManager; @@ -62,11 +63,12 @@ private: }; //触发器类 fins触发 tcp触发等 替代myiothread -class triggerManager : public QThread +class triggerManager : public serviceModule { public: + QByteArray readAllCmd; - QString triggerFileName; + QString triggerFileName; QString IpAndPort; QString triggerInitStr; ~triggerManager() @@ -77,16 +79,8 @@ public: delete trigger; } void initialization(detProcess*); - void connectHost(); - void run() - { - QThread::msleep(3000); - while (runFlag) - { - reciveCommond(); - QThread::msleep(100); - } - } + bool connectHost(); + void run(); void stop() { runFlag = false; diff --git a/HanddleAI/HandleAiUi-new/detProcess.hpp b/HanddleAI/HandleAiUi-new/detProcess.hpp index afeec8aa..d19f2148 100644 --- a/HanddleAI/HandleAiUi-new/detProcess.hpp +++ b/HanddleAI/HandleAiUi-new/detProcess.hpp @@ -24,13 +24,27 @@ public: //初始化 void run() { - std::vector>futures; - futures.push_back(std::async(std::launch::async, &handleAiModelManager::start, &_handleAiModelManager)); - futures.push_back(std::async(std::launch::async, &cameraManager::start, &_cameraManager)); - futures.push_back(std::async(std::launch::async, &lightSourceManager::start, &_lightSourceManager)); - futures.push_back(std::async(std::launch::async, &triggerManager::connectHost, &_triggerManager)); - + _cameraManager.start(); + _handleAiModelManager.start(); + _lightSourceManager.start(); + _triggerManager.start(); + bool res1 = waitrForInitResult(&_cameraManager); + bool res2 = waitrForInitResult(&_handleAiModelManager); + bool res3 = waitrForInitResult(&_triggerManager); + std::cout << std::to_string(res1) << "," << std::to_string(res2) << "," << std::to_string(res3) << "," << std::endl; } + bool waitrForInitResult(serviceModule* ptr) + { + int timecnt = 0; + while (timecnt < 100) + { + if (ptr->status != NotInit) + break; + } + if (timecnt > 100) + return false; + return true; + } simpleSiemensTcp _simpleSiemensTcp; detDataManager _detDataManager;//检测中的数据 不需要初始化 imgSaveThreadManager _imgSaveThreadManager;//存图线程 不需要初始化 diff --git a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.cpp b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.cpp deleted file mode 100644 index ac0b8425..00000000 --- a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include -#include - -handleAiModelManager::handleAiModelManager() -{ - _core._appConfig.productDatasMutex.lock(); - this->basePath = _core._appConfig.handleAiModelPath + "/"; - for (auto& productData : _core._appConfig.productDatas) - { - insertDetModelPath(productData.handleAiData.detModelName, productData.handleAiData.detGpuIndex); - for (auto& handleAiData : productData.handleAiData.detResultHandle) - { - - insertSegModelPath(handleAiData.segModelName, handleAiData.segGpuIndex); - insertClsModelPath(handleAiData.clsModelName, handleAiData.clsGpuIndex); - } - } - _core._appConfig.productDatasMutex.unlock(); -} \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h index ed3dbba7..de0363a4 100644 --- a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h +++ b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h @@ -7,9 +7,7 @@ #include #include #include - -#define handleAiModelSwitch 1 -#if handleAiModelSwitch +#include class appConfig; class handleAiModelSeg { @@ -113,7 +111,7 @@ public: private: handdleAI::pDetection* detPtr; }; -class handleAiModelManager :public QObject +class handleAiModelManager :public serviceModule { public: enum type @@ -121,17 +119,13 @@ public: seg, cls, det }; bool initFlag = false; - handleAiModelSeg* largeSeg; - handleAiModelCls* largeCls; - - handleAiModelSeg* midSeg; - handleAiModelCls* midCls; - - handleAiModelSeg* smallSeg; - handleAiModelCls* smallCls; - handleAiModelDet* smalDet; std::string basePath; - handleAiModelManager(); + handleAiModelManager() + { + _core._appConfig.productDatasMutex.lock(); + this->basePath = _core._appConfig.handleAiModelPath + "/"; + _core._appConfig.productDatasMutex.unlock(); + }; bool insertSegModelPath(std::string modelName,int gpuIndex) { auto mapResult = segModels.find(modelName); @@ -180,10 +174,12 @@ public: } void initialization() { - insertSegModelPath("APEX-Seg.BHD",0); - insertClsModelPath("APEX-Cls.BHD", 0); + + insertSegModelPath("APEX-Seg.BHD", 0); + insertClsModelPath("APEX-Cls.BHD", 0); + } - void start() + void run() { if (init == true) return; @@ -193,7 +189,7 @@ public: { futures.push_back(std::async(std::launch::async, &handleAiModelSeg::init, model.second)); emit _core._qtFunc.sendInitString(QString::fromStdString(fileManager::getFileName(model.second->path) + "初始化中...")); - } + } for (auto &model : clsModels) { futures.push_back(std::async(std::launch::async, &handleAiModelCls::init, model.second)); @@ -208,11 +204,13 @@ public: for (auto& func : futures) { func.wait(); - emit _core._qtFunc.sendInitString(QString::fromStdString(fileManager::getFileName(func.get()) + "成功")); - qDebug() << QString::fromStdString(fileManager::getFileName(func.get()) + "成功"); - std::cout << fileManager::getFileName(func.get()) + "成功" << std::endl; + std::string result = func.get(); + emit _core._qtFunc.sendInitString(QString::fromStdString(fileManager::getFileName(result) + "成功")); + qDebug() << QString::fromStdString(fileManager::getFileName(result) + "成功"); + std::cout << fileManager::getFileName(result) + "成功" << std::endl; } init = true; + status = InitOK; #endif } ~handleAiModelManager() @@ -234,77 +232,5 @@ private: int gpuCnt = 1;//gpu数量 bool init = false; }; -#endif -#if handleAiModelSwitch == 0 -class handleAiModelManager :public QObject -{ -public: - std::vector> segModels; - std::vector < std::pair< handdleAI::pClassification*, std::string>> clsModels; - handdleAI::pSegmentation* largeSeg; - handdleAI::pClassification* largeCls; - - handdleAI::pSegmentation* midSeg; - handdleAI::pClassification* midCls; - - handdleAI::pSegmentation* smallSeg; - handdleAI::pClassification* smallCls; - - ////////模型放这里/////// - handleAiModelManager() - { - segModels.push_back({ largeSeg ,"./HandleAiModels/large-seg.BHD" }); - segModels.push_back({ midSeg ,"./HandleAiModels/mid-seg.BHD" }); - segModels.push_back({ smallSeg ,"./HandleAiModels/small-seg.BHD" }); - - clsModels.push_back({ largeCls ,"./HandleAiModels/large-cls.BHD" }); - clsModels.push_back({ midCls ,"./HandleAiModels/mid-cls.BHD" }); - clsModels.push_back({ smallCls ,"./HandleAiModels/small-cls.BHD" }); - } - ///////////END///////// - - void createSeg(handdleAI::pSegmentation* segPtr, std::string path, int gpuId) - { - segPtr = handdleAI::CreateSegObj((char*)path.c_str(), gpuId); - } - void createCls(handdleAI::pClassification* clsPtr, std::string path, int gpuId) - { - clsPtr = handdleAI::CreateClsObjV3((char*)path.c_str(), gpuId,1); - } - void init(backEndManager* _backEndManagerIn) - { - - std::vector> futures;//异步初始化 - for (auto model : segModels) - { - futures.push_back(std::async(std::launch::async, &handleAiModelManager::createSeg,this, model.first,model.second,0)); - emit _backEndManagerIn->sendInitString(QString::fromStdString(getFileName(model.second) + "初始化中...")); - } - for (auto model : clsModels) - { - futures.push_back(std::async(std::launch::async, &handleAiModelManager::createCls, this, model.first, model.second, 0)); - emit _backEndManagerIn->sendInitString(QString::fromStdString(getFileName(model.second) + "初始化中...")); - } - int cnt = 0; - for (auto& func : futures) - { - func.wait(); - //emit _backEndManagerIn->sendInitString(QString::fromStdString(getFileName(models[cnt]->path) + "成功")); - cnt++; - } - } - ~handleAiModelManager() - { - handdleAI::DestroySegObj(largeSeg); - handdleAI::DestroySegObj(midSeg); - handdleAI::DestroySegObj(smallSeg); - - handdleAI::DestroyClsObj(largeCls); - handdleAI::DestroyClsObj(midCls); - handdleAI::DestroyClsObj(smallCls); - } - -}; -#endif #pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/handleAi/handleAiSimpleDet.h b/HanddleAI/HandleAiUi-new/handleAi/handleAiSimpleDet.h deleted file mode 100644 index 1d02b1e2..00000000 --- a/HanddleAI/HandleAiUi-new/handleAi/handleAiSimpleDet.h +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include -#include -struct detResultHandleStruct -{ - std::vector detResultIndex;//本产品对应det模型训练时的序号 - - std::string segModelName;//重复时将不会重复初始化 - std::vectorsegNgIndex;//NG的将会进入cls检测 - int segGpuIndex = 0; - - std::string clsModelName;//重复时将不会重复初始化 - std::vectorclsNgIndex;//NG判断 - int clsGpuIndex = 0; - - //int为Cls的分类结果 string为文本 Scalar为颜色 - std::unordered_map>clsResultHandle;//结果绘制 -}; -struct handleAiSimpleDet -{ - //最后调用模型时是使用路径去查找,请保证规则一致 - std::string detModelName;//重复时将不会重复初始化 - int detGpuIndex = 0; - - std::vectordetResultHandle; -}; -#pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/uiModule/uiModule_switchProduct.h b/HanddleAI/HandleAiUi-new/uiModule/uiModule_switchProduct.h index 331336c4..d0cb99b6 100644 --- a/HanddleAI/HandleAiUi-new/uiModule/uiModule_switchProduct.h +++ b/HanddleAI/HandleAiUi-new/uiModule/uiModule_switchProduct.h @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.exp b/lib/Hd_3DCameraLMI_module_PointLazer.exp index d8e955a0..c128f721 100644 Binary files a/lib/Hd_3DCameraLMI_module_PointLazer.exp and b/lib/Hd_3DCameraLMI_module_PointLazer.exp differ diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.lib b/lib/Hd_3DCameraLMI_module_PointLazer.lib index b04150d6..b506c2ad 100644 Binary files a/lib/Hd_3DCameraLMI_module_PointLazer.lib and b/lib/Hd_3DCameraLMI_module_PointLazer.lib differ diff --git a/lib/Hd_DalsaCamera_module.exp b/lib/Hd_DalsaCamera_module.exp index 27cfbc16..d51dd347 100644 Binary files a/lib/Hd_DalsaCamera_module.exp and b/lib/Hd_DalsaCamera_module.exp differ diff --git a/lib/Hd_DalsaCamera_module.lib b/lib/Hd_DalsaCamera_module.lib index 9c451b2e..c271a24e 100644 Binary files a/lib/Hd_DalsaCamera_module.lib and b/lib/Hd_DalsaCamera_module.lib differ diff --git a/lib/Hd_FinsTcp_module.exp b/lib/Hd_FinsTcp_module.exp index 8842446e..63243947 100644 Binary files a/lib/Hd_FinsTcp_module.exp and b/lib/Hd_FinsTcp_module.exp differ diff --git a/lib/Hd_FinsTcp_module.lib b/lib/Hd_FinsTcp_module.lib index f679fdae..e7784b3e 100644 Binary files a/lib/Hd_FinsTcp_module.lib and b/lib/Hd_FinsTcp_module.lib differ diff --git a/lib/Hd_MvCamera_module_GENTL.exp b/lib/Hd_MvCamera_module_GENTL.exp index ebd6dce5..f0a89b55 100644 Binary files a/lib/Hd_MvCamera_module_GENTL.exp and b/lib/Hd_MvCamera_module_GENTL.exp differ diff --git a/lib/Hd_MvCamera_module_GENTL.lib b/lib/Hd_MvCamera_module_GENTL.lib index 578b535e..4010f0a3 100644 Binary files a/lib/Hd_MvCamera_module_GENTL.lib and b/lib/Hd_MvCamera_module_GENTL.lib differ diff --git a/lib/Hd_MvCamera_module_GIGE.exp b/lib/Hd_MvCamera_module_GIGE.exp index 1d1dc4c0..baf010b9 100644 Binary files a/lib/Hd_MvCamera_module_GIGE.exp and b/lib/Hd_MvCamera_module_GIGE.exp differ diff --git a/lib/Hd_MvCamera_module_GIGE.lib b/lib/Hd_MvCamera_module_GIGE.lib index f5ba12df..110ae8d7 100644 Binary files a/lib/Hd_MvCamera_module_GIGE.lib and b/lib/Hd_MvCamera_module_GIGE.lib differ diff --git a/lib/Hd_ResultsSummary_module.exp b/lib/Hd_ResultsSummary_module.exp index 98647907..72272a70 100644 Binary files a/lib/Hd_ResultsSummary_module.exp and b/lib/Hd_ResultsSummary_module.exp differ diff --git a/lib/Hd_ResultsSummary_module.lib b/lib/Hd_ResultsSummary_module.lib index ff33633f..8baafc1c 100644 Binary files a/lib/Hd_ResultsSummary_module.lib and b/lib/Hd_ResultsSummary_module.lib differ diff --git a/lib/Hd_SocketModule_ModbusTcp.exp b/lib/Hd_SocketModule_ModbusTcp.exp index 30c37bd2..25890329 100644 Binary files a/lib/Hd_SocketModule_ModbusTcp.exp and b/lib/Hd_SocketModule_ModbusTcp.exp differ diff --git a/lib/Hd_SocketModule_ModbusTcp.lib b/lib/Hd_SocketModule_ModbusTcp.lib index 7d987e79..b3ff8f19 100644 Binary files a/lib/Hd_SocketModule_ModbusTcp.lib and b/lib/Hd_SocketModule_ModbusTcp.lib differ