V20251031-2.1.3

修改存图格式。
完善存图控制。
This commit is contained in:
2025-10-31 14:10:59 +08:00
parent 0c98b14cce
commit e14847698b
4 changed files with 53 additions and 47 deletions
+1 -1
View File
@@ -8,7 +8,7 @@
#include <vector>
#include <functional>
#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
+1 -1
View File
@@ -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);
+51 -26
View File
@@ -4,6 +4,7 @@
#include <qdatetime.h>
#include <backStruct.h>
#include <detData.h>
#include <paramSyncManager.h>
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 <detData> 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::vector<std::string>fileNames = _ImageSavePathFormatter.genFileNames(data, oriImg, data->oriImgs);//按规则为文件创建命名
std::shared_ptr<saveJob> job (new saveJob("[ORI_JOB]" + data->SNcode));
packageData(job->imgQueue, oriSavePath.toLocal8Bit().toStdString(), fileNames, data->oriImgs);//打包数据
saveThread.addJob(job);
std::shared_ptr<saveJob> oriJob(new saveJob("[ORI_JOB]" + data->SNcode));
std::shared_ptr<saveJob> 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::vector<std::string>fileNames = _ImageSavePathFormatter.genFileNames(data, oriImg, data->oriImgs);//按规则为文件创建命名
packageData(oriJob->imgQueue, oriSavePath.toLocal8Bit().toStdString(), fileNames, data->oriImgs);//打包数据
}
//SEG原图
if (data->segOriginImgs.size() != 0 && saveSeg != false) {
std::vector<std::string>fileNames = _ImageSavePathFormatter.genFileNames(data, segImg, data->segOriginImgs);//按规则为文件创建命名
packageData(resJob->imgQueue, oriSavePath.toLocal8Bit().toStdString(), fileNames, data->segOriginImgs);//打包数据
}
//CLS原图
if (data->clsOriginImgs.size() != 0 && saveCls != false) {
std::vector<std::string>fileNames = _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<saveJob> job(new saveJob("[RES_JOB]"+ data->SNcode));
//结果图保存
if (data->resultImgs.size() != 0) {
std::vector<std::string>fileNames = _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::vector<std::string>fileNames = _ImageSavePathFormatter.genFileNames(data, resImg, data->resultImgs);//按规则为文件创建命名
packageData(resJob->imgQueue, resSavePath.toLocal8Bit().toStdString(), fileNames, data->resultImgs);//打包数据
}
}
//SEG原图
if (data->segOriginImgs.size() != 0) {
std::vector<std::string>fileNames = _ImageSavePathFormatter.genFileNames(data, segImg, data->segOriginImgs);//按规则为文件创建命名
packageData(job->imgQueue, oriSavePath.toLocal8Bit().toStdString(), fileNames, data->segOriginImgs);//打包数据
}
//CLS原图
if (data->clsOriginImgs.size() != 0) {
std::vector<std::string>fileNames = _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::vector<std::string>additionalSaveNgImgNames = 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<std::pair<std::string, cv::Mat>>& jobQueue, std::string imgSavaPath, std::vector<std::string> fileNames, std::vector<cv::Mat>& mats) {
if (fileNames.size() != mats.size())
-19
View File
@@ -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;
}
}