diff --git a/Doc/交互逻辑.xls b/Doc/交互逻辑.xls index d6fb30bf..0dfe195a 100644 Binary files a/Doc/交互逻辑.xls and b/Doc/交互逻辑.xls differ diff --git a/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h b/HanddleAI/HandleAiUi-new/algo/ALGO_Inspection.h index 822fd6e3..3ad7276b 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); diff --git a/HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h b/HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h index 437b60f0..29287504 100644 --- a/HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h +++ b/HanddleAI/HandleAiUi-new/algo/ALGO_MAIN.h @@ -23,6 +23,7 @@ bool processAlgo(std::shared_ptr data, handleAiModelManager* _handleAi catch (const std::exception& e) { std::cerr << "Caught exception: " << e.what() << std::endl; + std::cout << "Caught exception: " << e.what() << std::endl; return false; } return false; 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/algo/simpleAlgo.h b/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h index 778229e7..50b77585 100644 --- a/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h +++ b/HanddleAI/HandleAiUi-new/algo/simpleAlgo.h @@ -706,6 +706,10 @@ struct rectAndData //ƽÆÌͼÏñ static cv::Mat tiledImages(std::vector& imgs) { + if (imgs.size() == 0) + return cv::imread("./noimg.png",-1); + if (imgs.size() == 1) + return imgs[0]; //×ÜͼÏñ´óС ƽÆÌÏÔʾ int matWidth = 0, matHeight = 0; for (auto& mat : imgs) diff --git a/HanddleAI/HandleAiUi-new/back/detData.h b/HanddleAI/HandleAiUi-new/back/detData.h index 23577b81..6f010672 100644 --- a/HanddleAI/HandleAiUi-new/back/detData.h +++ b/HanddleAI/HandleAiUi-new/back/detData.h @@ -84,7 +84,7 @@ public: std::vectorimgSaveFileParameter;//ÃüÃû¹æÔò str1_str2... µÚÒ»¸ö²ÎÊýÒÑĬÈÏΪÏà»úÃû£¬ÔÚ¹¹Ô캯Êý //ÐèÒª´æÈëµÄSQLÊý¾Ý - std::vector> sqlVec; + std::vector> sqlVec; detData(std::string IN_cameraKeyName) { cameraKeyName = IN_cameraKeyName; diff --git a/HanddleAI/HandleAiUi-new/detProcess.hpp b/HanddleAI/HandleAiUi-new/detProcess.hpp index afeec8aa..8314b959 100644 --- a/HanddleAI/HandleAiUi-new/detProcess.hpp +++ b/HanddleAI/HandleAiUi-new/detProcess.hpp @@ -259,6 +259,8 @@ public: //¼ì²â½á¹û´¦Àí void detectionResultHandle(std::shared_ptrdata) { + data->sqlVec.push_back({ "SN",data->SNcode }); + data->sqlVec.push_back({ "ARMPOS",std::to_string(data->armPos)}); //·¢ËÍͼƬ if (data->resultImgs.size() > 0) { @@ -292,25 +294,26 @@ public: emit _core._qtFunc.addDashBoardData(1, data->aiDetOK); emit _core._qtFunc.uiModuleLocationMap_SetProductSignStatus(data->armPos, (data->halconOK==true&& data->aiDetOK==true)?2:3); - bool finalOk = (data->halconOK == true || data->aiDetOK == true)? true :false; - if(finalOk=false) + bool finalOk = (data->halconOK == true && data->aiDetOK == true); + if(finalOk == false) { - for (auto showMat : data->resultImgs) + for (auto& showMat : data->resultImgs) { QPixmap pixmap; cvMatToQPixMap(showMat, pixmap); - showImgPack* pack = new showImgPack(); + //showImgPack* pack = new showImgPack(); emit _core._qtFunc.uiModuleImageDoubleCheckQdialog_ShowWindows(pixmap); } } auto productData = _core._productDataCache.get(currentSn); - if (finalOk = false) + if (finalOk == false) productData->ngCount++; perConnector _perConnectorData; _perConnectorData.aiOk = data->aiDetOK; _perConnectorData.halconOk = data->halconOK; _perConnectorData.maxPinDetValue = data->maxPinDetValue; productData->connectorResults.push_back(_perConnectorData); + data->sqlVec.push_back({ "Result",std::to_string(finalOk)}); } //ct¼ÆËãÒÔ¼°·¢Ë͵½½çÃæ auto totalCt = std::chrono::duration_cast(data->halconEndTime - data->algoStartTime); @@ -322,11 +325,13 @@ public: emit _core._qtFunc.addCtData(1, aiCt.count()); if (halconCt.count() > 0) emit _core._qtFunc.addCtData(2, halconCt.count()); - + data->sqlVec.push_back({ "totalCt",std::to_string(totalCt.count()) }); + data->sqlVec.push_back({ "aiCt",std::to_string(aiCt.count()) }); + data->sqlVec.push_back({ "halconCt",std::to_string(halconCt.count()) }); //SQL std::vector sqlDatas; for (auto sqlData : data->sqlVec) - sqlDatas.push_back({ sqlData.first, std::to_string(sqlData.second) }); + sqlDatas.push_back({ sqlData.first, sqlData.second }); _core._appConfig._sqlManager.addData(data->SNcode, sqlDatas); //дÈëplc @@ -364,5 +369,10 @@ public slots: _triggerManager.sendFinsMsg("write_short_350_" + QString::number(_core._appConfig.productDatas[productTypeIn].indexOfArm)); _triggerManager.sendFinsMsg("write_short_351_1"); } + //È˹¤¸´Å̰´ÏÂNG + void uiModuleImageDoubleCheckQdialog_pressNG() + { + _triggerManager.sendFinsMsg("write_short_363_1"); + } }; #pragma once \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/main.cpp b/HanddleAI/HandleAiUi-new/main.cpp index a80d82d5..659ab3c9 100644 --- a/HanddleAI/HandleAiUi-new/main.cpp +++ b/HanddleAI/HandleAiUi-new/main.cpp @@ -107,8 +107,12 @@ void connectSignalAndSlots(MainWindow* front, appCore* _core, detProcess* _detPr front->_displayWidget->_uiModuleLocationMap, &uiModuleLocationMap::resetToDefault); QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleLocationMap_SetProductSignStatus, front, &MainWindow::uiModuleLocationMapSetProductSignStatus); + //uiModuleImageDoubleCheckQdialog QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleImageDoubleCheckQdialog_ShowWindows, front, [=](QPixmap map) {front->_imageDoubleCheckQdialog->showAndSetImg(map); }); + QObject::connect(front->_imageDoubleCheckQdialog,&imageDoubleCheckQdialog::ngSignal, + _detProcess, &detProcess::uiModuleImageDoubleCheckQdialog_pressNG); + //uiModuleSummaryDataManager QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleSummaryDataManager_SetSummaryResultText, front, [=](QString text, Qt::GlobalColor color) {front->_displayWidget->_summaryDataManager->setSummaryResult(text, color); }); diff --git a/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h b/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h index 9025dd05..3d966ba1 100644 --- a/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h +++ b/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageDoubleCheckQdialog.h @@ -17,6 +17,8 @@ public: QPushButton* closeBtn = new QPushButton(this); fancyButtonText* okBtn = new fancyButtonText(120, 40, "OK", "¼ÌÐø"); fancyButtonText* ngBtn = new fancyButtonText(120, 40, "NG", "¼ÌÐø"); + QMutex mutex; + QQueue< QPixmap>imgqueue; imageDoubleCheckQdialog() { QPalette paletteWhite, paletteRed, paletteGreen; @@ -81,21 +83,21 @@ public: menuBarLayoutRight->addWidget(closeBtn); QObject::connect(closeBtn, &QPushButton::clicked, this, &QDialog::close); - + QHBoxLayout* imageViewLayout = new QHBoxLayout(); imageViewLayout->addWidget(_ImageWidgetManager); _ImageWidgetManager->createViewer(""); _ImageWidgetManager->disableAllSwitchBtn(); - + QHBoxLayout* okngBtnLayout = new QHBoxLayout(); okngBtnLayout->addWidget(okBtn); okngBtnLayout->addWidget(ngBtn); - QObject::connect(okBtn, &QPushButton::clicked, this, &QDialog::close); - QObject::connect(ngBtn, &QPushButton::clicked, this, &QDialog::close); - QObject::connect(okBtn, &QPushButton::clicked, this, [=]() {emit okSignal(); }); - QObject::connect(ngBtn, &QPushButton::clicked, this, [=]() {emit ngSignal(); }); + //QObject::connect(okBtn, &QPushButton::clicked, this, &QDialog::close); + //QObject::connect(ngBtn, &QPushButton::clicked, this, &QDialog::close); + QObject::connect(okBtn, &QPushButton::clicked, this, [=]() {pressOK(); }); + QObject::connect(ngBtn, &QPushButton::clicked, this, [=]() {pressNG(); }); layout->addWidget(menuBarWidget, 0, 0); layout->addLayout(imageViewLayout, 1, 0); @@ -105,13 +107,57 @@ public: } void showAndSetImg(QPixmap img) { - _ImageWidgetManager->showImg(img, imgWidgetShowType::imgWidgetOri, 0); - this->show(); + mutex.lock(); + std::cout << isShowing<<"-" << imgqueue.size()<< std::endl; + if (isShowing == false && imgqueue.size() == 0) + { + _ImageWidgetManager->showImg(img, imgWidgetShowType::imgWidgetOri, 0); + this->show(); + isShowing = true; + } + else + { + imgqueue.enqueue(img); + } + mutex.unlock(); } signals: void okSignal(); void ngSignal(); private: + void pressOK() + { + mutex.lock(); + emit okSignal(); + if (imgqueue.size() > 0) + { + QPixmap img = imgqueue.dequeue(); + _ImageWidgetManager->showImg(img, imgWidgetShowType::imgWidgetOri, 0); + } + else + { + isShowing = false; + close(); + } + mutex.unlock(); + } + void pressNG() + { + mutex.lock(); + emit ngSignal(); + if (imgqueue.size() > 0) + { + QPixmap img = imgqueue.dequeue(); + _ImageWidgetManager->showImg(img, imgWidgetShowType::imgWidgetOri, 0); + } + else + { + isShowing = false; + close(); + } + mutex.unlock(); + } + bool isShowing = false; bool isMoving = false; bool isResizing = false; int minWidth = 720, minHeight = 480; diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.exp b/lib/Hd_3DCameraLMI_module_PointLazer.exp index d8e955a0..97d8b87b 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..36c75b14 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..ab118790 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..cc2d36e5 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..05dc8bab 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..a50e177e 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..cd7a0985 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..a65c613a 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..564b8062 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..b1396b9b 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..1880b09b 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..a61fbd40 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..f9780641 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..5ec47732 100644 Binary files a/lib/Hd_SocketModule_ModbusTcp.lib and b/lib/Hd_SocketModule_ModbusTcp.lib differ