From 2c715bdb3a28d52cf745fb931c920ae313b17565 Mon Sep 17 00:00:00 2001 From: qushuailong Date: Fri, 2 Jul 2021 14:13:22 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=BD=93=E6=9F=90=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=B8=8D=E5=8A=A0=E5=85=A5=E8=AE=AD=E7=BB=83=EF=BC=8C=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=8B=BE=E9=80=89=E5=88=97=E8=A1=A8=E4=B8=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=AD=A4=E6=A8=A1=E6=9D=BF=EF=BC=8C=E5=A6=82=E6=9E=9C?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E5=B7=A5=E5=8D=95=E9=87=8C=E5=8B=BE=E9=80=89?= =?UTF-8?q?=E4=BA=86=E6=AD=A4=E6=A8=A1=E6=9D=BF=EF=BC=8C=E5=88=99=E5=B0=86?= =?UTF-8?q?=E6=AD=A4=E6=A8=A1=E6=9D=BF=E5=89=94=E9=99=A4=E3=80=82=202.?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E6=9C=AA=E7=BC=A9=E7=95=A5=E5=9B=BE=EF=BC=8C?= =?UTF-8?q?=E5=B0=86=E8=8B=B1=E6=96=87=E7=95=8C=E9=9D=A2=E4=B8=8A=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E9=81=97=E7=95=99=E4=B8=AD=E6=96=87=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E8=8B=B1=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3part/tadpole/include/tpBase/baseStruct.h | 2 + runner17/language/English/lpmain_en.qm | Bin 45763 -> 46182 bytes runner17/language/English/rastersdg20_en.qm | Bin 23 -> 13614 bytes runner17/language/English/tpmain_en.qm | Bin 60453 -> 0 bytes src/algorithm/AlgorithmFluorescence.cpp | 8 +- src/tpMain/IWheelCtrl.h | 1 + src/tpMain/ModelManager.cpp | 13 + src/tpMain/ModelManager.h | 1 + src/tpMain/QWorkMgrCtlr.cpp | 14 +- src/tpMain/QWorkMgrCtlr.h | 1 + src/tpMain/WheelCtrl.cpp | 5 + src/tpMain/WheelCtrl.h | 1 + src/tpMain/none.jpg | Bin 16990 -> 3962 bytes src/tpMain/qworkmgrui.cpp | 18 +- src/tpMain/qworkmgrui.h | 1 + tpvs17/RasterSDG20/rastersdg20_en.ts | 158 ++++---- tpvs17/tpMain/QModelMgrDlg.cpp | 23 +- tpvs17/tpMain/QModelMgrDlg.h | 6 + tpvs17/tpMain/lpMainWin.cpp | 22 +- tpvs17/tpMain/lpMainWin.h | 1 + tpvs17/tpMain/lpmain_en.ts | 410 ++++++++++---------- tpvs17/tpMain/lpmain_zh.ts | 380 +++++++++--------- 22 files changed, 601 insertions(+), 464 deletions(-) delete mode 100644 runner17/language/English/tpmain_en.qm diff --git a/3part/tadpole/include/tpBase/baseStruct.h b/3part/tadpole/include/tpBase/baseStruct.h index ab7894a..9c3c12f 100644 --- a/3part/tadpole/include/tpBase/baseStruct.h +++ b/3part/tadpole/include/tpBase/baseStruct.h @@ -5,6 +5,8 @@ #include "baseConstant.h" #include "iAlgorithm.h" +#include + typedef struct tagTP_CORE_SETTING{ int threadsCount; int imageShowType; diff --git a/runner17/language/English/lpmain_en.qm b/runner17/language/English/lpmain_en.qm index a1f211ebaf525d427891d2b538613df69917e3c0..fec61811170a603993fc61ed0c2965433bafc0c4 100644 GIT binary patch delta 4167 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 delta 3688 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 G`2PWs-7%g3 diff --git a/runner17/language/English/rastersdg20_en.qm b/runner17/language/English/rastersdg20_en.qm index 9dad8dffceb9623e88f8b96d9cd0caf25574c6fa..c2fc514d396df174d3feca054e009f6e40faeca3 100644 GIT binary patch literal 13614 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 diff --git a/src/algorithm/AlgorithmFluorescence.cpp b/src/algorithm/AlgorithmFluorescence.cpp index ba7b797..46b8de8 100644 --- a/src/algorithm/AlgorithmFluorescence.cpp +++ b/src/algorithm/AlgorithmFluorescence.cpp @@ -161,11 +161,11 @@ QString CAlgorithmFluorescence::bestMatch(const QMap* mod if (innerCircleNumSum > 1) { QStringList modelList = pLocal->defectList; - QString modelName = modelList.takeFirst(); bool bFind = false; while (modelList.size()) { - if (modelName == hubName1) + QString modelName = modelList.takeFirst(); + if (modelName == hubName2) { bestName = hubName2; bFind = true; @@ -174,7 +174,7 @@ QString CAlgorithmFluorescence::bestMatch(const QMap* mod } if (!bFind) { - bestName = QString(); + // bestName = QString(); } } } @@ -196,7 +196,7 @@ QString CAlgorithmFluorescence::bestMatch(const QMap* mod } if (!bFind) { - bestName = QString(); + // bestName = QString(); } } } diff --git a/src/tpMain/IWheelCtrl.h b/src/tpMain/IWheelCtrl.h index 66f2930..13bdeab 100644 --- a/src/tpMain/IWheelCtrl.h +++ b/src/tpMain/IWheelCtrl.h @@ -31,6 +31,7 @@ public: virtual QString appRoot() const = 0; virtual ModelManager *getModelMgr() const = 0; virtual QStringList getAllModelName() = 0; + virtual QStringList getAllTrainModelName() = 0; virtual CChannelInfo *getChannelInfo() const = 0; virtual TimeMgrCtrl *getTimeMgr() const = 0; virtual QMap* getAllTimePtr() const = 0; diff --git a/src/tpMain/ModelManager.cpp b/src/tpMain/ModelManager.cpp index 83f72da..1435e39 100644 --- a/src/tpMain/ModelManager.cpp +++ b/src/tpMain/ModelManager.cpp @@ -164,6 +164,19 @@ QStringList ModelManager::getAllModelName() return m_mpModels.keys(); } +//得到所有加入训练的模板名 +QStringList ModelManager::getAllTrainModelName() +{ + QStringList allTrainModelNameList; + for each (IWheelModel* var in m_mpModels) + { + if (var->getAddTrainFlag()) { + allTrainModelNameList.append(var->getModelID()); + } + } + return allTrainModelNameList; +} + TempImage * ModelManager::getTmpImage(QString str) { if (!m_mpModels.contains(str)) { diff --git a/src/tpMain/ModelManager.h b/src/tpMain/ModelManager.h index 9749915..b4792f5 100644 --- a/src/tpMain/ModelManager.h +++ b/src/tpMain/ModelManager.h @@ -46,6 +46,7 @@ public: QStringList getNoDetectModelName();//获取所有未检测模板名 QStringList getDetectModelName();//获取所有检测模板名 QStringList getAllModelName();//获取所有模板名 + QStringList getAllTrainModelName(); //获取所有加入训练的模板名 bool setAllModelsState(bool state); bool setRestDetect(); QMap getDetectModelMap(); diff --git a/src/tpMain/QWorkMgrCtlr.cpp b/src/tpMain/QWorkMgrCtlr.cpp index 0f87d0a..c468644 100644 --- a/src/tpMain/QWorkMgrCtlr.cpp +++ b/src/tpMain/QWorkMgrCtlr.cpp @@ -35,6 +35,7 @@ void QWorkMgrCtlr::clear() void QWorkMgrCtlr::readManageFile() { QStringList AllModels = m_pCtrl->getAllModelName(); + QStringList AllTrainModels = m_pCtrl->getAllTrainModelName(); QJsonObject obj; ReadJsonFile(strAppPath + FILESAVE, obj); ForUse = obj.value("DefectUse").toString(); @@ -55,7 +56,7 @@ void QWorkMgrCtlr::readManageFile() QJsonArray Listarray = nItemObj.value("DefectList").toArray(); for (int nIndex = 0; nIndex < Listarray.size(); nIndex++){ QString strName = Listarray.at(nIndex).toString(); - if (AllModels.contains(strName)) + if (AllTrainModels.contains(strName)) nItem.strDefectList.append(strName); } nItem.strAbout = nItemObj.value(ITEMABOUT).toString(); @@ -137,7 +138,16 @@ bool QWorkMgrCtlr::delItem(QString key) return false; } } - +bool QWorkMgrCtlr::ModAllItem(const QString &str) +{ + for (auto iter = mMagerMap.begin(); iter != mMagerMap.end(); iter++) + { + QString key = iter.key(); + QMap::iterator ptrItem = mMagerMap.find(key); + ptrItem->strDefectList.removeAll(str); + } + return true; +} bool QWorkMgrCtlr::ModItem(QString oldkey, SimuItem nItem) { if (!strs.contains(oldkey)) diff --git a/src/tpMain/QWorkMgrCtlr.h b/src/tpMain/QWorkMgrCtlr.h index 41d0bc8..87ce653 100644 --- a/src/tpMain/QWorkMgrCtlr.h +++ b/src/tpMain/QWorkMgrCtlr.h @@ -37,6 +37,7 @@ public: bool AddItem(QString key, SimuItem nItem); bool delItem(QString key); bool ModItem(QString oldkey, SimuItem nItem); + bool ModAllItem(const QString &str); SimuItem * getItem(QString key); void setDebugModel(int nmodel){ nDebugmodel = nmodel; }; QStringList getDefectList(){ diff --git a/src/tpMain/WheelCtrl.cpp b/src/tpMain/WheelCtrl.cpp index 092c9fd..249cccf 100644 --- a/src/tpMain/WheelCtrl.cpp +++ b/src/tpMain/WheelCtrl.cpp @@ -291,6 +291,11 @@ QStringList WheelCtrl::getAllModelName() return m_pModelMgr->getAllModelName(); } +QStringList WheelCtrl::getAllTrainModelName() +{ + return m_pModelMgr->getAllTrainModelName(); +} + QMap* WheelCtrl::getAllTimePtr() const { return m_pTimeMgr->getAllTimePtr(); diff --git a/src/tpMain/WheelCtrl.h b/src/tpMain/WheelCtrl.h index 3aba146..0269bf4 100644 --- a/src/tpMain/WheelCtrl.h +++ b/src/tpMain/WheelCtrl.h @@ -19,6 +19,7 @@ public: virtual QString appRoot() const; virtual ModelManager *getModelMgr() const; virtual QStringList getAllModelName(); + virtual QStringList getAllTrainModelName(); virtual CChannelInfo *getChannelInfo() const; virtual TimeMgrCtrl *getTimeMgr() const; virtual QMap* getAllTimePtr() const; diff --git a/src/tpMain/none.jpg b/src/tpMain/none.jpg index 34e3ef2ab7c13dcb980351caaa8fe59d466d0920..8eea10d9a0ed72a1312e275bf3edf655e72b4322 100644 GIT binary patch literal 3962 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 tableModel->removeRow(0); } - QStringList AllModels = m_pCtrl->getAllModelName(); + // QStringList AllModels = m_pCtrl->getAllModelName(); + QStringList AllTrainModels = m_pCtrl->getAllTrainModelName(); SimuItem *pWorkItem = m_pWorkCtrl->getItem(str); if (pWorkItem){ //Add check not in list model's name @@ -177,7 +178,7 @@ void QWorkMgrUI::UpdateTableView(QString str){ int nCounter = 0; for (int nIndex = 0; nIndex < pList.size(); nIndex++){ QString str = pList.at(nIndex); - if (!AllModels.contains(str)) + if (!AllTrainModels.contains(str)) { pWorkItem->strDefectList.removeAll(str);//add continue; @@ -639,10 +640,18 @@ void QWorkMgrUI::setData2Show(QString str){ ui.state_lineEdit->setText(str); } +void QWorkMgrUI::modWorkMgr(const QString &str) +{ + m_pWorkCtrl->ModAllItem(str);; + m_pWorkCtrl->saveManageFile(); +} + void QWorkMgrUI::UpdateTabView(QString strName, TypeSelect enTymodel) { if (enTymodel == TY_All){ - QStringList m_models = m_pCtrl->getModelMgr()->getAllModelName(); + // QStringList m_models = m_pCtrl->getModelMgr()->getAllModelName(); + QStringList m_models = m_pCtrl->getModelMgr()->getAllTrainModelName(); + UpdateTab2(m_models); } else if (enTymodel == TY_OnlySel||enTymodel==TY_OnlyNoSel){ @@ -651,7 +660,8 @@ void QWorkMgrUI::UpdateTabView(QString strName, TypeSelect enTymodel) if (enTymodel == TY_OnlySel) UpdateTab2(pWorkItem->strDefectList); else{ - QStringList strList = m_pCtrl->getModelMgr()->getAllModelName(); + // QStringList strList = m_pCtrl->getModelMgr()->getAllModelName(); + QStringList strList = m_pCtrl->getModelMgr()->getAllTrainModelName(); for (int n = 0; n < pWorkItem->strDefectList.size(); n++){ QString str = pWorkItem->strDefectList.at(n); strList.removeAll(str); diff --git a/src/tpMain/qworkmgrui.h b/src/tpMain/qworkmgrui.h index 0feca31..5522185 100644 --- a/src/tpMain/qworkmgrui.h +++ b/src/tpMain/qworkmgrui.h @@ -29,6 +29,7 @@ public: virtual bool onUserRole(); void onSwitchMode(bool bMode); void setData2Show(QString str); + void modWorkMgr(const QString &str);//修改所有工作单中的模板并保存到json中 Q_SLOT void onTextChanged(QString); //Q_SLOT void onSendModelState(); diff --git a/tpvs17/RasterSDG20/rastersdg20_en.ts b/tpvs17/RasterSDG20/rastersdg20_en.ts index 840e569..2130dd1 100644 --- a/tpvs17/RasterSDG20/rastersdg20_en.ts +++ b/tpvs17/RasterSDG20/rastersdg20_en.ts @@ -6,97 +6,97 @@ No Error has occurred - + Invalid file descriptor (port was not opened correctly) - + Unable to allocate memory tables (POSIX) - + Caught a non-blocked signal (POSIX) - + Operation timed out (POSIX) - + The file opened by the port is not a valid device - + The port detected a break condition - + The port detected a framing error (usually caused by incorrect baud rate settings) - + There was an I/O error while communicating with the port - + Character buffer overrun - + Receive buffer overflow - + The port detected a parity error in the received data - + Transmit buffer overflow - + General read operation failure - + General write operation failure - + The %1 file doesn't exists - + Permission denied - + Device is already locked - + Unknown error: %1 - + @@ -104,27 +104,27 @@ ��դ�궨������ - + δ�����κδ����豸������ - + ����%1 %2 �򿪳ɹ� - + ����%1 %2 ����ʧ�ܣ����� - + ����%1 %2 �رգ����� - + @@ -132,146 +132,146 @@ Form - + 设备设置和测试 - + Setting/Testing 串口设备设置 - + Serial port settings 串口名: - + Name: 查找设备 - + Find devices <html><head/><body><p>串口设备设置,在需要使用光栅采集数据的情况下使用,并且需要设置正确的设备端口号才能正常与光栅设备通讯,否则通讯会失败。</p></body></html> - + <html><head/><body><p>The serial port device setting is used when the grating is needed to collect data, and the correct device port number needs to be set in order to normally communicate with the grating device, otherwise the communication will fail.</p></body></html> 波特率: - + Baud rate: 串口打开状态 - + Status 启动光栅采集数据功能 - + Start the data collection function 保存设置 - + Save 打开串口 - + Open 关闭串口 - + Close 光栅数据采样 - + Raster data sampling 光栅未遮挡数: - + Number of not covered: 系统状态 - + System status 光栅总数: - + Total: 63 - + 被遮挡的起始位置: - + Starting position of conered: 光栅遮挡数: - + Number of covered: 轮毂数据标定 - + Hub calibration 轮毂高度标定 - + Hub height calibration 中值滤波比例: - + Median filtering ratio: 光栅最小数值: - + Minimum of grating: mm - + mm 高度测量标定 - + Height measurement calibration 基准高度: - + Reference height: 光栅倍率: - + Grating magnification: 采样容器大小: - + Sample container size: @@ -285,17 +285,26 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">光栅遮挡数:是有物品挡住光栅时,光栅采样返回的数据</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">光栅倍率:是光栅自身的精度,每一格光栅所代表的高度是多少</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">基准高度:是在光栅无法照射的地方的高度大小,需要用直尺直接测量光栅底部与流水线的最低平面的距离</p></body></html> - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Consolas'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Height measurement is based on the normal acquisition of grating data.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Calculation formula of hub height:</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Height=Number of convered*Grating magnification+Reference height</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Number of covered:It is the data returned by grating sampling when there is an object cover the grating</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Grating magnification:It is the accuracy of grating itself, and what height is represented by each grating</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Reference height: it is the height of the place where the grating cannot be irradiated. The distance between the bottom of the grating and the lowest plane of the pipeline needs to be measured directly with a ruler</p></body></html> 轮毂直径标定曲率: - + Calibration curvature of hub diameter: B: - + B: @@ -305,17 +314,22 @@ p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Consolas'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">直径标定曲率:是用于校准算法计算出的轮毂直径与实际轮毂直径用的</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">曲率=轮毂高度*k+B 计算曲率的前提是轮毂的高度数据必须准确(误差小)</p></body></html> - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Consolas'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Diameter calibration curvature: it is used to calibrate the hub diameter calculated by the algorithm and the actual hub diameter</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Curvature = hub height * k + B the premise of curvature calculation is that the hub height data must be accurate (small error)</p></body></html> K: - + K: K:表示斜率,B:基准点,直径=高度*K+B - + K:slope, B:datum points, diameter = height *k+b @@ -324,7 +338,7 @@ p, li { white-space: pre-wrap; } �� - + @@ -334,65 +348,65 @@ p, li { white-space: pre-wrap; } ������������:%1 - + ����������ͨ��λ��:%1 - + ֹͣ���� - + ��ʼ���� - + ��դ���ݲ��� - + ֹͣ��ѯ - + 5s��ʱ��ѯ - + ϵͳ�������� - + ϵͳ���⵽��׼���� - + ������Դ��ѹƫ�� - + ͬ����ʧ�����͵�Ԫû�� - + ϵͳ�ڲ����� - + @@ -400,7 +414,7 @@ p, li { white-space: pre-wrap; } %1 - + diff --git a/tpvs17/tpMain/QModelMgrDlg.cpp b/tpvs17/tpMain/QModelMgrDlg.cpp index 1e2ceec..ea1a620 100644 --- a/tpvs17/tpMain/QModelMgrDlg.cpp +++ b/tpvs17/tpMain/QModelMgrDlg.cpp @@ -12,6 +12,8 @@ #include "QSettings.h" #include "ICompareModel.h" +#include + #define WS_PICSIZE 129 //!>缩放大小 #define WS_PICSIZELIST_ITEM 100 #define MODEL_UI_ICON_NONE ":/image/none.jpg" @@ -36,6 +38,7 @@ QModelMgrDlg::QModelMgrDlg(IWheelCtrl *ptr, QWidget *parent) { ui.setupUi(this); setWindowIcon(QIcon(":/image/leaper")); + m_bTrainCancel = false; connect(ui.m_pbAdd, SIGNAL(clicked()), this, SLOT(onButtonClicked())); connect(ui.m_pbDel, SIGNAL(clicked()), this, SLOT(onButtonClicked())); connect(ui.m_pbMod, SIGNAL(clicked()), this, SLOT(onButtonClicked())); @@ -195,7 +198,14 @@ Q_SLOT void QModelMgrDlg::onModifyModel() } pModel->setThickness(ui.ModelMgr_model_edit_height->text().toDouble()); pModel->setDiameter(ui.ModelMgr_model_edit_diameter->text().toDouble()); - pModel->setTrainFlag(ui.checkBox->isChecked()); + bool trainFlag = ui.checkBox->isChecked(); + pModel->setTrainFlag(trainFlag); + if (trainFlag == false) + { + m_bTrainCancel = true; + emit sgModifyModel(strModel); + } + double thisvalue = pModel->getImageComModel()->getDisThre(); double falsMinDis = pModel->getImageComModel()->getFalseSampleMinDis(); @@ -1054,3 +1064,14 @@ void QModelMgrDlg::showEvent(QShowEvent *event) ui.ModelMgr_label_Model_number->setText(m_str); } } + +void QModelMgrDlg::closeEvent(QCloseEvent *event) +{ + if (m_bTrainCancel) + { + event->accept(); + emit sgUpdatedefect(); + m_bTrainCancel = false; + } + return; +} \ No newline at end of file diff --git a/tpvs17/tpMain/QModelMgrDlg.h b/tpvs17/tpMain/QModelMgrDlg.h index 8cbcd1c..eb8af24 100644 --- a/tpvs17/tpMain/QModelMgrDlg.h +++ b/tpvs17/tpMain/QModelMgrDlg.h @@ -45,6 +45,8 @@ signals: void sgTrainShowInfo(QString str); void sgShowMsg(QString); void sgGenalData(QVariant nType, QVariant nData); + void sgModifyModel(QString str); + void sgUpdatedefect(); private: void updateWidget(QString str); bool appImage2Widget(QString strPath, QString strModel); @@ -57,6 +59,8 @@ private: protected: Q_SLOT void onButtonClicked(); virtual void showEvent(QShowEvent *event); + + virtual void closeEvent(QCloseEvent *event); private: Ui::QModelMgrDlg ui; @@ -72,6 +76,8 @@ private: QString m_strTrainModel; QString m_strAddPicPath; + bool m_bTrainCancel; + class ProgressView *m_pProgressView{ nullptr }; }; diff --git a/tpvs17/tpMain/lpMainWin.cpp b/tpvs17/tpMain/lpMainWin.cpp index d71782a..85f98ea 100644 --- a/tpvs17/tpMain/lpMainWin.cpp +++ b/tpvs17/tpMain/lpMainWin.cpp @@ -137,7 +137,9 @@ lpMainWin::lpMainWin(QWidget *parent) connect(m_pworkUI, SIGNAL(sgUpdatedefect()), this, SLOT(onUpdateDefect())); m_pModelMgrDlg = new QModelMgrDlg(m_pCtrl);//模板管理 - + //当某个模板加入训练或者不加入训练时修改原来工作单中的模板信息 + connect(m_pModelMgrDlg, SIGNAL(sgModifyModel(QString)), this, SLOT(modWorkMgr(QString))); + connect(m_pModelMgrDlg, SIGNAL(sgUpdatedefect()), this, SLOT(onUpdateDefect())); m_pDebugDlg = new QDebugDlg();//调试界面 connect(m_pDebugDlg, SIGNAL(sgTriggerCam()), this, SLOT(onTriggerCam())); m_pDebugDlg->onSetCtrl(m_pCtrl); @@ -912,15 +914,19 @@ QString lpMainWin::SecondTimeString(quint64 value) QString strTime; int seconds = value % 60; int minutes = value / 60; - strTime = QString("%1分%2秒").arg(minutes).arg(seconds); + QString strDay = tr("天"); + QString strHour = tr("时"); + QString strMinute = tr("分"); + QString strSecond = tr("秒"); + strTime = QString("%1%2%3%4").arg(minutes).arg(strMinute).arg(seconds).arg(strSecond); if (minutes >= 60) { minutes = (value / 60) % 60; int hours = (value / 60) / 60; - strTime = QString("%1时%2分%3秒").arg(hours).arg(minutes).arg(seconds); + strTime = QString("%1%2%3%4%5%6").arg(hours).arg(strHour).arg(minutes).arg(strMinute).arg(seconds).arg(strSecond); if (hours >= 24) { hours = ((value / 60) / 60) % 24; int day = ((value / 60) / 60) / 24; - strTime = QString("%1天%2时%3分%4秒").arg(day).arg(hours).arg(minutes).arg(seconds); + strTime = QString("%1%2%3%4%5%6%7%8").arg(day).arg(strDay).arg(hours).arg(strHour).arg(minutes).arg(strMinute).arg(seconds).arg(strSecond); } } return strTime; @@ -1048,7 +1054,7 @@ void lpMainWin::onSetModel() strList.append("NG"); m_pTableCheck->setModelList(strList); } - QString str = QString("%1:%2(%3)").arg(tr("正在检测型号数")).arg(forDefectList.size()).arg(m_pCtrl->getAllModelName().size() - 1); + QString str = QString("%1:%2(%3)").arg(tr("正在检测型号数")).arg(forDefectList.size()).arg(m_pCtrl->getAllTrainModelName().size() - 1); ui.main_showWorkLabel->setText(str); // IWheelUi *pMainWidget = m_pUi->getItemWidget(WHEEL_UI_MAINWINDOW); @@ -1073,7 +1079,7 @@ Q_SLOT void lpMainWin::onUpdateDefect() { strList.append("NG"); m_pTableCheck->setModelList(strList); } - QString str = QString("%1:%2(%3)").arg(tr("正在检测型号数")).arg(forDefectList.size()).arg(m_pCtrl->getAllModelName().size() - 1); + QString str = QString("%1:%2(%3)").arg(tr("正在检测型号数")).arg(forDefectList.size()).arg(m_pCtrl->getAllTrainModelName().size() - 1); ui.main_showWorkLabel->setText(str); } @@ -1647,6 +1653,10 @@ void lpMainWin::onUpdateByLevel(int nlevel) else ui.action_userManager->setVisible(false); } +Q_SLOT void lpMainWin::modWorkMgr(QString str) +{ + m_pworkUI->modWorkMgr(str); +} Q_SLOT void lpMainWin::onSendReadOnlineLib() { diff --git a/tpvs17/tpMain/lpMainWin.h b/tpvs17/tpMain/lpMainWin.h index 6caf0ac..5301a7e 100644 --- a/tpvs17/tpMain/lpMainWin.h +++ b/tpvs17/tpMain/lpMainWin.h @@ -116,6 +116,7 @@ protected: Q_SLOT void onSendReadOnlineLib(); Q_SLOT void onThicknessTimer(); Q_SLOT void onwfPulseTimer(); + Q_SLOT void modWorkMgr(QString str); private: void onShowResult(Result2Ui* pRlt);//展示识别结果 diff --git a/tpvs17/tpMain/lpmain_en.ts b/tpvs17/tpMain/lpmain_en.ts index 4b91f23..cf7d0f5 100644 --- a/tpvs17/tpMain/lpmain_en.ts +++ b/tpvs17/tpMain/lpmain_en.ts @@ -744,7 +744,7 @@ p, li { white-space: pre-wrap; } 阈值调节 - Threshold adjustment + Threshold @@ -754,7 +754,7 @@ p, li { white-space: pre-wrap; } 旋转次数 - Number of rotations + Rotations @@ -779,7 +779,7 @@ p, li { white-space: pre-wrap; } 加入训练 - + Add to train @@ -884,291 +884,291 @@ p, li { white-space: pre-wrap; } modelID - - - - - - + + + + - - - - - - - + + + + + + + + + 提示 Prompt - - + + 请选择一个您要追加图像的型号! Please select a model you want to add an image to! - + 加载图像 Load image - + 图像加载中,请稍后..... The image is loading, please wait... - + 添加失败,不能添加带检测背景的图片作为模板!!! Failed to add, you cannot add a picture with a detection background as a template! ! ! - + 加载完成 Download finished - - - + + + 请选择一个您要修改的型号! Please select a model you want to modify! - + 修改了模板 Modified template - + 的参数 The parameters of the - + 修改成功! Successfully modified! - - + + 请选择一个您要删除的型号 Please select a model you want to delete - + 按下了删除模板按钮 Press the Delete Template button - + 是否删除型号 Whether to delete the model - + 产品模板 Product template - + 删除了模板 Template deleted - - - - - - - - + + + + + + + + common - - - - - + + + + + 个型号 Model number - + 按下了添加模板按钮 Press the Add Template button - + 产品信息设置 Product information settings - + 添加了一个新的模型 Added a new model - + 请选择一个您要训练的型号! Please select a model you want to train! - - + + 训练模板线程未退出,请稍等 The training template thread did not exit, please wait - + 将对所有型号模板进行重新训练,期间系统的检测功能将不能正常运行直到模板训练完成,全部重新训练模板将需要很长时间,期间将不能进行其他工作,是否继续执行? All model templates will be retrained. During this period, the system's detection function will not operate normally until the template training is completed. It will take a long time for all templates to be retrained, during which other work will not be possible. Do you want to continue? - + 确定删除该图像? Determine to delete the image? - + 模板图片删除 Template picture deletion - - - + + + 个图像 Image - + 警告 Warning - + 即将删除模板库里的所有模板,是否继续? All templates in the template library will be deleted. Do you want to continue? - + 再次确认,是否全部删除? Confirm again, delete all? - + 没有模板!!! No template!!! - + 全部删除完成!!! Complete deletion!!! - + 图像数量少于 The number of images is less than - + 个,请及时补充训练样本 , please add training samples in time - - - - - - + + + + + + 模板更新进度 Template update progress - + 正在初始化所有模板 共需要训练%1个模板,请稍后..... All templates are being initialized. A total of%1 templates need to be trained. Please wait a moment... - + 正在训练%1的模板 已完成%2/%3,请稍后..... The template training %1 is complete %2/%3, please wait... - + %1的模板获取特征 已完成%2/%3,请稍后..... Template capture feature for %1 is complete for %2/%3, please wait... - + %1的模板训练完成 已完成%2/%3,请稍后..... Template training for %1 completed %2/%3, please wait... - + 全部模板更新完成!%1s All templates updated!The %1 s - + 对全部模板进行了重新训练,共%1个模板 All templates were retrained, with a total of%1 template - + 模板正在准备请稍后..... The template is being prepared Please wait a moment..... - - - - - - - - - - - - + + + + + + + + + + + + 模板训练进度 Template training progress - - + + %1型号没有图片不能训练! %1 Model can not be trained without pictures! - + %1的模板 正在获取特征值,请稍后.... The%1 template is getting the characteristic value. Please wait... - + 训练完成!%1s Training completed! %1s - + 训练了模板:%1 Model training:%1 - + 确认 OK - + 取消 Cancel @@ -1892,7 +1892,7 @@ p, li { white-space: pre-wrap; } <<< - Setting parameters + <<< @@ -1955,73 +1955,73 @@ p, li { white-space: pre-wrap; } Detection Model Management - - + + 共 %1 个 - Total of%1 + Total of: %1 - + 当前使用的工单为 %1 The current Table is%1 - + 以下型号为重复添加: %1已被忽略. The models are added repeatedly:%1, And They have been ignored. - + 提醒 Warning - - - + + + 确定 OK - + 工单 %1 被设为应用 Table %1 is seted to Using - + 发送模板库 Send Template Library - - + + 警告 Warning - + %1任务单正在使用不能被删除,请先切换到其他任务单,再删除该任务单? %1 Table is Using and cannot be deleted. Please switch to another Table before deleting the Table? - - + + 取消 Cancel - + 是否要删除 %1 模型? Do you want to delete the%1 model? - + 序号 Num - + 内容 About @@ -2095,7 +2095,7 @@ p, li { white-space: pre-wrap; } 未登录 - + None @@ -2117,7 +2117,7 @@ p, li { white-space: pre-wrap; } - + 开始检测 Start testing @@ -2215,19 +2215,19 @@ p, li { white-space: pre-wrap; } - + 模板管理 Template management 数据查询 - Data query + Data 模板勾选 - Template check + Template selection @@ -2251,7 +2251,7 @@ p, li { white-space: pre-wrap; } - + 关于 About @@ -2272,7 +2272,7 @@ p, li { white-space: pre-wrap; } - + 相机配置 Camera configuration @@ -2303,267 +2303,287 @@ p, li { white-space: pre-wrap; } User: - + 历史 History - + 系统初始化完成... System initialization complete... - + 显示识别结果 Display recognition results - + 相机图像和背景图不一样,请更换检测背景! The camera image is different from the background image, please change the detection background! - + 警告!!!连续出现%1个未识别型号 Warning!!! %1 unidentified models appear continuously - + ,未开启检测功能造成的 , Caused by not opening the detection function - + 获得图像,正在计算中... Get the image, is calculating... - + 注 销 Logout - + 登 录 Login - - + + 该功能未启用. The feature is not enabled. - - - + + + 确认 Ok - + 你确定要注销 Are you sure you want to log out - + 班次管理 Classes management - + 调试工具 DebugTool - + 系统参数设置 System parameter setting - - + + 停止检测 Stop detecting - + 按下了开始检测按钮,检测功能开启 Press the start detection button, the detection function is turned on - + 按下了停止检测按钮,检测功能关闭 Press the stop detection button, the detection function is closed - - - - + + + + 提示 Prompt - + 将清空所有数据 All data will be cleared - + 确定 Ok - - + + 取消 Cancel - - - - + + + + 当前曝光时间未识别到轮毂! - + The current exposure time does not recognize the hub. - - + + 调整5次曝光时间后依然未能识别到轮毂! - + After adjusting the exposure time for 5 times, the wheel hub is still not recognized - + 按下了清零按钮,数据全部清零 Press the reset button, all data are cleared - + + 天 + d + + + + 时 + h + + + + 分 + m + + + + 秒 + s + + + 系统时间: System time: - + 运行时长: Running time: - + 检测状态: - Detection status: + Status: - + 检测中... Detecting... - + 未检测... Not detected... - + 班次信息: - Classes information: + Classes info: - + 该时间段未设置班次 - No classes is set in this time period + No classes - + 当前用户: Current user: - + 模板库发送完成 Template library sending completed - - + + 正在检测型号数 - Number of models being detected + Number of models - + 已连接 Connected - + 已断开 Disconnected - + PLC已收到相关设置参数! The PLC has received the relevant setting parameters! - + 已打开 Opened - + 已关闭 Closed - + 轮毂型号识别系统 Wheel Type Identification System - + 本软件由杭州利珀科技开发,用于轮毂型号识别和分类,可搭配流水线运输系统使用 This software is developed by Leaper in Hangzhou. It is used for hub type identification and classification. It can be used with pipeline transportation system - + 若需要进一步了解该产品的相关信息,请访问我们的网站 For more information about this product, please visit our website - + 软件版本 Software Version - + 算法版本 Algorithm version - + 最后更新时间 Last update time - + 版权 (c) 属 杭州利珀科技有限公司 所有 Copyright(C) belongs to Hangzhou Lipper Technology Co., Ltd. - + 关闭 Shut down - + (默认) (Default) - + 默认通道 值1000 - Default channel value 1000 + 1000 (Default) diff --git a/tpvs17/tpMain/lpmain_zh.ts b/tpvs17/tpMain/lpmain_zh.ts index 4ea4895..c3dff8b 100644 --- a/tpvs17/tpMain/lpmain_zh.ts +++ b/tpvs17/tpMain/lpmain_zh.ts @@ -847,291 +847,291 @@ p, li { white-space: pre-wrap; } - - - - - - + + + + - - - - - - - + + + + + + + + + 提示 - - + + 请选择一个您要追加图像的型号! - + 加载图像 - + 图像加载中,请稍后..... - + 添加失败,不能添加带检测背景的图片作为模板!!! - + 加载完成 - - - + + + 请选择一个您要修改的型号! - + 修改了模板 - + 的参数 - + 修改成功! - - + + 请选择一个您要删除的型号 - + 按下了删除模板按钮 - + 是否删除型号 - + 产品模板 - + 删除了模板 - - - - - - - - + + + + + + + + - - - - - + + + + + 个型号 - + 按下了添加模板按钮 - + 产品信息设置 - + 添加了一个新的模型 - + 请选择一个您要训练的型号! - - + + 训练模板线程未退出,请稍等 - + 将对所有型号模板进行重新训练,期间系统的检测功能将不能正常运行直到模板训练完成,全部重新训练模板将需要很长时间,期间将不能进行其他工作,是否继续执行? - + 确定删除该图像? - + 模板图片删除 - - - + + + 个图像 - + 警告 - + 即将删除模板库里的所有模板,是否继续? - + 再次确认,是否全部删除? - + 没有模板!!! - + 全部删除完成!!! - + 图像数量少于 - + 个,请及时补充训练样本 - - - - - - + + + + + + 模板更新进度 - + 正在初始化所有模板 共需要训练%1个模板,请稍后..... - + 正在训练%1的模板 已完成%2/%3,请稍后..... - + %1的模板获取特征 已完成%2/%3,请稍后..... - + %1的模板训练完成 已完成%2/%3,请稍后..... - + 全部模板更新完成!%1s - + 对全部模板进行了重新训练,共%1个模板 - + 模板正在准备请稍后..... - - - - - - - - - - - - + + + + + + + + + + + + 模板训练进度 - - + + %1型号没有图片不能训练! - + %1的模板 正在获取特征值,请稍后.... - + 训练完成!%1s - + 训练了模板:%1 - + 确认 - + 取消 @@ -1917,73 +1917,73 @@ p, li { white-space: pre-wrap; } - - + + 共 %1 个 - + 当前使用的工单为 %1 - + 以下型号为重复添加: %1已被忽略. - + 提醒 - - - + + + 确定 - + 工单 %1 被设为应用 - + 发送模板库 - - + + 警告 - + %1任务单正在使用不能被删除,请先切换到其他任务单,再删除该任务单? - - + + 取消 - + 是否要删除 %1 模型? - + 序号 - + 内容 @@ -2079,7 +2079,7 @@ p, li { white-space: pre-wrap; } - + 开始检测 @@ -2177,7 +2177,7 @@ p, li { white-space: pre-wrap; } - + 模板管理 @@ -2213,7 +2213,7 @@ p, li { white-space: pre-wrap; } - + 关于 @@ -2234,7 +2234,7 @@ p, li { white-space: pre-wrap; } - + 相机配置 @@ -2265,265 +2265,285 @@ p, li { white-space: pre-wrap; } - + 历史 - + 系统初始化完成... - - + + 停止检测 - + 显示识别结果 - - - - + + + + 当前曝光时间未识别到轮毂! - - + + 调整5次曝光时间后依然未能识别到轮毂! - + 相机图像和背景图不一样,请更换检测背景! - + 警告!!!连续出现%1个未识别型号 - + ,未开启检测功能造成的 - + 获得图像,正在计算中... - + 注 销 - + 登 录 - - - - + + + + 提示 - - + + 该功能未启用. - - - + + + 确认 - + 你确定要注销 - - + + 取消 - + 班次管理 - + 调试工具 - + 系统参数设置 - + 按下了开始检测按钮,检测功能开启 - + 按下了停止检测按钮,检测功能关闭 - + 将清空所有数据 - + 确定 - + 按下了清零按钮,数据全部清零 - + + 天 + + + + + 时 + + + + + 分 + + + + + 秒 + + + + 系统时间: - + 运行时长: - + 检测状态: - + 检测中... - + 未检测... - + 班次信息: - + 该时间段未设置班次 - + 当前用户: - + 模板库发送完成 - - + + 正在检测型号数 - + 已连接 - + 已断开 - + PLC已收到相关设置参数! - + 已打开 - + 已关闭 - + 轮毂型号识别系统 - + 本软件由杭州利珀科技开发,用于轮毂型号识别和分类,可搭配流水线运输系统使用 - + 若需要进一步了解该产品的相关信息,请访问我们的网站 - + 软件版本 - + 算法版本 - + 最后更新时间 - + 版权 (c) 属 杭州利珀科技有限公司 所有 - + 关闭 - + (默认) - + 默认通道 值1000