V20251031-2.1.3
修改存图格式。 完善存图控制。
This commit is contained in:
+1
-1
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user