From 2ff15e63431ae490f4f7ed277f03303790b653e0 Mon Sep 17 00:00:00 2001 From: "15089880081@163.com" <15089880081@163.com> Date: Mon, 27 May 2024 18:44:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=95=B4=E4=BD=93=EF=BC=8C?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E7=AE=97=E6=B3=95=E6=B5=8B=E8=AF=95=E5=AE=8C?= =?UTF-8?q?=E6=AF=95=EF=BC=8C=E5=88=87=E6=8D=A2=E6=9C=BA=E5=9E=8B=E7=95=99?= =?UTF-8?q?=E5=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HandleAiUi-new/algo/ALGO_Inspection.h | 51 ++++-- .../HandleAiUi-new/back/backEndManager.cpp | 26 ++- .../HandleAiUi-new/back/backEndManager.h | 16 +- .../HandleAiUi-new/back/cameraManager.cpp | 6 +- HanddleAI/HandleAiUi-new/back/cameraManager.h | 4 +- .../HandleAiUi-new/back/threadPoolManager.cpp | 9 +- .../HandleAiUi-new/back/threadPoolManager.h | 5 +- .../HandleAiUi-new/back/triggerManager.cpp | 103 ++++++----- .../HandleAiUi-new/back/triggerManager.h | 4 +- HanddleAI/HandleAiUi-new/globalStruct.h | 2 + .../HandleAiUi-new/handleAi/handleAiModel.h | 162 ++++++++++++------ HanddleAI/HandleAiUi-new/main.cpp | 40 ++++- HanddleAI/HandleAiUi-new/mainwindow.h | 1 - .../HandleAiUi-new/sqlManager/sqlManager.cpp | 2 +- .../HandleAiUi-new/sqlManager/sqlManager.h | 2 +- .../uiModule/uiModule_imageView.h | 4 +- lib/Hd_3DCameraLMI_module_PointLazer.exp | Bin 784 -> 772 bytes lib/Hd_3DCameraLMI_module_PointLazer.lib | Bin 2276 -> 2276 bytes lib/Hd_DalsaCamera_module.exp | Bin 763 -> 751 bytes lib/Hd_DalsaCamera_module.lib | Bin 2120 -> 2120 bytes lib/Hd_FinsTcp_module.exp | Bin 755 -> 743 bytes lib/Hd_FinsTcp_module.lib | Bin 2064 -> 2064 bytes lib/Hd_MvCamera_module_GENTL.exp | Bin 768 -> 756 bytes lib/Hd_MvCamera_module_GENTL.lib | Bin 2164 -> 2164 bytes lib/Hd_MvCamera_module_GIGE.exp | Bin 767 -> 755 bytes lib/Hd_MvCamera_module_GIGE.lib | Bin 2148 -> 2148 bytes lib/Hd_ResultsSummary_module.exp | Bin 768 -> 756 bytes lib/Hd_ResultsSummary_module.lib | Bin 2164 -> 2164 bytes lib/Hd_SocketModule_ModbusTcp.exp | Bin 1513 -> 1501 bytes lib/Hd_SocketModule_ModbusTcp.lib | Bin 3446 -> 3446 bytes 30 files changed, 281 insertions(+), 156 deletions(-) diff --git a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h index 8fdc73bf..fef71086 100644 --- a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h +++ b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h @@ -1,5 +1,7 @@ #include #include +#include +#include static HalconCpp::HObject MatToHObject(cv::Mat& image) { @@ -212,39 +214,52 @@ static void MatToHObjectV(cv::Mat& image, HalconCpp::HObject& Hobj) } - void pinHandleAiEvaluate(cv::Mat& src, cv::Mat& Paint, - handdleAI::pSegmentation *segPtr, handdleAI::pClassification* clsPtr) + handleAiModelSeg*segPtr, handleAiModelCls* clsPtr) { + 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; + for (auto contour : contours) { cv::Rect rect = cv::boundingRect(contour); - rect += cv::Size(1, 1); - rect = cv::Rect( - max(0, rect.x), - max(0, rect.y), - min(rect.x + rect.width, src.rows), - min(rect.y + rect.height, src.cols) - ); + if (rect.width < 10 || rect.height < 10) + continue; - int clsRes = clsPtr->Evaluate(src(rect)); + int maxHeightOrWidth = max(rect.width, rect.height); + int exHeight = max(maxHeightOrWidth - rect.height, 0); + int exWidth = max(maxHeightOrWidth - rect.width, 0); + rect += cv::Size(exWidth, exHeight); + //判断左上是否越界 + rect.x = max(0, rect.x); + rect.y = max(0, rect.y); + //判断右下是否越界 + rect.x = min(src.cols - rect.width, rect.x); + rect.y = min(src.rows - rect.height, rect.y); + + cv::Mat clsImg; + src(rect).copyTo(clsImg); + cv::resize(clsImg, clsImg, cv::Size(128, 128)); + + int clsRes = clsPtr->Evaluate(clsImg); cv::Scalar color; switch (clsRes) { case 0: - color = cv::Scalar(0, 255, 0, 128); + color = cv::Scalar(0, 255, 0, 30); break; case 1: - color = cv::Scalar(255, 0, 0, 128); + color = cv::Scalar(255, 0, 0, 30); break; default: - color = cv::Scalar(255, 255, 255, 128); + color = cv::Scalar(255, 255, 255, 30); } cv::rectangle(Paint, rect, color, 2); } + } void pinHalconEvaluate(std::vector& Result,cv::Mat& src, cv::Mat& Paint) @@ -315,6 +330,7 @@ void ALGO_Inspection(std::shared_ptr data, handleAiModelManager* _hand std::vectorhalconResult; //hv_in_Parameter //[0]-产品种类; 1A正面 2A反面 3B正面 4C正面 + int productType = 2; //[1]-图像序号第一位; //[2]-图像序号第二位; //[3]-3d相机精度(mm); @@ -332,15 +348,15 @@ void ALGO_Inspection(std::shared_ptr data, handleAiModelManager* _hand pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]), _handleAiModelManager->largeSeg, _handleAiModelManager->largeCls); break; - case 1: + case 1://3 p pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]), _handleAiModelManager->largeSeg, _handleAiModelManager->largeCls); break; - case 2: + case 2://2 pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]), _handleAiModelManager->midSeg, _handleAiModelManager->midCls); break; - case 3: + case 3://1 pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]), _handleAiModelManager->smallSeg, _handleAiModelManager->smallCls); break; @@ -349,4 +365,5 @@ void ALGO_Inspection(std::shared_ptr data, handleAiModelManager* _hand rectangle(Paint, halconResult[0], cv::Scalar(0, 0, 255), 4); data->resultImgs.push_back(Paint); _sleep(100); -} \ No newline at end of file +} + diff --git a/HanddleAI/HandleAiUi-new/back/backEndManager.cpp b/HanddleAI/HandleAiUi-new/back/backEndManager.cpp index deb25be1..d019549b 100644 --- a/HanddleAI/HandleAiUi-new/back/backEndManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/backEndManager.cpp @@ -32,21 +32,33 @@ void backEndManager::run() } if(isInit == NotInit) { - + //等待初始化 std::vector> futures;//异步初始化 - futures.push_back(std::async(std::launch::async, &threadManager::init, _threadManager, this)); - futures.push_back(std::async(std::launch::async, &triggerManager::init, _triggerManager, this)); - futures.push_back(std::async(std::launch::async, &cameraManager::init, _cameraManager, this)); - futures.push_back(std::async(std::launch::async, &sqlManager::initPara, &_sqlManager, sqlDefaultDatabasePath,true)); - futures.push_back(std::async(std::launch::async, &handleAiModelManager::init, _handleAiModelManager,this)); + futures.push_back(std::async(std::launch::async, &threadManager::initialization, _threadManager, this)); + futures.push_back(std::async(std::launch::async, &triggerManager::initialization, _triggerManager, this)); + futures.push_back(std::async(std::launch::async, &cameraManager::initialization, _cameraManager, this)); + futures.push_back(std::async(std::launch::async, &sqlManager::initialization, &_sqlManager, sqlDefaultDatabasePath,true)); + futures.push_back(std::async(std::launch::async, &handleAiModelManager::initialization, _handleAiModelManager,this)); for (auto& future : futures) { future.wait(); } + _imgSaveThreadManager->start(); - if (_triggerManager->isInit == true && _cameraManager->isInit == true) + _triggerManager->start(); + if (_threadManager->initFlag == true) + { + _threadManager->start(); + } + if (_triggerManager->initFlag == true && _cameraManager->initFlag == true) + { isInit = InitOK; + _triggerManager->start(); + _cameraManager->start(); + } else + { isInit = InitFailure; + } sendInitFinished(isInit); } } diff --git a/HanddleAI/HandleAiUi-new/back/backEndManager.h b/HanddleAI/HandleAiUi-new/back/backEndManager.h index dd6f1007..a7c48300 100644 --- a/HanddleAI/HandleAiUi-new/back/backEndManager.h +++ b/HanddleAI/HandleAiUi-new/back/backEndManager.h @@ -17,7 +17,7 @@ class backEndManager :public QThread Q_OBJECT public: initStatus isInit = NotInit; - QMutex mutex; + std::mutex mutex; //数据类 jsonConfiguration* _jsonConfiguration = nullptr; @@ -33,21 +33,15 @@ public: backEndManager(); ~backEndManager(); - - void init() +public slots: + void initialization() { isInit = NotInit; this->start(); - } - void run(); -public slots: - void reInitSlot() - { - isInit = ReInit; - this->start(); + //std::async(std::launch::async, &backEndManager::run, this); } private: - + void run(); signals: void sendErrorToMainwindow(backEndError); void sendPixmapImageWidget(showImgPack*); diff --git a/HanddleAI/HandleAiUi-new/back/cameraManager.cpp b/HanddleAI/HandleAiUi-new/back/cameraManager.cpp index 489170ef..dbd23f8a 100644 --- a/HanddleAI/HandleAiUi-new/back/cameraManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/cameraManager.cpp @@ -99,7 +99,7 @@ cameraManager::~cameraManager() } -void cameraManager::init(backEndManager* input) +void cameraManager::initialization(backEndManager* input) { _backEndManager = input; #pragma region 加载相机dll @@ -160,13 +160,11 @@ void cameraManager::init(backEndManager* input) { QByteArray errorStr("getStatus"); m_module.module_ptr->sendData(vec_mat,errorStr); - isInit = false; + initFlag = false; qCritical() << "[Error] " << " moduleName:" << m_module.moduleName << " initParas failed!"; emit _backEndManager->sendInitString("相机" + m_module.key + "初始化失败->"+ errorStr); } } - - this->start(); } bool cameraManager::loadModule(QString keyName, QString moduleName, QByteArray initByte) { diff --git a/HanddleAI/HandleAiUi-new/back/cameraManager.h b/HanddleAI/HandleAiUi-new/back/cameraManager.h index aa9a6795..b46eb480 100644 --- a/HanddleAI/HandleAiUi-new/back/cameraManager.h +++ b/HanddleAI/HandleAiUi-new/back/cameraManager.h @@ -106,7 +106,8 @@ class cameraManager : public QThread { Q_OBJECT public: - void init(backEndManager*); + bool initFlag = true; + void initialization(backEndManager*); ~cameraManager(); std::unordered_mapcameras;//key 相机名 camera* getCamera(std::string cameraName) @@ -133,7 +134,6 @@ public: camera.second->stop(); this->terminate(); } - bool isInit = true; private: bool loadModule(QString keyName, QString moduleName, QByteArray initByte); backEndManager* _backEndManager; diff --git a/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp b/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp index 9e6361b4..c7cbdf52 100644 --- a/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp @@ -42,15 +42,16 @@ threadManager::threadManager() //this->start(); } -void threadManager::init(backEndManager* _backEndManagerIn) +void threadManager::initialization(backEndManager* _backEndManagerIn) { _backEndManager = _backEndManagerIn; sql = &_backEndManager->_sqlManager; _imgSaveThreadManager = _backEndManagerIn->_imgSaveThreadManager; _triggerManager = _backEndManagerIn->_triggerManager; _handleAiModelManager = _backEndManager->_handleAiModelManager; - this->start(); + initFlag = true; } + void threadManager::process() { @@ -60,12 +61,14 @@ void threadManager::process() waitImgData.push_back(insertQueue.dequeue()); queueMutex.unlock(); #pragma endregion -#pragma region 等待图片满足要求后异步执行算法函数 +#pragma region 等待图片满足要求后,储存原图,异步执行算法函数 for (auto it = waitImgData.begin(); it != waitImgData.end();) { std::shared_ptr ptr = *it; if (ptr->oriImgs.size() >= ptr->imgAmountMin) { + _imgSaveThreadManager->oriSaveThread->imgDataQueue.append(ptr); + algoFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, processAlgo, ptr,_handleAiModelManager))); processData.push_back(ptr); diff --git a/HanddleAI/HandleAiUi-new/back/threadPoolManager.h b/HanddleAI/HandleAiUi-new/back/threadPoolManager.h index e06df734..73534c92 100644 --- a/HanddleAI/HandleAiUi-new/back/threadPoolManager.h +++ b/HanddleAI/HandleAiUi-new/back/threadPoolManager.h @@ -189,6 +189,7 @@ class threadManager : public QThread Q_OBJECT public: + bool initFlag = false; threadManager(); sqlManager* sql; @@ -198,7 +199,7 @@ public: QQueue> detDataQueue; autoDelete* autoDeleteThread; - void init(backEndManager* _backEndManagerIn); + void initialization(backEndManager* _backEndManagerIn); void run(); void stop() { @@ -214,7 +215,7 @@ public: QMutex queueMutex; QMutex insertQueueMutex; - QQueue>insertQueue; + QQueue>insertQueue; void process(); private: backEndManager* _backEndManager; diff --git a/HanddleAI/HandleAiUi-new/back/triggerManager.cpp b/HanddleAI/HandleAiUi-new/back/triggerManager.cpp index a724bf87..e6e90bfa 100644 --- a/HanddleAI/HandleAiUi-new/back/triggerManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/triggerManager.cpp @@ -6,6 +6,56 @@ #include #define debugTesting 1 static correctionStruct* correctionData; +void triggerManager::initialization(backEndManager* input) +{ + _backEndManager = input; + dManager = _backEndManager->_detDataManager; + _cameraManager = _backEndManager->_cameraManager; + _threadManager = _backEndManager->_threadManager; + _jsonConfiguration = _backEndManager->_jsonConfiguration; + + triggerFileName = _jsonConfiguration->tcp.moduleName; + IpAndPort = _jsonConfiguration->tcp.finstcp_init; + //triggerInitStr = QByteArray("sleeptime_%1_readnum_%2_writetype_ushort"); + QLibrary* m_lib = new QLibrary(triggerFileName); + bool flag = m_lib->load(); + if (!m_lib->isLoaded()) + { + //emit _backEndManager->sendErrorToMainwindow(dllNotFound); + emit _backEndManager->sendInitString("找不到" + triggerFileName); + return; + } + + if (flag) + { + CreateFunction createFun = (CreateFunction)m_lib->resolve("create"); + ReleaseFunction releaseFun = (ReleaseFunction)m_lib->resolve("destory"); + bool initFailure = false; + if (createFun && releaseFun) + { + trigger = createFun(); + destory_finstcp = releaseFun; + QByteArray initByte = QByteArray::fromStdString("sleeptime_20_readnum_300_writetype_ushort"); + trigger->reciveData(vec_mat, QByteArray(IpAndPort.toUtf8())); + emit _backEndManager->sendInitString(triggerFileName + "连接到" + IpAndPort); + initFailure = trigger->initParas(initByte); + } + + if (initFailure == false) + { + emit _backEndManager->sendErrorToMainwindow(triggerInitFailure); + delete m_lib; + m_lib = nullptr; + emit _backEndManager->sendInitString(triggerFileName + "初始化失败"); + return; + } + else + { + initFlag = true; + emit _backEndManager->sendInitString(triggerFileName + "成功"); + } + } +} void triggerManager::decodeCameraCMD(QByteArray byte) { #if debugTesting @@ -22,7 +72,7 @@ void triggerManager::decodeCameraCMD(QByteArray byte) { std::shared_ptr data = dManager->insertDetData("Camera1", "TEST", 1, 1); data->correctionData = correctionData; - data->oriImgs.push_back(cv::imread("C://Users//RCi//Downloads//20240526-202606.bmp",-1)); + data->oriImgs.push_back(cv::imread("E://Cisco2-2024//TestImg//HFFGG6534_1_1_Battlestar20240326_180201.bmp",-1)); _threadManager->addTask(data);//添加任务 //auto camera = _cameraManager->getCamera("123"); //if (camera != nullptr) @@ -160,57 +210,6 @@ void triggerManager::decodeCameraCMD(QByteArray byte) #endif } - -void triggerManager::init(backEndManager* input) -{ - _backEndManager = input; - dManager = _backEndManager->_detDataManager; - _cameraManager = _backEndManager->_cameraManager; - _threadManager = _backEndManager->_threadManager; - _jsonConfiguration = _backEndManager->_jsonConfiguration; - - triggerFileName = _jsonConfiguration->tcp.moduleName; - IpAndPort = _jsonConfiguration->tcp.finstcp_init; - //triggerInitStr = QByteArray("sleeptime_%1_readnum_%2_writetype_ushort"); - QLibrary* m_lib = new QLibrary(triggerFileName); - bool flag = m_lib->load(); - if (!m_lib->isLoaded()) - { - //emit _backEndManager->sendErrorToMainwindow(dllNotFound); - emit _backEndManager->sendInitString("找不到"+triggerFileName); - return; - } - - if (flag) - { - CreateFunction createFun = (CreateFunction)m_lib->resolve("create"); - ReleaseFunction releaseFun = (ReleaseFunction)m_lib->resolve("destory"); - bool initFailure = false; - if (createFun && releaseFun) - { - trigger = createFun(); - destory_finstcp = releaseFun; - QByteArray initByte = QByteArray::fromStdString("sleeptime_20_readnum_300_writetype_ushort"); - trigger->reciveData(vec_mat, QByteArray(IpAndPort.toUtf8())); - emit _backEndManager->sendInitString(triggerFileName + "连接到" + IpAndPort); - initFailure=trigger->initParas(initByte); - } - - if(initFailure==false) - { - emit _backEndManager->sendErrorToMainwindow(triggerInitFailure); - delete m_lib; - m_lib = nullptr; - isInit = false; - emit _backEndManager->sendInitString(triggerFileName + "初始化失败"); - return; - } - else - emit _backEndManager->sendInitString(triggerFileName + "成功"); - } - this->start(); -} - int triggerManager::getValue(int dmPos, QByteArray byte) { int triggerPos = (dmPos - _backEndManager->_jsonConfiguration->tcp.startPos) * 2; diff --git a/HanddleAI/HandleAiUi-new/back/triggerManager.h b/HanddleAI/HandleAiUi-new/back/triggerManager.h index e5247452..2ae0d75f 100644 --- a/HanddleAI/HandleAiUi-new/back/triggerManager.h +++ b/HanddleAI/HandleAiUi-new/back/triggerManager.h @@ -64,6 +64,7 @@ private: class triggerManager : public QThread { public: + bool initFlag = false; QString triggerFileName; QString IpAndPort; QString triggerInitStr; @@ -74,7 +75,7 @@ public: this->terminate(); delete trigger; } - void init(backEndManager* input); + void initialization(backEndManager* input); void run() { QThread::msleep(5000); @@ -139,7 +140,6 @@ public: } int getValue(int dmPos, QByteArray byte); - bool isInit = true; private: threadManager* _threadManager; detDataManager* dManager; diff --git a/HanddleAI/HandleAiUi-new/globalStruct.h b/HanddleAI/HandleAiUi-new/globalStruct.h index 06c4ea49..a5110f57 100644 --- a/HanddleAI/HandleAiUi-new/globalStruct.h +++ b/HanddleAI/HandleAiUi-new/globalStruct.h @@ -16,6 +16,8 @@ #define sColor_Black "22, 22, 22" #define sColor_BlackWithWhite "45, 45, 45" + +#define disableBackEndCheck 1 enum backEndError { dllNotFound, diff --git a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h index 593e69a9..33c42fce 100644 --- a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h +++ b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h @@ -4,59 +4,71 @@ #include #include #include - -#if 0 -class handleAiModelBase +#define handleAiModelSwitch 1 +#if handleAiModelSwitch +class handleAiModelSeg { public: std::string path; int gpuIndex =0; std::mutex* gpuMutex; - virtual void init() {}; - virtual bool destroy() { return true; }; - virtual cv::Mat evalute() { return cv::Mat(); }; -}; -class handleAiModelSeg :public handleAiModelBase -{ -public: - handleAiModelSeg(std::string pathIn, int gpuIndexIn) + handleAiModelSeg(std::string pathIn, int gpuIndexIn, std::mutex* mutex) { path = pathIn; gpuIndex = gpuIndexIn; + gpuMutex = mutex; }; - void init() override + void init() { segPtr = handdleAI::CreateSegObj((char*)path.c_str(),gpuIndex); } - bool destroy() override + bool destroy() { if (segPtr == nullptr) return false; handdleAI::DestroySegObj(segPtr); return true; } + cv::Mat Evaluate(cv::Mat& in) + { + gpuMutex->lock(); + cv::Mat res = segPtr->Evaluate(in); + gpuMutex->unlock(); + return res; + } private: handdleAI::pSegmentation* segPtr = nullptr; }; -class handleAiModelCls :public handleAiModelBase +class handleAiModelCls { public: - handleAiModelCls(std::string pathIn, int gpuIndexIn) + std::string path; + int gpuIndex = 0; + std::mutex* gpuMutex; + handleAiModelCls(std::string pathIn, int gpuIndexIn, std::mutex* mutex) { path = pathIn; gpuIndex = gpuIndexIn; + gpuMutex = mutex; }; - void init() override + void init() { - clsPtr = handdleAI::CreateClsObjVT((char*)path.c_str(), gpuIndex); + clsPtr = handdleAI::CreateClsObjV3((char*)path.c_str(), gpuIndex,1); } - bool destroy() override + bool destroy() { if (clsPtr == nullptr) return false; handdleAI::DestroyClsObj(clsPtr); return true; } + int Evaluate(cv::Mat& in) + { + gpuMutex->lock(); + int res = clsPtr->Evaluate(in); + gpuMutex->unlock(); + return res; + } private: handdleAI::pClassification* clsPtr; }; @@ -64,6 +76,7 @@ private: class handleAiModelManager :public QObject { public: + bool initFlag = false; handleAiModelSeg* largeSeg; handleAiModelCls* largeCls; @@ -76,56 +89,81 @@ public: ////////模型放这里/////// handleAiModelManager() { - gpuMutex = std::vector(gpuCnt, new std::mutex); + gpuMutex = std::vector(gpuCnt, new std::mutex()); - largeSeg = new handleAiModelSeg("./HandleAiModels/large-seg.BHD",0); - midSeg = new handleAiModelSeg("./HandleAiModels/mid-seg.BHD", 0); - smallSeg = new handleAiModelSeg("./HandleAiModels/small-seg.BHD", 0); + int gpu1 = 0; + largeSeg = new handleAiModelSeg("./HandleAiModels/large-seg.BHD", gpu1, gpuMutex[gpu1]); + midSeg = new handleAiModelSeg("./HandleAiModels/mid-seg.BHD", gpu1, gpuMutex[gpu1]); + smallSeg = new handleAiModelSeg("./HandleAiModels/small-seg.BHD", gpu1, gpuMutex[gpu1]); - largeCls = new handleAiModelCls("./HandleAiModels/large-cls.BHD", 0); - midCls = new handleAiModelCls("./HandleAiModels/mid-cls.BHD", 0); - smallCls = new handleAiModelCls("./HandleAiModels/small_cls.BHD", 0); + segModels.push_back(largeSeg); + segModels.push_back(midSeg); + segModels.push_back(smallSeg); - models.push_back(largeSeg); - models.push_back(midSeg); - models.push_back(smallSeg); - models.push_back(largeCls); - models.push_back(midCls); - models.push_back(smallCls); + largeCls = new handleAiModelCls("./HandleAiModels/large-cls.BHD", gpu1, gpuMutex[gpu1]); + midCls = new handleAiModelCls("./HandleAiModels/mid-cls.BHD", gpu1, gpuMutex[gpu1]); + smallCls = new handleAiModelCls("./HandleAiModels/small_cls.BHD", gpu1, gpuMutex[gpu1]); + + + clsModels.push_back(largeCls); + clsModels.push_back(midCls); + clsModels.push_back(smallCls); } ///////////END///////// - void init(backEndManager* _backEndManagerIn) + void initialization(backEndManager* _backEndManagerIn) { - return; - std::vector> futures;//异步初始化 - for(auto model: models) + //return; + std::vector> futuresSeg; + std::vector> futuresCls; + for(auto model: segModels) { - futures.push_back(std::async(std::launch::async, &handleAiModelBase::init, model)); + futuresSeg.push_back(std::async(std::launch::async, &handleAiModelSeg::init, model)); emit _backEndManagerIn->sendInitString(QString::fromStdString(getFileName(model->path) + "初始化中...")); } - int cnt = 0; - for (auto& func : futures) + for (auto model : clsModels) + { + futuresCls.push_back(std::async(std::launch::async, &handleAiModelCls::init, model)); + emit _backEndManagerIn->sendInitString(QString::fromStdString(getFileName(model->path) + "初始化中...")); + } + + int cntSeg = 0; + for (auto& func : futuresSeg) { func.wait(); - emit _backEndManagerIn->sendInitString(QString::fromStdString(getFileName(models[cnt]->path) + "成功")); - cnt++; + emit _backEndManagerIn->sendInitString(QString::fromStdString(getFileName(segModels[cntSeg]->path) + "成功")); + cntSeg++; + } + + int cntCls = 0; + for (auto& func : futuresCls) + { + func.wait(); + emit _backEndManagerIn->sendInitString(QString::fromStdString(getFileName(clsModels[cntCls]->path) + "成功")); + cntCls++; } } ~handleAiModelManager() { - for (auto model : models) + for (auto model : segModels) + model->destroy(); + for (auto model : clsModels) model->destroy(); } private: - std::vector models; + std::vector segModels; + std::vector clsModels; std::vectorgpuMutex; int gpuCnt = 1;//gpu数量 }; #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; @@ -138,20 +176,45 @@ public: ////////模型放这里/////// 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) { - return; - largeSeg = handdleAI::CreateSegObj("./HandleAiModels/large-seg.BHD", 0); - midSeg = handdleAI::CreateSegObj("./HandleAiModels/mid-seg.BHD", 0); - smallSeg = handdleAI::CreateSegObj("./HandleAiModels/small-seg.BHD", 0); - largeCls = handdleAI::CreateClsObjVT("./HandleAiModels/large-cls.BHD", 0); - midCls = handdleAI::CreateClsObjVT("./HandleAiModels/mid-cls.BHD", 0); - smallCls = handdleAI::CreateClsObjVT("./HandleAiModels/small_cls.BHD", 0); + 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() { @@ -165,4 +228,5 @@ public: } }; +#endif #pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/main.cpp b/HanddleAI/HandleAiUi-new/main.cpp index a9388e0a..ad0141f7 100644 --- a/HanddleAI/HandleAiUi-new/main.cpp +++ b/HanddleAI/HandleAiUi-new/main.cpp @@ -19,11 +19,45 @@ void connectSignalAndSlots(MainWindow* front, backEndManager* back) QObject::connect(back, &backEndManager::sendInitString, front, &MainWindow::recvInitString); QObject::connect(back, &backEndManager::sendInitFinished, front, &MainWindow::recvInitFinished); - QObject::connect(front, &MainWindow::reInitSignal, back, &backEndManager::reInitSlot); - QObject::connect(front->_loadingWidget.retryBtn, &QPushButton::clicked, back, &backEndManager::reInitSlot); + QObject::connect(front, &MainWindow::reInitSignal, back, &backEndManager::initialization); + QObject::connect(front->_loadingWidget.retryBtn, &QPushButton::clicked, back, &backEndManager::initialization); +} +//exmple 860 168/144 1 +QByteArray createReadPlcQByteArray(int pos, int areaCode, int lenth) +{ + int pos1 = std::max(0, pos - 255); + int pos2 = pos - pos1; + QString str1 = QString("%1").arg(pos1, 2, 16, QLatin1Char('0')).toUpper(); + QString str2 = QString("%1").arg(pos2, 2, 16, QLatin1Char('0')).toUpper(); + QString str3 = QString("%1").arg(lenth, 2, 16, QLatin1Char('0')).toUpper(); + QString str = QString("50 00 00 FF FF 03 00 0C 00 0A 00 01 04 00 00 %1 %2 00 %3 %4 00") + .arg(str1) + .arg(str2) + .arg(QString::number(areaCode, 16).toUpper()) + .arg(str3); + return QByteArray::fromHex(str.toStdString().c_str()); +} +//exmple 862 168/144 1 1 +QByteArray createwritePlcQByteArray(int pos, int areaCode, int lenth, int value) +{ + int pos1 = std::max(0, pos - 255); + int pos2 = pos - pos1; + + QString str1 = QString("%1").arg(pos1, 2, 16, QLatin1Char('0')).toUpper(); + QString str2 = QString("%1").arg(pos2, 2, 16, QLatin1Char('0')).toUpper(); + QString str3 = QString("%1").arg(lenth, 2, 16, QLatin1Char('0')).toUpper(); + QString str4 = QString("%1").arg(value, 2, 16, QLatin1Char('0')).toUpper(); + QString str = QString("50 00 00 FF FF 03 00 0E 00 0A 00 01 14 00 00 %1 %2 00 %3 00 %4 00 %5 00") + .arg(str1) + .arg(str2) + .arg(QString::number(areaCode, 16).toUpper()) + .arg(str3) + .arg(str4); + return QByteArray::fromHex(str.toStdString().c_str()); } int main(int argc, char* argv[]) { + QByteArray r = createReadPlcQByteArray(102, 168, 1); QApplication a(argc, argv); LogMsg::Create(LogMsg::LogMsgType::DebugMsg); //妫�娴嬫槸鍚﹀凡杩愯 @@ -46,7 +80,7 @@ int main(int argc, char* argv[]) w.show(); backEndManager _backEnd; connectSignalAndSlots(&w,&_backEnd); - _backEnd.init(); + _backEnd.initialization(); return a.exec(); diff --git a/HanddleAI/HandleAiUi-new/mainwindow.h b/HanddleAI/HandleAiUi-new/mainwindow.h index 3650af1e..ebd16acc 100644 --- a/HanddleAI/HandleAiUi-new/mainwindow.h +++ b/HanddleAI/HandleAiUi-new/mainwindow.h @@ -25,7 +25,6 @@ #include #include -#define disableBackEndCheck 1 #pragma execution_character_set("utf-8") QT_BEGIN_NAMESPACE diff --git a/HanddleAI/HandleAiUi-new/sqlManager/sqlManager.cpp b/HanddleAI/HandleAiUi-new/sqlManager/sqlManager.cpp index cef168ec..997a3503 100644 --- a/HanddleAI/HandleAiUi-new/sqlManager/sqlManager.cpp +++ b/HanddleAI/HandleAiUi-new/sqlManager/sqlManager.cpp @@ -81,7 +81,7 @@ sqlTableDatas sqlManager::selectAllData(std::string SN) dbPtr->Select(getPreviousDate(), {}, "SN", SN, selectResult); return selectResult; } -void sqlManager::initPara(std::string dataBasePath, bool backup) +void sqlManager::initialization(std::string dataBasePath, bool backup) { std::cout << "SQL runing Init..." << std::endl; dbPtr = new sqliteModule(dataBasePath);//鍒濆鍖� diff --git a/HanddleAI/HandleAiUi-new/sqlManager/sqlManager.h b/HanddleAI/HandleAiUi-new/sqlManager/sqlManager.h index 6c356c2d..6509009d 100644 --- a/HanddleAI/HandleAiUi-new/sqlManager/sqlManager.h +++ b/HanddleAI/HandleAiUi-new/sqlManager/sqlManager.h @@ -30,7 +30,7 @@ public: sqlTableDatas selectAllData(std::string SN); sqlError GetTables(std::vector& input);//获取所有列名 - void initPara(std::string dataBasePath = sqlDefaultDatabasePath,bool backUp=true); + void initialization(std::string dataBasePath = sqlDefaultDatabasePath,bool backUp=true); bool addData(std::string SN, std::vector data); int checktSn(std::string sn); void checkCol(sqlite3* db,std::string tableName,std::string columnName); diff --git a/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageView.h b/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageView.h index 35efe9d8..fd3b2d57 100644 --- a/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageView.h +++ b/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageView.h @@ -451,12 +451,14 @@ public: { case imgWidgetOri: ImageWidgetList[index]->setOriImg(img); + return true; break; case imgWidgetRes: ImageWidgetList[index]->setResImg(img); + return true; break; } - + return false; } bool showImg(QPixmap& img, imgWidgetShowType _type, QString nickName) { diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.exp b/lib/Hd_3DCameraLMI_module_PointLazer.exp index b0d66668d858f227d6754c2baf6d937a46482b7c..c128f721899e1a2fd5f5ffe10a0335da718ee8af 100644 GIT binary patch delta 125 zcmbQh*22b_(#FK_9|$xiaym1zO!U3a_k)3f!Ipth5J)k&Sxt6e^i)w}$ZBL@@Xbsv z$}i4OD^bu0(p2#A^z&xOX0R1xNG?wSDcsDcAzy4{U}O{%<{T4}pPy44;~NZQ8k*=C XTj&`Z8yXu-{>A9Tl+`%dj_DEr(lI08 delta 119 zcmZo+o504I(#FK_9|%k)ayl~#O!U1k!otYF;LN}%$N&T`Rx!^0F0R3otr$JE)EPcE zF);XMCKu%w=ckn@Xas30_;~txGZZq|3Nj>@ry!IsXVhQ}o_v8(oZV8-*x1z2a`HPy NC#KI$lZ}`z0RZ19A_)Kh diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.lib b/lib/Hd_3DCameraLMI_module_PointLazer.lib index b04150d66d0bd6f8780c0ea27f1bb8d8c729edd8..b506c2adaff32453f920896da4a99bad9470fc31 100644 GIT binary patch delta 118 zcmaDN_(X8S0VWpXY46@lKEiaIMU5e=adJO%F%yuQ#V)m3j>UkH^Ptn_hnE-_7?>uX wWRjj-#99wirapNBI|o$hWCyl5&b6m&4}62FG@E>vtp}!38LD#gEOswO00)UE^Z)<= delta 118 zcmaDN_(X8S0VbAz%oEN}KEiaIMV;Yu)8u~UVkRIpi(P879E$-XXW8l7S1&OzFfdI% w$s|3wh_xQ3OnveMb`Gf0$qsCBoC?-nr@ui}noYjT)&o1_mPrMnNFO;AS=1jL}X-jUlU%fx$O3 zxhTIlKdnSTBS=%h$J5W7A)CQgkRiD|1*C8uqlSF3k%5s>Oqg>_NPd1!ag1*;kZEY5 YXKbNoY;0(3F!?E?6H`{>WKE_^0EXKoApigX delta 138 zcmaFQ`kR$ArHzTha6({12NR3#l2yki_b}~YQDewzob1D#&IF|7*`+q0XO?DU7G=zs{FY@ZOj3RF rT2>CIg2@+IV_DC4{(bR!@_QEf$!nOTC+D&?!c;0lRc@AN*JK0$_5&nj delta 108 zcmX>ha6({12NTP2)AOe%_b}~YQD^wvG}(taoe4U!8q3=t^)#)ifQlkYM*F##1SGF<`yB)uAn delta 138 zcmaFP`k9q8rHzT$S5YvIVL1OKc_gx eHyFq?G|@A*)H60VHME?3k+3PMg|6s$^2|)lQ%QfvZyg+HBOFWRi7NqY{LX(_OnWD-pnk_ w$nsyM=EdYwEE8ZV^dYk4EOPCyj!oub+X0hM=5k2R&n?i)Oo3|WWoKpt0HB~E>;M1& delta 113 zcmbOrFhO8L2@~f(^@6+dj0_AMllj@qCU0h{Wl?AN+%!3kRef?avkeoF+0QDqc{8&x wBa6wYtap=7u}pxe(1*yDvp75wyE2)JZ3j$3nad$LKes?HGX<)hmz|jr0D+b!iU0rr diff --git a/lib/Hd_MvCamera_module_GENTL.exp b/lib/Hd_MvCamera_module_GENTL.exp index 588ebc79337b83ef3ecbb3be1c634dd15f386be3..f0a89b553a1d128975c713a0fcafda275f8da276 100644 GIT binary patch delta 126 zcmZo*`@+hZ(#FK_9|$BSaym2pVVLN5jqd{k1A{38qacuCaI>0h!RV->#*o#>z~Gyi zT$Ep&pH`xv5u~Z$^$TT$3 YGq%t(Ha0XinEZ;-i7BgbvL4eV09LOg&;S4c delta 120 zcmeyu+Q7z{(#FK_9|%+?aym0{Fi!NlCh~`Yfx()AQ4mNmxLCzF`@6UXPc~w7)KX{o z+{D1(o0(jcU!0#-qM#9^so>-3=gm;aU@ORwT%LkZKAlm6F?jL;MsapaJ!4~2L(9qc O7@e3tH%(SzxNA|mMk diff --git a/lib/Hd_MvCamera_module_GENTL.lib b/lib/Hd_MvCamera_module_GENTL.lib index 578b535ee41c6c12f7e6ab81feeae0134eac1aaf..4010f0a3da11c6819056f7133313cf8a23370e79 100644 GIT binary patch delta 118 zcmew&@I_$53?`O;Zc(o%&tclnqQ;QbI60mc1_l!bMnNFO;AS=1g3&=mjUlU%fx$O3 zxhTIlKdnSTBS=%h$J5W7A)CQgkRiD|1*C8hqlSF3k%5s>Oqg>_NPd1!ag1*;kZEY5 YXKbNoY;0(3F!?2;6H`{>WL>690FnbGMF0Q* delta 120 zcmey&`k$3ErHzTW$$WANntjN OGCDDRZknvfbO`{Dsv}(h diff --git a/lib/Hd_MvCamera_module_GIGE.lib b/lib/Hd_MvCamera_module_GIGE.lib index f5ba12df64b2f2e149f3a1b7a1622e6c2dd11692..110ae8d714ae9a153c870b6ea7d31787466ae1f1 100644 GIT binary patch delta 108 zcmaDN@I+w4Bqo;p>l@!pp2oC~MU5e=aq=uy^~v?jPE0`NX;!JtcbVlGS)TPV-XJB3aIQ)aT5(x04xJn+a delta 108 zcmaDN@I+w4BqkQ4S+m|wp2oC~MV;Yu)8tvK>XYl4otS{k)2vdP?=s6XvY5Ryxjl(> s8ccycM6#SUOQrAa+sTZq@{`lp=D}o@xg3)7a|`q`Q=mrpvx_nU04H}TWB>pF diff --git a/lib/Hd_ResultsSummary_module.exp b/lib/Hd_ResultsSummary_module.exp index 59f77271cb443ce895a01c84da2ef9a0df05ac4b..72272a70ead1c7a3023873a763f290b25f1c8a31 100644 GIT binary patch delta 126 zcmZo*`@+hZ(#FK_9|$BSaym2pVVLN5jqd{k1A{38qacuCaI>0h!RV->#*o#>z~Gyi zT$Ep&pH`xv5u~Z$^$TT$3 YGq%t(Ha0XinEZ;-i7BgbvL4eV09LOg&;S4c delta 120 zcmeyu+Q7z{(#FK_9|%+?aym0{Fi!NlCh~`Yfx()AQ4mNmxLCzF`@6UXPc~w7)KX{o z+{D1(o0(jcU!0#-qM#9^so>-3=gm;aU@ORwT%LkZKAlm6F?jL;MsapaJ!4~2L(9qc O7@e3tH%(SzxNA|mMk diff --git a/lib/Hd_ResultsSummary_module.lib b/lib/Hd_ResultsSummary_module.lib index ff33633f3db52aec9c9ccb88fc9c624c2109a9d1..8baafc1c7adb77e35051dfe8ea37dc3b629b4297 100644 GIT binary patch delta 117 zcmew&@I_$53?^o+dy^*5W;(#4#*o!GIi5M2DXVew8D=X+&JQ+8e@-zlFfdJC$Rs^k xi?tl4M1ArZRt})D$!D0QCVya!<9s*6;o>`}O0&tmY%MUA$_SOxn`7C<83B{oC#(Pf delta 117 zcmew&@I_$53?}BnwZ|vVW;(#4&hWWuay)Z3)90qmXPB)RIsaXl@bDA^0|V3Kg-p_u ywOGqxO4KKxVdVfSn|y{@YVrrxI8L`KOHaRpsx+J2%hm!@sfQM!u=t^)#)ifQlm9b4W6EmW J{G6GI2>@mTAnyPG delta 139 zcmcc1{gRtArHzTrV$mz_ucBAiWMv;Y#3=B35jDie6;9?cy?C;_lJlT!ONlTsK za}xuDZ)S2)esO+UiGoIurh<>BpEpAxgRLM#a(N0u`5Gn-`CuahBcqrw=a`WE{G8$# g-(Voq&_vJJQqS1f)X;MBXQpRNpPM${W@cgn00B5E`v3p{ diff --git a/lib/Hd_SocketModule_ModbusTcp.lib b/lib/Hd_SocketModule_ModbusTcp.lib index 7d987e797c1925944487933e8b6ed09e14a3773c..b3ff8f19c2b7f22a232105edac9723e1a30fca2a 100644 GIT binary patch delta 108 zcmew+^-XHSI~LA!vnzkN7c@4(_u=wNxPHmXh?VS6W0bcJXg#Z8m