diff --git a/include/global.h b/include/global.h index 2c617ce..3716a3f 100644 --- a/include/global.h +++ b/include/global.h @@ -8,7 +8,7 @@ #include #include #pragma execution_character_set("utf-8") -const std::string softwareVersion = "V20251031-2.1.2"; +const std::string softwareVersion = "20251031-2.1.3"; const std::string euiJsonVersion = "1.0.6"; #define globalDatabasePth "./sqlDatabase/eui_db.db" //全局数据库路径 #define saveImgEnable 1 diff --git a/src/Core/backendInterface.cpp b/src/Core/backendInterface.cpp index cd1bd61..2892984 100644 --- a/src/Core/backendInterface.cpp +++ b/src/Core/backendInterface.cpp @@ -32,7 +32,7 @@ void Backend::init(SQLiteDB* db, qtFuncBridge* bridgeIn, nlohmann::ordered_json& } // 创建/重建需要的服务模块,避免重复创建 if (!_serviceManager._imgSaveThreadManager) { - _serviceManager._imgSaveThreadManager = new imgSaveThreadManager(missionJson["imgSaveBasePath"]); + _serviceManager._imgSaveThreadManager = new imgSaveThreadManager(missionJson["imgSaveBasePath"],_paramSyncManager); } if (!_serviceManager._cameraManager) { _serviceManager._cameraManager = new cameraManager(missionJson, bridge); diff --git a/src/core/service/imgSaveThreadManager.h b/src/core/service/imgSaveThreadManager.h index 471027b..634f16b 100644 --- a/src/core/service/imgSaveThreadManager.h +++ b/src/core/service/imgSaveThreadManager.h @@ -4,6 +4,7 @@ #include #include #include +#include enum imgSaveThreadType { oriImg, resImg, @@ -131,7 +132,7 @@ public: return result; } private: - QString defaultPath = "{imgSaveRootDir}/{yyyy-MM-dd}/{saveObjectName}/{HH}H/{imageType}/{processResult}/{SN}/"; + QString defaultPath = "{imgSaveRootDir}/{yyyy-MM-dd}/{saveObjectName}{imageType}/{HH}H/{processResult}/{SN}/"; QString defaultFileName = "{SN}_{cameraName}_{index}"; }; struct saveJob { @@ -211,41 +212,62 @@ public: }; class imgSaveThreadManager { public: - imgSaveThreadManager(std::string pathIn) { + imgSaveThreadManager(std::string pathIn, paramSyncManager* paramSyncManagerIn) { _ImageSavePathFormatter.rootDir = QString::fromStdString(pathIn); + _paramSyncManager = paramSyncManagerIn; + saveOri = _paramSyncManager->get("存储原图", true).toBool(); + saveRes = _paramSyncManager->get("存储结果图", true).toBool(); + saveSeg = _paramSyncManager->get("存储Seg图", true).toBool(); + saveCls = _paramSyncManager->get("存储Cls图", true).toBool(); } ~imgSaveThreadManager() {}; imgSaveThread saveThread; void saveImage(std::shared_ptr data) { - QString oriSavePath = _ImageSavePathFormatter.genPath(data, oriImg, data->customPath, data->customImageSaveTemplateParams);//获取文件夹名 - createDirectoryIfNotExists(oriSavePath);//不存在此文件夹则创建 - if (data->oriImgs.size() != 0) { + if (getParamTimer.elapsed() > 5000) { + saveOri = _paramSyncManager->get("存储原图", true).toBool(); + saveRes = _paramSyncManager->get("存储结果图", true).toBool(); + saveSeg = _paramSyncManager->get("存储Seg图", true).toBool(); + saveCls = _paramSyncManager->get("存储Cls图", true).toBool(); + getParamTimer.restart(); + } - std::vectorfileNames = _ImageSavePathFormatter.genFileNames(data, oriImg, data->oriImgs);//按规则为文件创建命名 - std::shared_ptr job (new saveJob("[ORI_JOB]" + data->SNcode)); - packageData(job->imgQueue, oriSavePath.toLocal8Bit().toStdString(), fileNames, data->oriImgs);//打包数据 - saveThread.addJob(job); + std::shared_ptr oriJob(new saveJob("[ORI_JOB]" + data->SNcode)); + std::shared_ptr resJob(new saveJob("[RES_JOB]" + data->SNcode)); + + QString oriSavePath = _ImageSavePathFormatter.genPath(data, oriImg, data->customPath, data->customImageSaveTemplateParams);//获取文件夹名 + if (saveOri == true || saveSeg == true || saveCls == true) + createDirectoryIfNotExists(oriSavePath);//不存在此文件夹则创建 + else { + if (data->oriImgs.size() != 0 && saveOri != false) { + std::vectorfileNames = _ImageSavePathFormatter.genFileNames(data, oriImg, data->oriImgs);//按规则为文件创建命名 + packageData(oriJob->imgQueue, oriSavePath.toLocal8Bit().toStdString(), fileNames, data->oriImgs);//打包数据 + } + //SEG原图 + if (data->segOriginImgs.size() != 0 && saveSeg != false) { + std::vectorfileNames = _ImageSavePathFormatter.genFileNames(data, segImg, data->segOriginImgs);//按规则为文件创建命名 + packageData(resJob->imgQueue, oriSavePath.toLocal8Bit().toStdString(), fileNames, data->segOriginImgs);//打包数据 + } + //CLS原图 + if (data->clsOriginImgs.size() != 0 && saveCls != false) { + std::vectorfileNames = _ImageSavePathFormatter.genClsFileNames(data, clsImg, data->clsOriginImgs);//按规则为文件创建命名 + packageData(resJob->imgQueue, oriSavePath.toLocal8Bit().toStdString(), fileNames, data->clsOriginImgs);//打包数据 + } } QString resSavePath = _ImageSavePathFormatter.genPath(data, resImg, data->customPath, data->customImageSaveTemplateParams);//获取文件夹名 - createDirectoryIfNotExists(resSavePath);//不存在此文件夹则创建 - std::shared_ptr job(new saveJob("[RES_JOB]"+ data->SNcode)); - //结果图保存 - if (data->resultImgs.size() != 0) { - std::vectorfileNames = _ImageSavePathFormatter.genFileNames(data, resImg, data->resultImgs);//按规则为文件创建命名 - packageData(job->imgQueue, resSavePath.toLocal8Bit().toStdString() ,fileNames, data->resultImgs);//打包数据 + if (saveRes == true){ + createDirectoryIfNotExists(resSavePath);//不存在此文件夹则创建 + //结果图保存 + if (data->resultImgs.size() != 0) { + std::vectorfileNames = _ImageSavePathFormatter.genFileNames(data, resImg, data->resultImgs);//按规则为文件创建命名 + packageData(resJob->imgQueue, resSavePath.toLocal8Bit().toStdString(), fileNames, data->resultImgs);//打包数据 + } } - //SEG原图 - if (data->segOriginImgs.size() != 0) { - std::vectorfileNames = _ImageSavePathFormatter.genFileNames(data, segImg, data->segOriginImgs);//按规则为文件创建命名 - packageData(job->imgQueue, oriSavePath.toLocal8Bit().toStdString(), fileNames, data->segOriginImgs);//打包数据 - } - //CLS原图 - if (data->clsOriginImgs.size() != 0) { - std::vectorfileNames = _ImageSavePathFormatter.genClsFileNames(data, clsImg, data->clsOriginImgs);//按规则为文件创建命名 - packageData(job->imgQueue, oriSavePath.toLocal8Bit().toStdString(), fileNames, data->clsOriginImgs);//打包数据 - } - saveThread.addJob(job, imgSaveThread::priority); + + if (oriJob->imgQueue.size() != 0) + saveThread.addJob(oriJob); + if (resJob->imgQueue.size() != 0) + saveThread.addJob(resJob, imgSaveThread::priority); //额外储存NG文件夹 //std::string additionalSaveNgImgPath = genDirName(data, additionalSaveNgImg); //std::vectoradditionalSaveNgImgNames = genFileNames(data, additionalSaveNgImg); @@ -269,6 +291,9 @@ public: //} } private: + bool saveOri = true, saveRes = true, saveSeg = true, saveCls = true; + QElapsedTimer getParamTimer;//防止加锁次数过多导致卡顿 + paramSyncManager* _paramSyncManager; ImageSavePathFormatter _ImageSavePathFormatter; void packageData(QQueue>& jobQueue, std::string imgSavaPath, std::vector fileNames, std::vector& mats) { if (fileNames.size() != mats.size()) diff --git a/src/launcher/appConfig/appConfig.cpp b/src/launcher/appConfig/appConfig.cpp index 786c9e8..7b14aa6 100644 --- a/src/launcher/appConfig/appConfig.cpp +++ b/src/launcher/appConfig/appConfig.cpp @@ -37,23 +37,4 @@ void appConfig::parsingSettingJson() v.viewers.assign(data.value()["viewer"].begin(), data.value()["viewer"].end()); viewDatas.push_back(v); } - - if (missionJson["backend"]["missionSettings"].contains("存储原图") == false) { - missionJson["backend"]["missionSettings"]["存储原图"] = true; - } - if (missionJson["backend"]["missionSettings"].contains("存储结果图") == false) { - missionJson["backend"]["missionSettings"]["存储结果图"] = true; - } - if (missionJson["backend"]["missionSettings"].contains("存储Seg图") == false) { - missionJson["backend"]["missionSettings"]["存储Seg图"] = true; - } - if (missionJson["backend"]["missionSettings"].contains("存储Cls图") == false) { - missionJson["backend"]["missionSettings"]["存储Cls图"] = true; - } - if (missionJson["backend"]["missionSettings"].contains("原图存图天数") == false) { - missionJson["backend"]["missionSettings"]["原图存图天数"] = true; - } - if (missionJson["backend"]["missionSettings"].contains("结果图存图天数") == false) { - missionJson["backend"]["missionSettings"]["结果图存图天数"] = true; - } }