From dc7983bcaf71c350a21055c4d696eb9972a14533 Mon Sep 17 00:00:00 2001 From: RCi <15089880081@163.com> Date: Mon, 27 May 2024 00:22:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=8C=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HandleAiUi-new/algo/ALGO_Inspection.h | 185 ++++++++++++------ HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h | 32 +++ HanddleAI/HandleAiUi-new/algo/algo.zip | Bin 11464 -> 0 bytes HanddleAI/HandleAiUi-new/back/cameraManager.h | 9 +- HanddleAI/HandleAiUi-new/back/logmsg.cpp | 2 +- .../HandleAiUi-new/back/threadPoolManager.cpp | 91 ++++----- .../HandleAiUi-new/back/threadPoolManager.h | 69 +++---- .../HandleAiUi-new/back/triggerManager.cpp | 21 +- .../HandleAiUi-new/back/triggerManager.h | 1 - .../HandleAiUi-new/handleAi/handleAiModel.h | 45 +++++ lib/Hd_3DCameraLMI_module_PointLazer.exp | Bin 772 -> 784 bytes lib/Hd_3DCameraLMI_module_PointLazer.lib | Bin 2276 -> 2276 bytes lib/Hd_DalsaCamera_module.exp | Bin 751 -> 763 bytes lib/Hd_DalsaCamera_module.lib | Bin 2120 -> 2120 bytes lib/Hd_FinsTcp_module.exp | Bin 743 -> 755 bytes lib/Hd_FinsTcp_module.lib | Bin 2064 -> 2064 bytes lib/Hd_MvCamera_module_GENTL.exp | Bin 756 -> 768 bytes lib/Hd_MvCamera_module_GENTL.lib | Bin 2164 -> 2164 bytes lib/Hd_MvCamera_module_GIGE.exp | Bin 755 -> 767 bytes lib/Hd_MvCamera_module_GIGE.lib | Bin 2148 -> 2148 bytes lib/Hd_ResultsSummary_module.exp | Bin 756 -> 768 bytes lib/Hd_ResultsSummary_module.lib | Bin 2164 -> 2164 bytes lib/Hd_SocketModule_ModbusTcp.exp | Bin 1501 -> 1513 bytes lib/Hd_SocketModule_ModbusTcp.lib | Bin 3446 -> 3446 bytes 24 files changed, 305 insertions(+), 150 deletions(-) create mode 100644 HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h delete mode 100644 HanddleAI/HandleAiUi-new/algo/algo.zip diff --git a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h index 8730bfa2..8fdc73bf 100644 --- a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h +++ b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h @@ -1,5 +1,6 @@ #include #include + static HalconCpp::HObject MatToHObject(cv::Mat& image) { HalconCpp::HObject Hobj; @@ -210,70 +211,142 @@ static void MatToHObjectV(cv::Mat& image, HalconCpp::HObject& Hobj) } } -void ALGO_Inspection(std::shared_ptr data) + + +void pinHandleAiEvaluate(cv::Mat& src, cv::Mat& Paint, + handdleAI::pSegmentation *segPtr, handdleAI::pClassification* clsPtr) +{ + cv::Mat segRes = ~segPtr->Evaluate(src); + std::vector> contours; + cv::findContours(segRes, contours, cv::RETR_EXTERNAL,cv::CHAIN_APPROX_NONE); + 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) + ); + + int clsRes = clsPtr->Evaluate(src(rect)); + cv::Scalar color; + switch (clsRes) + { + case 0: + color = cv::Scalar(0, 255, 0, 128); + break; + case 1: + color = cv::Scalar(255, 0, 0, 128); + break; + default: + color = cv::Scalar(255, 255, 255, 128); + } + cv::rectangle(Paint, rect, color, 2); + } +} + +void pinHalconEvaluate(std::vector& Result,cv::Mat& src, cv::Mat& Paint) +{ + //hv_in_Parameter + //[0]-产品种类; 1A正面 2A反面 3B正面 4C正面 + //[1]-图像序号第一位; + //[2]-图像序号第二位; + //[3]-3d相机精度(mm); + //[4]-ping针偏移判NG阈值(mm); + //[5]-切图存图开关 +#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; + + //ROI + HTuple hv_out_ROI_Value; + HTuple hv_out_Flag_ROI; +#pragma endregion + ho_in_Image = MatToHObject(src); + hv_in_Parameter.Append(3); + hv_in_Parameter.Append(5); + 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"; + + + Pings_Inspection(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); + + 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() + )); + } +} + +void ALGO_Inspection(std::shared_ptr data, handleAiModelManager* _handleAiModelManager) { if (data->oriImgs.size() < 1) { qDebug() << __FUNCDNAME__ << __LINE__ << "camera Mat size is Error!"; return; } - //hv_in_Parameter - //[0]-产品种类; 1A正面 2A反面 3B正面 4C正面 - //[1]-图像序号第一位; - //[2]-图像序号第二位; - //[3]-3d相机精度(mm); - //[4]-ping针偏移判NG阈值(mm); - //[5]-切图存图开关 -#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; + cv::Mat src = data->oriImgs[0]; + cv::Mat Paint; + cvtColor(src, Paint, cv::COLOR_GRAY2BGR); + std::vectorhalconResult; + //hv_in_Parameter + //[0]-产品种类; 1A正面 2A反面 3B正面 4C正面 + //[1]-图像序号第一位; + //[2]-图像序号第二位; + //[3]-3d相机精度(mm); + //[4]-ping针偏移判NG阈值(mm); + //[5]-切图存图开关 - //ROI - HTuple hv_out_ROI_Value; - HTuple hv_out_Flag_ROI; -#pragma endregion + //HALCON + pinHalconEvaluate(halconResult,src, Paint); - cv::Mat mat = cv::imread("C://NHMJDHNN78474-5_1-ASR1006X20240320-150822.BMP", -1); - ho_in_Image = MatToHObject(mat); - MatToHObjectV(mat, ho_in_Image); - hv_in_Parameter.Append(3); - hv_in_Parameter.Append(5); - hv_in_Parameter.Append(1); - hv_in_Parameter.Append(0.0135); - hv_in_Parameter.Append(0.2); - hv_in_Parameter.Append(2); + //HANDLEAI + int customIndex = 0; + switch(customIndex) + { + case 0: + pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]), + _handleAiModelManager->largeSeg, _handleAiModelManager->largeCls); + break; + case 1: + pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]), + _handleAiModelManager->largeSeg, _handleAiModelManager->largeCls); + break; + case 2: + pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]), + _handleAiModelManager->midSeg, _handleAiModelManager->midCls); + break; + case 3: + pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]), + _handleAiModelManager->smallSeg, _handleAiModelManager->smallCls); + break; + } - hv_in_ShapePath = "./halconModel"; - - - Pings_Inspection(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); - - Pings_ROI(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_ROI_Value, &hv_out_Flag_ROI); - std::vectorResult; - 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::Mat Paint; - cvtColor(mat, Paint, cv::COLOR_GRAY2BGR); - rectangle(Paint, Result[0], cv::Scalar(0, 0, 255), 4); + 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/algo/ALGO_MAIN.h b/HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h new file mode 100644 index 00000000..4689022a --- /dev/null +++ b/HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +bool processAlgo(std::shared_ptr data, handleAiModelManager* _handleAiModelManager) +{ + try + { + switch (data->algoThreadIndex) + { + case -1: + pinAioEvalute(data); + break; + case 0: + ALGO_Correction(data); + break; + case 1: + ALGO_Inspection(data, _handleAiModelManager); + break; + } + qDebug() << "algo end"; + return true; + } + catch (const std::exception& e) + { + std::cerr << "Caught exception: " << e.what() << std::endl; + return false; + } + return false; +} +#pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/algo/algo.zip b/HanddleAI/HandleAiUi-new/algo/algo.zip deleted file mode 100644 index ff411e379513b4f9fca9819225bb9ddacc0f286e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11464 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 diff --git a/HanddleAI/HandleAiUi-new/back/cameraManager.h b/HanddleAI/HandleAiUi-new/back/cameraManager.h index 1e881ac8..aa9a6795 100644 --- a/HanddleAI/HandleAiUi-new/back/cameraManager.h +++ b/HanddleAI/HandleAiUi-new/back/cameraManager.h @@ -34,7 +34,7 @@ public: while (this->isRunning() == true); } void getImgQueueSize(); - void Process(std::shared_ptr dataIn) + void captureImage(std::shared_ptr dataIn) { requestQueue.enqueue(dataIn); } @@ -109,6 +109,13 @@ public: void init(backEndManager*); ~cameraManager(); std::unordered_mapcameras;//key 相机名 + camera* getCamera(std::string cameraName) + { + auto camera = cameras.find(cameraName); + if (camera != cameras.end()) + return camera->second; + return nullptr; + } void run() { //while (1) diff --git a/HanddleAI/HandleAiUi-new/back/logmsg.cpp b/HanddleAI/HandleAiUi-new/back/logmsg.cpp index 957a8a3e..c07747b6 100644 --- a/HanddleAI/HandleAiUi-new/back/logmsg.cpp +++ b/HanddleAI/HandleAiUi-new/back/logmsg.cpp @@ -1,4 +1,4 @@ -锘� #include "logmsg.h" +锘�#include "logmsg.h" #include key_sendMsg m_key_callback = NULL; diff --git a/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp b/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp index 9b337575..9e6361b4 100644 --- a/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp @@ -2,12 +2,9 @@ #include #include #include +#include +#include -#include -#include -#include - -using namespace std; void createDirectoryIfNotExists_2(const std::string& path) { // 检查路径是否存在 if (!std::filesystem::exists(path)) { @@ -50,6 +47,8 @@ void threadManager::init(backEndManager* _backEndManagerIn) _backEndManager = _backEndManagerIn; sql = &_backEndManager->_sqlManager; _imgSaveThreadManager = _backEndManagerIn->_imgSaveThreadManager; + _triggerManager = _backEndManagerIn->_triggerManager; + _handleAiModelManager = _backEndManager->_handleAiModelManager; this->start(); } void threadManager::process() @@ -67,7 +66,7 @@ void threadManager::process() std::shared_ptr ptr = *it; if (ptr->oriImgs.size() >= ptr->imgAmountMin) { - algoFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, ALGO_Inspection, ptr))); + algoFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, processAlgo, ptr,_handleAiModelManager))); processData.push_back(ptr); it = waitImgData.erase(it); @@ -81,10 +80,12 @@ void threadManager::process() { std::shared_ptr ptr = *it; futrueIte = algoFutures.find(ptr->timeCode); - if (futrueIte->second.wait_for(zeroSec)== std::future_status::ready) + if (futrueIte->second.wait_for(zeroSec) == std::future_status::ready) { - resultData.push_back(ptr); - resultFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, &threadManager::resultHandle, this, ptr))); + bool res= futrueIte->second.get(); + //resultData.push_back(ptr); + //resultFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, &threadManager::resultHandle, this, ptr))); + std::async(std::launch::async, &threadManager::resultHandle, this, ptr); it = processData.erase(it); algoFutures.erase(futrueIte); @@ -94,19 +95,19 @@ void threadManager::process() } #pragma endregion #pragma region 等待结果并执行显示图片等操作 - for (auto it = resultData.begin(); it != resultData.end();) - { - std::shared_ptr ptr = *it; - futrueIte = resultFutures.find(ptr->timeCode); - if (futrueIte->second.wait_for(zeroSec) == std::future_status::ready) - { + //for (auto it = resultData.begin(); it != resultData.end();) + //{ + // std::shared_ptr ptr = *it; + // futrueIte = resultFutures.find(ptr->timeCode); + // if (futrueIte->second.wait_for(zeroSec) == std::future_status::ready) + // { - it = resultData.erase(it); - resultFutures.erase(futrueIte); - } - else - ++it; - } + // it = resultData.erase(it); + // resultFutures.erase(futrueIte); + // } + // else + // ++it; + //} #pragma endregion } @@ -115,13 +116,16 @@ void threadManager::resultHandle(std::shared_ptr data) //储存结果图 _imgSaveThreadManager->resSaveThread->imgDataQueue.append(data); //发送图片 - QPixmap pixmap; - cvMatToQPixMap(data->resultImgs[0], pixmap); - showImgPack* pack = new showImgPack(); - pack->img = pixmap; - pack->type = imgWidgetRes; - pack->index = data->oriShowIndex; - emit _backEndManager->sendPixmapImageWidget(pack); + if(data->resultImgs.size()>0) + { + QPixmap pixmap; + cvMatToQPixMap(data->resultImgs[0], pixmap); + showImgPack* pack = new showImgPack(); + pack->img = pixmap; + pack->type = imgWidgetRes; + pack->index = data->oriShowIndex; + emit _backEndManager->sendPixmapImageWidget(pack); + } //SQL std::vector sqlDatas; @@ -129,6 +133,10 @@ void threadManager::resultHandle(std::shared_ptr data) sqlDatas.push_back({ sqlData.first, std::to_string(sqlData.second) }); sql->addData(data->SNcode, sqlDatas); + //写入plc + for (auto writeBackStr : data->writeBackData) + _triggerManager->sendFinsMsg(writeBackStr); + //提交清理申请 detDataManager* dManager = data->dManager; data->dManager->deleteDetData(data->timeCode); @@ -143,14 +151,9 @@ void threadManager::run() } void threadManager::addTask(std::shared_ptr data) { - //{ - // CameraListCls::datastruct _struct = bridge.back.json.camera.getData(data->cameraKeyName); - // data->oriShowIndex = _struct.showIndex; - //} insertQueueMutex.lock(); insertQueue.enqueue(data); insertQueueMutex.unlock(); - //this->start(); } threadManager::~threadManager() { @@ -182,12 +185,12 @@ bool sncodeCls::clearSameSnRequestData() } return true; } -void sncodeCls::checkSnFromWaittingVec(QByteArray byte) +void sncodeCls::checkSnFromWaittingVec(QByteArray plcByte) { while (clearSameSnRequestData() == false); for (int i = 0; i < snWaittingVec.size(); i++) {//第一位是hash,第二位是index - string SN = readSnFromQByteArray(byte, snWaittingVec[i].startpos, false, true, 0); + std::string SN = readSnFromQByteArray(plcByte, snWaittingVec[i].startpos, false, true, 0); if (SN.compare(snErrorsnError))//不为空 { snResList.push_back({ snWaittingVec[i].timecode,SN,snWaittingVec[i].startpos }); @@ -199,28 +202,28 @@ void sncodeCls::checkSnFromWaittingVec(QByteArray byte) } //FINSEDIT -string sncodeCls::readSnFromQByteArray(QByteArray byte, int dmPos, +std::string sncodeCls::readSnFromQByteArray(QByteArray plcByte, int dmPos, bool highLowConversion, bool clearAfterRead, long long timeCode, int Size) { int triggerPos = (dmPos - tcpStartPos) * 2; if (triggerPos < 0) { - cout << "Read SN error,trigger is DM:" << dmPos << ",but read start at DM:" << tcpStartPos << endl; + std::cout << "Read SN error,trigger is DM:" << dmPos << ",but read start at DM:" << tcpStartPos << endl; return snErrorsnError; } QString str; - if (byte.at(triggerPos + 1) == 0 && byte.at(triggerPos) == 0) + if (plcByte.at(triggerPos + 1) == 0 && plcByte.at(triggerPos) == 0) return snErrorsnError; int snCount = 0; - while (byte.at(snCount + triggerPos) != 0 || byte.at(snCount + triggerPos + 1) != 0) + while (plcByte.at(snCount + triggerPos) != 0 || plcByte.at(snCount + triggerPos + 1) != 0) { - if (byte.at(snCount + triggerPos) == 0) + if (plcByte.at(snCount + triggerPos) == 0) { snCount++; continue; } - str += QChar(byte.at(snCount + triggerPos)); + str += QChar(plcByte.at(snCount + triggerPos)); snCount++; } if (highLowConversion == true) @@ -244,7 +247,7 @@ QString sncodeCls::snHex(QString sn) } return resultStr; } -string sncodeCls::getData(unsigned long long timeCode) +std::string sncodeCls::getData(unsigned long long timeCode) { for (int i = snResList.size() - 1; i >= 0; i--) { @@ -253,10 +256,10 @@ string sncodeCls::getData(unsigned long long timeCode) } return snErrorsnError; } -string sncodeCls::waitForSn(unsigned long long timeCode, int timeOut) +std::string sncodeCls::waitForSn(unsigned long long timeCode, int timeOut) { int cnt = 0; - string sn = getData(timeCode); + std::string sn = getData(timeCode); if (!sn.compare(snErrorsnError)) { diff --git a/HanddleAI/HandleAiUi-new/back/threadPoolManager.h b/HanddleAI/HandleAiUi-new/back/threadPoolManager.h index 5f5ae1cb..e06df734 100644 --- a/HanddleAI/HandleAiUi-new/back/threadPoolManager.h +++ b/HanddleAI/HandleAiUi-new/back/threadPoolManager.h @@ -21,7 +21,8 @@ class threadManager; class algoThread; class subThread; class detDataManager; -//class detData; +class triggerManager; + class backEndManager; class detData { @@ -37,6 +38,7 @@ public: double camera1Width = 0, camera1Height = 0; int cameraIndex = -1; //是第几次拍照 int imgAmountMin = 1; + int algoThreadIndex = -1; std::vector> sqlVec; @@ -79,22 +81,7 @@ public: //algoThreadIndex = _struct.threadIndex; //resShowIndex = _struct.showIndex; } - static std::shared_ptr CreateDetData(QString IN_cameraKeyName, QString IN_algoThreadName, - std::string IN_SN, int IN_oriShowIndex) - { - std::shared_ptr data(new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex)); - return data; - } - detData(QString IN_cameraKeyName, QString IN_algoThreadName, - std::string IN_SN, int IN_oriShowIndex) - { - cameraKeyName = IN_cameraKeyName; - algoThreadName = IN_algoThreadName; - oriShowIndex = IN_oriShowIndex; - SNcode = IN_SN; - //imgMutex = new QMutex(); - } ~detData() { for (auto img : oriImgs) @@ -107,35 +94,40 @@ class detDataManager { public: std::unordered_map>map; - - //QLinkedList detDatas; QMutex dataMutex; - //std::shared_ptr insertDetData(QString IN_cameraKeyName, QString IN_algoThreadName, - // std::string IN_SN, int IN_oriShowIndex) - //{ - // dataMutex.lock(); - // std::shared_ptr data = new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex); - // data->dManager = this; - // //detDatas.push_back(data); - // map.insert({ data->timeCode,data }); - // dataMutex.unlock(); - // std::shared_ptr dataPtr = getDetData(data->timeCode); - // - // if (dataPtr == nullptr) - // qDebug() << "创建新容器失败"; - // return dataPtr; - //} - std::shared_ptr insertDetData(QString IN_cameraKeyName, QString IN_algoThreadName, + + /* std::shared_ptr insertDetData(QString IN_cameraKeyName, QString IN_algoThreadName, std::string IN_SN, int IN_oriShowIndex) { dataMutex.lock(); std::shared_ptr data(new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex)); data->dManager = this; - //detDatas.push_back(data); map.insert({ data->timeCode,data }); dataMutex.unlock(); std::shared_ptr dataPtr = getDetData(data->timeCode); + if (dataPtr == nullptr) + qDebug() << "创建新容器失败"; + return dataPtr; + }*/ + std::shared_ptr insertDetData( + QString IN_cameraKeyName, + std::string IN_SN, + int IN_oriShowIndex, + int IN_algoThreadIndex) + { + dataMutex.lock(); + std::shared_ptr dataPtr(new detData()); + + dataPtr->cameraKeyName = IN_cameraKeyName; + dataPtr->SNcode = IN_SN; + dataPtr->oriShowIndex = IN_oriShowIndex; + dataPtr->algoThreadIndex = IN_algoThreadIndex; + + dataPtr->dManager = this; + map.insert({ dataPtr->timeCode,dataPtr }); + dataMutex.unlock(); + if (dataPtr == nullptr) qDebug() << "创建新容器失败"; return dataPtr; @@ -201,6 +193,9 @@ public: sqlManager* sql; imgSaveThreadManager* _imgSaveThreadManager; + triggerManager* _triggerManager; + handleAiModelManager* _handleAiModelManager; + QQueue> detDataQueue; autoDelete* autoDeleteThread; void init(backEndManager* _backEndManagerIn); @@ -227,11 +222,11 @@ private: std::list> processData;//处理中 std::list> resultData;//等待结果 - std::unordered_map> algoFutures; + std::unordered_map> algoFutures; std::unordered_map> resultFutures; std::chrono::seconds zeroSec = std::chrono::seconds(0); - std::unordered_map>::iterator futrueIte; + std::unordered_map>::iterator futrueIte; bool runFlag = true; QList>imgWaitList; diff --git a/HanddleAI/HandleAiUi-new/back/triggerManager.cpp b/HanddleAI/HandleAiUi-new/back/triggerManager.cpp index 06f2e39e..a724bf87 100644 --- a/HanddleAI/HandleAiUi-new/back/triggerManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/triggerManager.cpp @@ -11,21 +11,22 @@ void triggerManager::decodeCameraCMD(QByteArray byte) #if debugTesting //if (checkTrigger(1, 2, byte) == true) { - std::shared_ptr data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0); - data->correctionData = correctionData; - _threadManager->addTask(data);//添加任务 - auto camera = _cameraManager->cameras.find("123"); - if(camera != _cameraManager->cameras.end()) - camera->second->Process(data); + //std::shared_ptr data = dManager->insertDetData("Camera1" , "TEST", 0 , 0); + //data->correctionData = correctionData; + //_threadManager->addTask(data);//添加任务 + //auto camera = _cameraManager->getCamera("123"); + //if(camera != nullptr) + // camera->captureImage(data); } //if (checkTrigger(2, 2, byte) == true) { - std::shared_ptr data = dManager->insertDetData("Camera1", "Thread2", "TEST", 1); + 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)); _threadManager->addTask(data);//添加任务 - //auto camera = _cameraManager->cameras.find("456"); - //if (camera != _cameraManager->cameras.end()) - // camera->second->Process(data); + //auto camera = _cameraManager->getCamera("123"); + //if (camera != nullptr) + // camera->captureImage(data); } return; #endif diff --git a/HanddleAI/HandleAiUi-new/back/triggerManager.h b/HanddleAI/HandleAiUi-new/back/triggerManager.h index a8945385..e5247452 100644 --- a/HanddleAI/HandleAiUi-new/back/triggerManager.h +++ b/HanddleAI/HandleAiUi-new/back/triggerManager.h @@ -7,7 +7,6 @@ #include #include -using namespace std; class backEndManager; class cameraManager; class jsonConfiguration; diff --git a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h index 473823ae..593e69a9 100644 --- a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h +++ b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h @@ -4,6 +4,8 @@ #include #include #include + +#if 0 class handleAiModelBase { public: @@ -120,4 +122,47 @@ private: std::vectorgpuMutex; int gpuCnt = 1;//gpu数量 }; +#endif +class handleAiModelManager :public QObject +{ +public: + handdleAI::pSegmentation* largeSeg; + handdleAI::pClassification* largeCls; + + handdleAI::pSegmentation* midSeg; + handdleAI::pClassification* midCls; + + handdleAI::pSegmentation* smallSeg; + handdleAI::pClassification* smallCls; + + ////////模型放这里/////// + handleAiModelManager() + { + + } + ///////////END///////// + + 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); + } + ~handleAiModelManager() + { + handdleAI::DestroySegObj(largeSeg); + handdleAI::DestroySegObj(midSeg); + handdleAI::DestroySegObj(smallSeg); + + handdleAI::DestroyClsObj(largeCls); + handdleAI::DestroyClsObj(midCls); + handdleAI::DestroyClsObj(smallCls); + } + +}; #pragma once \ No newline at end of file diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.exp b/lib/Hd_3DCameraLMI_module_PointLazer.exp index c128f721899e1a2fd5f5ffe10a0335da718ee8af..b0d66668d858f227d6754c2baf6d937a46482b7c 100644 GIT binary patch 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 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 diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.lib b/lib/Hd_3DCameraLMI_module_PointLazer.lib index b506c2adaff32453f920896da4a99bad9470fc31..b04150d66d0bd6f8780c0ea27f1bb8d8c729edd8 100644 GIT binary patch delta 118 zcmaDN_(X8S0VbAz%oEN}KEiaIMV;Yu)8u~UVkRIpi(P879E$-XXW8l7S1&OzFfdI% w$s|3wh_xQ3OnveMb`Gf0$qsCBoC?-nr@ui}noYjT)&oUkH^Ptn_hnE-_7?>uX wWRjj-#99wirapNBI|o$hWCyl5&b6m&4}62FG@E>vtp}!38LD#gEOswO00)UE^Z)<= diff --git a/lib/Hd_DalsaCamera_module.exp b/lib/Hd_DalsaCamera_module.exp index d51dd3479f00019389da4252121bf314da3584cb..9d36f208e63090eb446a0a738529affa6fea9ebe 100644 GIT binary patch delta 138 zcmaFQ`kR$ArHzT1_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 diff --git a/lib/Hd_DalsaCamera_module.lib b/lib/Hd_DalsaCamera_module.lib index c271a24edcc0cf6762f83aa447cf44b73e509d54..9c451b2ec75fbfd47c5b293388f4274cb1b1aa9e 100644 GIT binary patch delta 108 zcmX>ha6({12NTP2)AOe%_b}~YQD^wvG}(taoe4U!8q3ha6({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 diff --git a/lib/Hd_FinsTcp_module.exp b/lib/Hd_FinsTcp_module.exp index 632439471feaa9f2527a170eba4dfc45d83dc2b2..53c3f41bb783174fab318e70fe59d2e91f929057 100644 GIT binary patch delta 138 zcmaFP`k9q8rHzT$S5YvIVL1OKc_gx eHyFq?G|@A*)H60VHME?3k=t^)#)ifQlkYM*F##1SGF<`yB)uAn diff --git a/lib/Hd_FinsTcp_module.lib b/lib/Hd_FinsTcp_module.lib index e7784b3ea75952388bfd4c57a0b8fb3be8e54022..f679fdae9df129fa1e4d394f63100284f9d61348 100644 GIT binary patch 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 delta 113 zcmbOrFhO8L2@@xiS>+3PMg|6s$^2|)lQ%QfvZyg+HBOFWRi7NqY{LX(_OnWD-pnk_ w$nsyM=EdYwEE8ZV^dYk4EOPCyj!oub+X0hM=5k2R&n?i)Oo3|WWoKpt0HB~E>;M1& diff --git a/lib/Hd_MvCamera_module_GENTL.exp b/lib/Hd_MvCamera_module_GENTL.exp index f0a89b553a1d128975c713a0fcafda275f8da276..588ebc79337b83ef3ecbb3be1c634dd15f386be3 100644 GIT binary patch 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 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 diff --git a/lib/Hd_MvCamera_module_GENTL.lib b/lib/Hd_MvCamera_module_GENTL.lib index 4010f0a3da11c6819056f7133313cf8a23370e79..578b535ee41c6c12f7e6ab81feeae0134eac1aaf 100644 GIT binary patch delta 118 zcmew&@I_$53?`PPzk+^Dp2M`CMV;Yu)8u&OY^Kjmo6j&?F>W$$WANntjN OGCDDRZknvfbO`{Dsv}(h delta 126 zcmey*`k9q8rHzTc1_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* diff --git a/lib/Hd_MvCamera_module_GIGE.lib b/lib/Hd_MvCamera_module_GIGE.lib index 110ae8d714ae9a153c870b6ea7d31787466ae1f1..f5ba12df64b2f2e149f3a1b7a1622e6c2dd11692 100644 GIT binary patch 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 delta 108 zcmaDN@I+w4Bqo;p>l@!pp2oC~MU5e=aq=uy^~v?jPE0`NX;!JtcbVlGS)TPV-XJB3aIQ)aT5(x04xJn+a diff --git a/lib/Hd_ResultsSummary_module.exp b/lib/Hd_ResultsSummary_module.exp index 72272a70ead1c7a3023873a763f290b25f1c8a31..59f77271cb443ce895a01c84da2ef9a0df05ac4b 100644 GIT binary patch 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 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 diff --git a/lib/Hd_ResultsSummary_module.lib b/lib/Hd_ResultsSummary_module.lib index 8baafc1c7adb77e35051dfe8ea37dc3b629b4297..ff33633f3db52aec9c9ccb88fc9c624c2109a9d1 100644 GIT binary patch delta 117 zcmew&@I_$53?}BnwZ|vVW;(#4&hWWuay)Z3)90qmXPB)RIsaXl@bDA^0|V3Kg-p_u ywOGqxO4KKxVdVfSn|y{@YVrrxI8L`KOHaRpsx+J2%hm!@sf`}O0&tmY%MUA$_SOxn`7C<83B{oC#(Pf diff --git a/lib/Hd_SocketModule_ModbusTcp.exp b/lib/Hd_SocketModule_ModbusTcp.exp index 25890329510762a3f51d55c44ebc1ed66568465a..b96d9533757cd14f5748dc1def33ee7aa2d64350 100644 GIT binary patch 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{ delta 109 zcmaFKeV3avrHzTQM!u=t^)#)ifQlm9b4W6EmW J{G6GI2>@mTAnyPG diff --git a/lib/Hd_SocketModule_ModbusTcp.lib b/lib/Hd_SocketModule_ModbusTcp.lib index b3ff8f19c2b7f22a232105edac9723e1a30fca2a..7d987e797c1925944487933e8b6ed09e14a3773c 100644 GIT binary patch delta 108 zcmew+^-XHSI~GpM+Y9dLGcqu6Oy0<0Hd&Xol|`N5bJHXa^~rZxU6?*MO*Z6^+HA|F w%*Z-jM&-ik$!j^}C%3RyKvn5ORFt#4P6>N7c@4(_u=wNxPHmXh?VS6W0bcJXg#Z8m delta 108 zcmew+^-XHSI~LA!vnzk