diff --git a/HanddleAI/HandleAiUi-new/CMakeLists.txt b/HanddleAI/HandleAiUi-new/CMakeLists.txt index d1ffb1f6..54ef9b00 100644 --- a/HanddleAI/HandleAiUi-new/CMakeLists.txt +++ b/HanddleAI/HandleAiUi-new/CMakeLists.txt @@ -110,7 +110,9 @@ else() ${ALGO_SRC_FILES} ${UI_FILES} "ff.rc" "icon.qrc" "uiModule/uiModule_switchProduct.h") else() - add_executable( ${CURRENT_FOLDER} WIN32 + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG") + add_executable( ${CURRENT_FOLDER} ${HEAD_FILES} ${SRC_FILES} ${BACK_HEAD_FILES} diff --git a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h index 458c885d..dde5793a 100644 --- a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h +++ b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h @@ -323,6 +323,41 @@ void pinHalconEvaluate(std::vector& Result,cv::Mat& src, cv::Mat& Pain } } +cv::Mat pinDetEvaluate(cv::Mat& src, handleAiModelManager* _handleAiModelManager) +{ + cv::Mat resultImg; + std::vector result; + _handleAiModelManager->smalDet->Evaluate(src, result); + cv::Point centerPos(src.rows/2, src.cols/2); + std::vector targets; + cv::Rect targetRect(src.cols / 4, src.rows / 4, src.cols / 2, src.rows / 2); + for (auto detResult : result) + { + //cv::Rect rect(detResult.x - detResult.w / 2, detResult.y - detResult.h / 2, detResult.w, detResult.h); + if ((detResult.x< targetRect.x || detResult.x > targetRect.x + targetRect.width || + detResult.y < targetRect.y || detResult.y > targetRect.y + targetRect.height)==false) + { + targets.push_back(detResult); + } + } + + cv::Rect resultRect(INT_MAX,INT_MAX,INT_MIN,INT_MIN); + int targetSize = targets.size(); + std::cout << targetSize; + for (auto detResult : targets) + { + resultRect.x = min(resultRect.x, detResult.x - detResult.w / 2); + resultRect.y = min(resultRect.y, detResult.y - detResult.h / 2); + } + for (auto detResult : targets) + { + resultRect.width = max(resultRect.width, detResult.w/2 + detResult.x - resultRect.x); + resultRect.height = max(resultRect.height, detResult.h/2 + detResult.y - resultRect.y); + } + + return src(resultRect); +} + void ALGO_Inspection(std::shared_ptr data, handleAiModelManager* _handleAiModelManager) { if (data->oriImgs.size() < 1) @@ -331,48 +366,51 @@ void ALGO_Inspection(std::shared_ptr data, handleAiModelManager* _hand return; } cv::Mat src = data->oriImgs[0]; + //DET + cv::Mat detResult = pinDetEvaluate(src, _handleAiModelManager); + cv::Mat Paint; - cvtColor(src, Paint, cv::COLOR_GRAY2BGR); + cvtColor(detResult, Paint, cv::COLOR_GRAY2BGR); std::vectorhalconResult; //hv_in_Parameter //[0]-产品种类; 1A正面 2A反面 3B正面 4C正面 int productType = 3; //[1]-图像序号第一位; - int pinRow = data->armPos / 2; + int pinRow = 1; //[2]-图像序号第二位; - int pinCol = data->armPos % 2; + int pinCol = 0; //[3]-3d相机精度(mm); //[4]-ping针偏移判NG阈值(mm); //[5]-切图存图开关 - + //HALCON - pinHalconEvaluate(halconResult,src, Paint, productType, pinRow, pinCol); + pinHalconEvaluate(halconResult, detResult, Paint, productType, pinRow, pinCol); //HANDLEAI switch(productType) { case 0: - pinHandleAiEvaluate(data, src(halconResult[0]), Paint(halconResult[0]), + pinHandleAiEvaluate(data, detResult, Paint, _handleAiModelManager->largeSeg, _handleAiModelManager->largeCls); break; case 1://3 p - pinHandleAiEvaluate(data, src(halconResult[0]), Paint(halconResult[0]), + pinHandleAiEvaluate(data, detResult, Paint, _handleAiModelManager->largeSeg, _handleAiModelManager->largeCls); break; case 2://2 - pinHandleAiEvaluate(data, src(halconResult[0]), Paint(halconResult[0]), + pinHandleAiEvaluate(data, detResult, Paint, _handleAiModelManager->midSeg, _handleAiModelManager->midCls); break; case 3://1 - pinHandleAiEvaluate(data, src(halconResult[0]), Paint(halconResult[0]), + pinHandleAiEvaluate(data, detResult, Paint, _handleAiModelManager->smallSeg, _handleAiModelManager->smallCls); break; } //rectangle(Paint, halconResult[0], cv::Scalar(0, 0, 255), 4); //set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") - data->resultImgs.push_back(src(halconResult[0]).clone());//切下来的原图 - data->resultImgs.push_back(Paint(halconResult[0]).clone());//AI检测结果 + // data->resultImgs.push_back(detResult.clone());//切下来的原图 + data->resultImgs.push_back(Paint.clone());//AI检测结果 _sleep(100); } diff --git a/HanddleAI/HandleAiUi-new/back/backEndManager.cpp b/HanddleAI/HandleAiUi-new/back/backEndManager.cpp index 79f4c544..b5f2cec1 100644 --- a/HanddleAI/HandleAiUi-new/back/backEndManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/backEndManager.cpp @@ -77,10 +77,13 @@ backEndManager::~backEndManager() } -void backEndManager::startManualDetSlot(cv::Mat mats, int algoIndex) +void backEndManager::startManualDetSlot(cv::Mat* mats, int algoIndex) { std::shared_ptr data = _detDataManager->insertDetData("Manual", "Manual", 0, 1); - data->oriImgs.push_back(mats); + data->oriImgMutex.lock(); + data->oriImgs.push_back(mats->clone()); + data->oriImgMutex.unlock(); + delete mats; _threadManager->addTask(data);//添加任务 } \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/backEndManager.h b/HanddleAI/HandleAiUi-new/back/backEndManager.h index 1ad584b9..37180c31 100644 --- a/HanddleAI/HandleAiUi-new/back/backEndManager.h +++ b/HanddleAI/HandleAiUi-new/back/backEndManager.h @@ -40,7 +40,7 @@ public slots: this->start(); //std::async(std::launch::async, &backEndManager::run, this); } - void startManualDetSlot(cv::Mat mats, int algoIndex); + void startManualDetSlot(cv::Mat* mats, int algoIndex); private: void run(); signals: diff --git a/HanddleAI/HandleAiUi-new/back/imgSaveThreadManager.h b/HanddleAI/HandleAiUi-new/back/imgSaveThreadManager.h index 47baec75..03a9d6c9 100644 --- a/HanddleAI/HandleAiUi-new/back/imgSaveThreadManager.h +++ b/HanddleAI/HandleAiUi-new/back/imgSaveThreadManager.h @@ -73,35 +73,34 @@ public: std::string fileName; for (auto str : data->imgSaveFileParameter) fileName += str + "_"; + std::string segClsDirName; switch (type) { case oriImgSaveThread: for (int i = 0; i < data->oriImgs.size(); i++) { - fileName += getCurrentDateTime() + "_Count" + std::to_string(i) + ".bmp"; - cv::imwrite(fileSavePath + fileName, data->oriImgs[i]); + cv::imwrite(fileSavePath + fileName + getCurrentDateTime() + "_Count" + std::to_string(i) + ".bmp", data->oriImgs[i]); qInfo() << QString::fromStdString(data->cameraKeyName + " ori:" + fileSavePath + fileName); } break; case resImgSaveThread: for (int i = 0; i < data->resultImgs.size(); i++) { - fileName += getCurrentDateTime() + "_Count" + std::to_string(i) + ".jpg"; - cv::imwrite(fileSavePath + fileName, data->resultImgs[i]); + cv::imwrite(fileSavePath + fileName + getCurrentDateTime() + "_Count" + std::to_string(i) + ".jpg", data->resultImgs[i]); qInfo() << QString::fromStdString(data->cameraKeyName + " ori:" + fileSavePath + fileName); } //保存seg原图和cls原图 - createDirectoryIfNotExists(fileSavePath+"detImgs//");//文件夹处理 + segClsDirName = fileSavePath + "detImgs//"+ getCurrentDateTime()+"//"; + createDirectoryIfNotExists(segClsDirName);//文件夹处理 for (int i = 0; i < data->segOriginImgs.size(); i++) { - fileName += getCurrentDateTime() + "_SEG_Count" + std::to_string(i) + ".bmp"; - cv::imwrite(fileSavePath + "detImgs//" + fileName, data->segOriginImgs[i]); + ; + cv::imwrite(segClsDirName + fileName + "SEG_Count_" + getCurrentDateTime() + "_" + std::to_string(i) + ".bmp", data->segOriginImgs[i]); //qInfo() << QString::fromStdString(data->cameraKeyName + " ori:" + fileSavePath + fileName); } for (int i = 0; i < data->clsOriginImgs.size(); i++) { - fileName += getCurrentDateTime() + "_CLS_RES_"+ std::to_string(data->clsOriginImgs[i].second) + "_Count" + std::to_string(i) + ".bmp"; - cv::imwrite(fileSavePath + "detImgs//" + fileName, data->clsOriginImgs[i].first); + cv::imwrite(segClsDirName + fileName + "CLS_RES" + getCurrentDateTime() + "_" + std::to_string(data->clsOriginImgs[i].second) + "_Count" + std::to_string(i) + ".bmp", data->clsOriginImgs[i].first); //qInfo() << QString::fromStdString(data->cameraKeyName + " ori:" + fileSavePath + fileName); } break; diff --git a/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.cpp b/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.cpp index 9da7c375..a6a576c5 100644 --- a/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.cpp +++ b/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.cpp @@ -10,7 +10,7 @@ void manualDetThread::run() fileManager::getAllFiles(imgPathStr, files, "jpg"); for (auto file : files) { - emit startManualDetSignal(cv::imread(file), algoIndex); + emit startManualDetSignal(new cv::Mat(cv::imread(file,-1)), algoIndex); //mats.push_back(std::shared_ptr(std::make_shared(cv::imread(file)))); logWidget->append(u8"检测到图片:" + QString::fromStdString(file)); } diff --git a/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.h b/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.h index 8a75e9c6..19bb6842 100644 --- a/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.h +++ b/HanddleAI/HandleAiUi-new/front/pages/manualDetWidget.h @@ -27,7 +27,7 @@ public slots: void manualDetSlot(); signals: void finishImgReadSignal(); - void startManualDetSignal(cv::Mat,int); + void startManualDetSignal(cv::Mat*,int); }; class manualDetWidget : public QWidget { @@ -130,6 +130,10 @@ public: connect(startEvaluateBtn, &QPushButton::clicked, this, [=]() {startEvaluateBtn->setDisabled(true); }); connect(_manualDetThread, &manualDetThread::finishImgReadSignal,this, &manualDetWidget::finishImgReadSlot); } + ~manualDetWidget() + { + delete _manualDetThread; + } public slots: void finishImgReadSlot() { diff --git a/HanddleAI/HandleAiUi-new/globalStruct.h b/HanddleAI/HandleAiUi-new/globalStruct.h index ee9f7627..a7a0ea9a 100644 --- a/HanddleAI/HandleAiUi-new/globalStruct.h +++ b/HanddleAI/HandleAiUi-new/globalStruct.h @@ -17,7 +17,7 @@ #define sColor_Black "22, 22, 22" #define sColor_BlackWithWhite "45, 45, 45" -#define enableHandleAiModel 0 +#define enableHandleAiModel 1 #define disableBackEndCheck 1 //绐楀彛璁剧疆 @@ -105,5 +105,5 @@ static std::string getFileName(std::string path) return path.substr(path.find_last_of("\\") + 1, path.find_last_of(".") - path.find_last_of("\\") - 1); } Q_DECLARE_METATYPE(imgWidgetShowType) -Q_DECLARE_METATYPE(cv::Mat) +Q_DECLARE_METATYPE(cv::Mat*) #pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h index 8fc4c4bd..56dfe606 100644 --- a/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h +++ b/HanddleAI/HandleAiUi-new/handleAi/handleAiModel.h @@ -86,7 +86,7 @@ public: }; void init() { - detPtr = handdleAI::CreateDetObjS((char*)path.c_str(), gpuIndex, 1); + detPtr = handdleAI::CreateDetObjS((char*)path.c_str(), 1, gpuIndex); } bool destroy() { @@ -124,23 +124,24 @@ public: gpuMutex = std::vector(gpuCnt, new std::mutex()); #if enableHandleAiModel 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]); + 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]); segModels.push_back(largeSeg); segModels.push_back(midSeg); segModels.push_back(smallSeg); - largeCls = new handleAiModelCls("./HandleAiModels/large-cls.BHD", gpu1, gpuMutex[gpu1]); - midCls = new handleAiModelCls("./HandleAiModels/mid-cls.BHD", gpu1, gpuMutex[gpu1]); + 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); - + smalDet = new handleAiModelDet("./HandleAiModels/small_det.BHD", gpu1, gpuMutex[gpu1]); + detModels.push_back(smalDet); #endif } ///////////END///////// @@ -151,6 +152,7 @@ public: #if enableHandleAiModel std::vector> futuresSeg; std::vector> futuresCls; + std::vector> futuresDet; for(auto model: segModels) { futuresSeg.push_back(std::async(std::launch::async, &handleAiModelSeg::init, model)); @@ -163,7 +165,7 @@ public: } for (auto model : detModels) { - futuresCls.push_back(std::async(std::launch::async, &handleAiModelDet::init, model)); + futuresDet.push_back(std::async(std::launch::async, &handleAiModelDet::init, model)); emit _backEndManagerIn->sendInitString(QString::fromStdString(getFileName(model->path) + "初始化中...")); } @@ -184,7 +186,7 @@ public: } int detCls = 0; - for (auto& func : detModels) + for (auto& func : futuresDet) { func.wait(); emit _backEndManagerIn->sendInitString(QString::fromStdString(getFileName(detModels[detCls]->path) + "成功")); diff --git a/HanddleAI/HandleAiUi-new/main.cpp b/HanddleAI/HandleAiUi-new/main.cpp index 9d3c6884..b9ad4ffe 100644 --- a/HanddleAI/HandleAiUi-new/main.cpp +++ b/HanddleAI/HandleAiUi-new/main.cpp @@ -45,7 +45,7 @@ int main(int argc, char* argv[]) ////////// qRegisterMetaType("imgWidgetShowType"); qRegisterMetaType("showImgPack"); - qRegisterMetaType("mat"); + qRegisterMetaType("matPtr"); MainWindow w; w.show(); diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.exp b/lib/Hd_3DCameraLMI_module_PointLazer.exp index d8e955a0..4d888b40 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..aa3d9ca6 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..57851410 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..baf006bd 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..3f62ab5a 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..d575f63f 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..525105f5 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