This commit is contained in:
2024-08-13 18:09:53 +08:00
19 changed files with 1571 additions and 128 deletions
@@ -115,7 +115,14 @@ void ALGO_Inspection(std::shared_ptr <detData> data, handleAiModelManager* _hand
case 5://STARGAZER
halconImgResult.push_back(stargazerHalconAlgo(data, src(BboxToRect(connector))));
data->handleAiEndTime = std::chrono::high_resolution_clock::now();
aiImgResult.push_back(stargazerHandleAiAlgo(data, _handleAiModelManager));
aiImgResult.push_back(stargazerHandleAiAlgo(data, src(BboxToRect(connector)), _handleAiModelManager));
data->halconEndTime = std::chrono::high_resolution_clock::now();
tempCompared = true;
break;
case 6://STARGAZER HUGE
halconImgResult.push_back(stargazerHalconAlgo(data, src(BboxToRect(connector))));
data->handleAiEndTime = std::chrono::high_resolution_clock::now();
aiImgResult.push_back(stargazerHandleAiAlgo(data, src(BboxToRect(connector)), _handleAiModelManager));
data->halconEndTime = std::chrono::high_resolution_clock::now();
break;
case 1://APEX SMALL
@@ -23,6 +23,7 @@ bool processAlgo(std::shared_ptr <detData> 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;
@@ -90,10 +90,10 @@ static cv::Mat stargazerHalconAlgo(std::shared_ptr<detData>data, cv::Mat& src)
}
//输入det切出的连接器图片
static cv::Mat stargazerHandleAiAlgo(std::shared_ptr<detData>data, handleAiModelManager* _handleAiModelManager)
static cv::Mat stargazerHandleAiAlgo(std::shared_ptr<detData>data, cv::Mat& src, handleAiModelManager* _handleAiModelManager)
{
handleAiModelSeg* segPtr = _handleAiModelManager->getSegModel("APEX-Seg");
handleAiModelCls* clsPtr = _handleAiModelManager->getClsModel("APEX-Cls");
return cv::Mat();
return src;
}
#pragma once
@@ -706,6 +706,15 @@ struct rectAndData
//平铺图像
static cv::Mat tiledImages(std::vector<cv::Mat>& imgs)
{
if (imgs.size() == 0)
return cv::imread("./noimg.png",-1);
if (imgs.size() == 1)
return imgs[0];
for (auto& img : imgs)
{
if (img.channels() == 1)
cv::cvtColor(img, img, cv::COLOR_GRAY2BGR);
}
//总图像大小 平铺显示
int matWidth = 0, matHeight = 0;
for (auto& mat : imgs)
+1 -1
View File
@@ -84,7 +84,7 @@ public:
std::vector<std::string>imgSaveFileParameter;//命名规则 str1_str2... 第一个参数已默认为相机名,在构造函数
//需要存入的SQL数据
std::vector<std::pair<std::string, double>> sqlVec;
std::vector<std::pair<std::string, std::string>> sqlVec;
detData(std::string IN_cameraKeyName)
{
cameraKeyName = IN_cameraKeyName;
+17 -7
View File
@@ -273,6 +273,8 @@ public:
//检测结果处理
void detectionResultHandle(std::shared_ptr<detData>data)
{
data->sqlVec.push_back({ "SN",data->SNcode });
data->sqlVec.push_back({ "ARMPOS",std::to_string(data->armPos)});
//发送图片
if (data->resultImgs.size() > 0)
{
@@ -306,25 +308,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<std::chrono::milliseconds>(data->halconEndTime - data->algoStartTime);
@@ -336,11 +339,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<sqlData> 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
@@ -378,5 +383,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
+4
View File
@@ -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); });
@@ -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;