From 11582c3db50aa3fc70bdf82bb84f202b629fdb03 Mon Sep 17 00:00:00 2001 From: "bob.pan" Date: Tue, 17 Aug 2021 18:21:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=A3=80=E6=B5=8B=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=EF=BC=8C=E4=BC=98=E5=8C=96=E5=BB=BA=E6=A8=A1=E7=89=88?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3part/tadpole/include/tpBase/lpbengine.h | Bin 29586 -> 29626 bytes src/algorithm/AlgorithmCompare.cpp | 42 ------------ src/algorithm/ImageProcess.cpp | 6 +- src/lpbengine/Solution.cpp | 83 ++++++++++++++--------- src/lpbengine/Solution.h | 2 +- src/lpbengine/SolutionMgr.cpp | 70 +------------------ src/lpbengine/Task.cpp | 42 ++++++++---- src/lpbengine/Task.h | 1 + tpvs17/tpMain/lpMainWin.cpp | 4 +- 9 files changed, 90 insertions(+), 160 deletions(-) diff --git a/3part/tadpole/include/tpBase/lpbengine.h b/3part/tadpole/include/tpBase/lpbengine.h index afa406311b37ed6521386d3ad2385d4c0366c808..fff372ca751365fe1e6be9ec8f986a4a85182150 100644 GIT binary patch delta 42 zcmV+_0M-AJ=K;Fs0kE=Vlki?vlTc<%laN^~ldx+Dlkivwll)~e11ta_vz=!347wN- A9RL6T delta 38 tcmdn>oN>}~#toZNCx3|Gm^>kkZSoRVoyiSpPLn4@f@qh`$I`y=003!(5&ZxF diff --git a/src/algorithm/AlgorithmCompare.cpp b/src/algorithm/AlgorithmCompare.cpp index 8b79e5d..32df78c 100644 --- a/src/algorithm/AlgorithmCompare.cpp +++ b/src/algorithm/AlgorithmCompare.cpp @@ -254,48 +254,6 @@ QString CAlgorithmCompare::bestMatch(const QMap* modelMap } } - //if (similarNum == 1) - //{ - // double dis = std::fabs(innerCircleNumSum - simularModelMap.begin().value()); - // if (dis > INSIDE_NUM_DIS_THRE) - // { - // bestName = QString(); - // } - //} - //if (similarNum > 1) - //{ - // auto iterEnd = simularModelMap.constEnd(); - // double disMin = DBL_MAX; - - // for (auto iter = simularModelMap.constBegin(); iter != iterEnd; ++iter) - // { - // double dis = std::fabs(innerCircleNumSum - iter.value()); - // if (dis < disMin) - // { - // disMin = dis; - // bestName = iter.key(); - // } - // } - - //} - - //auto iterEnd = simularModelMap.constEnd(); - //bool bestMatchFlag = false; - //for (auto iter = simularModelMap.constBegin(); iter != iterEnd; ++iter) - //{ - // double dis = std::fabs(innerCircleNumSum - iter.value()); - // if (dis < INSIDE_NUM_DIS_THRE) - // { - // bestName = iter.key(); - // bestMatchFlag = true; - // break; - // } - //} - //if (!bestMatchFlag) - //{ - // bestName = QString(); - //} - return bestName; } diff --git a/src/algorithm/ImageProcess.cpp b/src/algorithm/ImageProcess.cpp index 7c5b450..523ea13 100644 --- a/src/algorithm/ImageProcess.cpp +++ b/src/algorithm/ImageProcess.cpp @@ -43,19 +43,20 @@ Mat findEdge2(const Mat &Src) return ret; } #define REAIZE 2 -cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg, bool useBackgroundFlag, int nThres /*= 20*/, luffy_base::luffyCircle *pCircle /*= NULL*/) +cv::Mat ImageProcess::findCircleObject(const Mat &srcImg, const Mat& backgroundImg, bool useBackgroundFlag, int nThres /*= 20*/, luffy_base::luffyCircle *pCircle /*= NULL*/) { #ifdef MOTO_DETECT//摩轮型号识别抠图算法 if (!useBackgroundFlag) { Mat detectImg; + Mat src = srcImg(Rect(435, 53, 1721, 1824)); cv::resize(src, detectImg, cv::Size(src.cols / REAIZE, src.rows / REAIZE)); int bBaseX = detectImg.cols; int bBaseY = detectImg.rows; //if (nThres<=1) equalizeHist(detectImg, detectImg); detectImg = _EnhanImg_sharpen(detectImg); - + EDCircles edcircles(detectImg); vector EDCircle = edcircles.getCircles(); double maxR = 0; @@ -120,6 +121,7 @@ cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg, } else { + Mat src = srcImg; if (src.empty() || backgroundImg.empty() || src.rows < 500) { return Mat(); } diff --git a/src/lpbengine/Solution.cpp b/src/lpbengine/Solution.cpp index 0888e00..584dc31 100644 --- a/src/lpbengine/Solution.cpp +++ b/src/lpbengine/Solution.cpp @@ -133,7 +133,6 @@ bool Solution::DeleteTask(QString strName) QMap::iterator its = m_TaskMapByName.find(strName); if (its != m_TaskMapByName.end()) { - int nID = (*its)->GetID(); (*its)->RemoveFile(); delete *its; m_TaskMapByName.erase(its); @@ -211,6 +210,7 @@ bool Solution::SaveFileEx(const QString& strPath, QStringList sTaskNames) } QString strTaskFilePath = taskPath + "/taskinfo.json"; + p->SetPath(taskPath); if (!p->SaveFile(strTaskFilePath)) { qWarning("save task:%s fail", p->GetTaskInfo()->strName); @@ -240,7 +240,8 @@ bool Solution::SaveFileEx(const QString& strPath) dir.mkpath(taskPath); } - QString strTaskFilePath = taskPath + "/" + "taskinfo.json"; + QString strTaskFilePath = taskPath + "/taskinfo.json"; + p->SetPath(taskPath); if (!p->SaveFile(strTaskFilePath)) { qWarning("save task:%s fail", p->GetTaskInfo()->strName); @@ -248,12 +249,6 @@ bool Solution::SaveFileEx(const QString& strPath) } } - dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); - dir.setSorting(QDir::Size | QDir::Reversed); - QFileInfoList fileList = dir.entryInfoList(); - - - QJsonObject infoObj; infoObj.insert("solution_name", m_tSolutionInfo.strName); infoObj.insert("solution_type", m_tSolutionInfo.nType); @@ -277,41 +272,64 @@ bool Solution::SaveFileEx(const QString& strPath) { infoFile.write(byteArray); infoFile.flush(); - infoFile.close(); - return true; + infoFile.close(); } + return true; +} - -/* - for (int i = 0; i < fileList.size(); i++) +bool Solution::SaveTaskByName(QString strName) +{ + QDir dir; + if (!dir.exists(m_curRootPath)) { - if (fileList.at(i).fileName() == "." || fileList.at(i).fileName() == "..") - continue; + dir.mkdir(m_curRootPath); + } - QString strFileName = fileList.at(i).fileName(); - QString strSolutionFile = strPath + "/" + strFileName; - if (fileList.at(i).fileName() == "info.json") - { - continue; - } + dir.setPath(m_curRootPath); + //保存指定的task + QMap::iterator iter = m_TaskMapByName.find(strName); + if (iter!=m_TaskMapByName.end()) { - int nID = strFileName.mid(0, strFileName.indexOf("_")).toInt(); - QString strTaskName = strFileName.mid(strFileName.indexOf("_") + 1, strFileName.lastIndexOf(".") - strFileName.indexOf("_") - 1); + CDetectorTask *p = (CDetectorTask*)*iter; + QString taskPath = m_curRootPath + "/" + p->GetTaskName(); + if (!dir.exists(taskPath)) { + dir.mkpath(taskPath); + } - if (!CheckTask(nID, strTaskName)) + QString strTaskFilePath = taskPath + "/taskinfo.json"; + p->SetPath(taskPath); + if (!p->SaveFile(strTaskFilePath)) { - QFile::remove(strSolutionFile); + qWarning("save task:%s fail", p->GetTaskName()); } } + + //更新solution指定的info文件,包括是否使用对于的模板 + QJsonObject infoObj; + infoObj.insert("solution_name", m_tSolutionInfo.strName); + infoObj.insert("solution_type", m_tSolutionInfo.nType); + infoObj.insert("solution_description", m_tSolutionInfo.strDescription); + infoObj.insert("solution_id", m_nID); + QJsonArray tasklist; + m_tasklist = m_TaskMapByName.keys(); + foreach(QString var, m_tasklist) + { + tasklist.append(var); + } + infoObj.insert("tasklist", tasklist); + QJsonDocument document; + document.setObject(infoObj); + QByteArray byteArray = document.toJson(); + QString strInfoFile = m_curRootPath + "/info.json"; + QFile infoFile(strInfoFile); + if (infoFile.open(QFile::WriteOnly | QFile::Text)) + { + infoFile.write(byteArray); + infoFile.flush(); + infoFile.close(); + } return true; - -*/ -} - -bool Solution::SaveFileEx() -{ - return SaveFileEx(m_curRootPath); } /* @@ -328,6 +346,7 @@ solution_1 ---------- info.json // -----param.ts //标定模板参数 ---------- 。。。。 */ + bool Solution::LoadFileEx(const QString& strPath) { QDir dir(strPath); diff --git a/src/lpbengine/Solution.h b/src/lpbengine/Solution.h index 52c9914..8bac303 100644 --- a/src/lpbengine/Solution.h +++ b/src/lpbengine/Solution.h @@ -31,7 +31,7 @@ public: virtual IDetectorTask* AddAndCopyTask(IDetectorTask* pSrcTask, LP_DETECTOR_TASK tTaskInfo); virtual int GetTaskBaseID() const; - virtual bool SaveFileEx(); + virtual bool SaveTaskByName(QString strName); virtual bool SaveFileEx(const QString& strPath); virtual bool SaveFileEx(const QString& strPath, QStringList sTaskNames); virtual bool LoadFileEx(const QString& strPath); diff --git a/src/lpbengine/SolutionMgr.cpp b/src/lpbengine/SolutionMgr.cpp index a5321cc..64c2d54 100644 --- a/src/lpbengine/SolutionMgr.cpp +++ b/src/lpbengine/SolutionMgr.cpp @@ -111,39 +111,6 @@ bool CDetectorSolutionMgr::Save() } } - QString strSolutionDirPath = strExePath + LP_DETECTOR_BUSSINESS_CONFIG_SOLUTION_DIR; - QDir solutionDir(strSolutionDirPath); - if (!solutionDir.exists()) - { - return true; - } - - solutionDir.setFilter(QDir::Dirs | QDir::Hidden | QDir::NoSymLinks); - solutionDir.setSorting(QDir::Size | QDir::Reversed); - QFileInfoList fileList = solutionDir.entryInfoList(); - - for (int i = 0; i < fileList.size(); i++) - { - if (fileList.at(i).fileName() == "." || fileList.at(i).fileName() == "..") - continue; - - QString strFileName = fileList.at(i).fileName(); - QString strSolutionFile = strSolutionDirPath + strFileName; - if (fileList.at(i).fileName() == "info.json") - { - continue; - } - - int nID = strFileName.mid(0, strFileName.indexOf("_")).toInt(); - QString strSolutionName = strFileName.mid(strFileName.indexOf("_") + 1, strFileName.indexOf(".") - strFileName.indexOf("_") - 1); - -// if (!CheckSolution(nID, strSolutionName)) -// { -// qWarning() << "SaveAll, remove solution file" << strSolutionName; -// EngineBase::DeleteDir(strSolutionFile); -// } - } - return true; } @@ -152,8 +119,7 @@ bool CDetectorSolutionMgr::SaveByNames(QStringList strNames) QJsonDocument document; QString strExePath = QCoreApplication::applicationDirPath(); /*耗时过长*/ - for (QMap::iterator iter = m_vecSolution.begin(); - iter != m_vecSolution.end(); ++iter) + for (QMap::iterator iter = m_vecSolution.begin(); iter != m_vecSolution.end(); ++iter) { if (*iter) { @@ -169,38 +135,6 @@ bool CDetectorSolutionMgr::SaveByNames(QStringList strNames) } } - QString strSolutionDirPath = strExePath + LP_DETECTOR_BUSSINESS_CONFIG_SOLUTION_DIR; - QDir solutionDir(strSolutionDirPath); - if (!solutionDir.exists()) - { - return true; - } - - solutionDir.setFilter(QDir::Dirs | QDir::Hidden | QDir::NoSymLinks); - solutionDir.setSorting(QDir::Size | QDir::Reversed); - QFileInfoList fileList = solutionDir.entryInfoList(); - - for (int i = 0; i < fileList.size(); i++) - { - if (fileList.at(i).fileName() == "." || fileList.at(i).fileName() == "..") - continue; - - QString strFileName = fileList.at(i).fileName(); - QString strSolutionFile = strSolutionDirPath + strFileName; - if (fileList.at(i).fileName() == "info.json") - { - continue; - } - - int nID = strFileName.mid(0, strFileName.indexOf("_")).toInt(); - QString strSolutionName = strFileName.mid(strFileName.indexOf("_") + 1, strFileName.indexOf(".") - strFileName.indexOf("_") - 1); - -// if (!CheckSolution(nID, strSolutionName)) -// { -// qWarning() << "SaveAll, remove solution file" << strSolutionName; -// EngineBase::DeleteDir(strSolutionFile); -// } - } return true; } //加载配置文件 @@ -233,7 +167,6 @@ bool CDetectorSolutionMgr::Load() if(false == finfo.exists()) continue; - LP_DETECTOR_SOLUTION solutionInfo; solutionInfo.strName = dirList.at(i).fileName(); @@ -281,7 +214,6 @@ IDetectorSolution* CDetectorSolutionMgr::GetRunSolution() return m_vecSolution.first(); else return nullptr; - //return GetSolutionByID(m_nRunSolutionID); } IDetectorSolution* CDetectorSolutionMgr::AddAndCopySolution(IDetectorSolution* pSrcSolution) diff --git a/src/lpbengine/Task.cpp b/src/lpbengine/Task.cpp index 5381cea..190241d 100644 --- a/src/lpbengine/Task.cpp +++ b/src/lpbengine/Task.cpp @@ -2,6 +2,28 @@ #include "Roi.h" #include "Algorithm.h" +static inline bool DelDiretory(const QString &dirPath) +{ + if (dirPath.isEmpty()) + return false; + QDir qDir(dirPath); + if (!qDir.exists()) + return true; + qDir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); + QStringList ss = qDir.entryList(); + QFileInfoList qFileList = qDir.entryInfoList(); + foreach(QFileInfo qFileInfo, qFileList) + { + if (qFileInfo.isFile()) + qFileInfo.dir().remove(qFileInfo.fileName()); + else + DelDiretory(qFileInfo.absoluteFilePath()); + } + QString str = qDir.absolutePath(); + //return qDir.rmpath(dirPath); + return qDir.rmdir(dirPath); +} + CDetectorTask::CDetectorTask() { m_nID = LP_DETECTOR_INVALID_ID; @@ -335,7 +357,7 @@ bool CDetectorTask::SerializeFromJson(QJsonObject* pJsonObject) //加载模板标定图片 //QString strExePath = QCoreApplication::applicationDirPath(); QString strImagePath = m_taskPath;// strExePath + LP_DETECTOR_BUSSINESS_IMAGE_DIR; - QString strImageName = strImagePath + "/template.png";// QString::number(m_pSolution->GetID()) + "_" + QString::number(m_nID) + ".bmp"; + QString strImageName = strImagePath + "/template.png";// std::string strpath = strImageName.toLocal8Bit().toStdString(); m_tTask.templateImg = cv::imread(strpath, CV_LOAD_IMAGE_UNCHANGED); _strPath = strpath; @@ -386,8 +408,7 @@ bool CDetectorTask::SaveFile(const QString& strPath) if (m_pSolution && !m_tTask.templateImg.empty()) { - //QString strExePath = m_taskPath;// QCoreApplication::applicationDirPath(); - QString strFilePath = m_taskPath;// strExePath + LP_DETECTOR_BUSSINESS_IMAGE_DIR; + QString strFilePath = m_taskPath;// QDir dir; if (!dir.exists(strFilePath)) { @@ -395,10 +416,10 @@ bool CDetectorTask::SaveFile(const QString& strPath) return false; } - QString strFileName = strFilePath + "/" + /*QString::number(m_pSolution->GetID()) + "_" + QString::number(m_nID)*/ + "template.png"; + QString strFileName = strFilePath + "/template.png"; std::string strpath = strFileName.toLocal8Bit().toStdString(); - if (!cv::imwrite(strpath/*strFileName.toLatin1().data()*/, m_tTask.templateImg)) + if (!cv::imwrite(strpath, m_tTask.templateImg)) return false; } @@ -461,13 +482,10 @@ bool CDetectorTask::LoadFile(const QString& strPath) bool CDetectorTask::RemoveFile() { - QFile::remove(strtempImgPath); - QFile::remove(strParamFilePath); - for each (QString strVar in strPathList) - { - QFile::remove(strVar); - } - strParamFilePath.clear(); + /* + TODO:递归删除里面的所有文件,后再删除文件夹 + */ + DelDiretory(m_taskPath); return true; } diff --git a/src/lpbengine/Task.h b/src/lpbengine/Task.h index 176339f..181dd17 100644 --- a/src/lpbengine/Task.h +++ b/src/lpbengine/Task.h @@ -72,6 +72,7 @@ public: virtual bool SyncMapResult(const QVariantMap& vMap); virtual QString GetPath() { return m_taskPath; } + virtual void SetPath(QString path) { m_taskPath = path; } protected: int GetProductCount(); diff --git a/tpvs17/tpMain/lpMainWin.cpp b/tpvs17/tpMain/lpMainWin.cpp index f16b29f..5cef0a7 100644 --- a/tpvs17/tpMain/lpMainWin.cpp +++ b/tpvs17/tpMain/lpMainWin.cpp @@ -1907,7 +1907,7 @@ Q_SLOT void lpMainWin::onSlotAddNewModel(QString strName) IDetectorSolution* pSolution = pMgr->GetRunSolution(); if (pSolution) { pSolution->AddTaskByTemplate(strName); - pSolution->SaveFileEx(); + pSolution->SaveTaskByName(strName); } } } @@ -1923,7 +1923,7 @@ Q_SLOT void lpMainWin::onSlotDelOldModel(QString strName) IDetectorSolution* pSolution = pMgr->GetRunSolution(); if (pSolution) { pSolution->DeleteTask(strName); - pSolution->SaveFileEx(); + pSolution->SaveTaskByName(""); } } }