稳定版本 备份

This commit is contained in:
2025-07-16 16:43:20 +08:00
parent 0279c11f32
commit c971fe971e
20 changed files with 542 additions and 331 deletions
+34 -26
View File
@@ -3,6 +3,7 @@
#include <qqueue.h>
#include <qdatetime.h>
#include <backStruct.h>
#define saveImgEnable 1
enum imgSaveThreadType
{
oriImg,
@@ -48,7 +49,9 @@ public:
while (!localQueue.isEmpty()) {
auto data = std::move(localQueue.dequeue());
qDebug() << "saving img " << QString::fromStdString(data.first);
#if saveImgEnable
cv::imwrite(data.first, data.second);
#endif
// 不需要手动 release(), cv::Mat 会自动析构
}
}
@@ -96,31 +99,31 @@ class imgSaveThreadManager
{
public:
imgSaveThreadManager(std::string pathIn) {
path = pathIn;
path = QString::fromStdString(pathIn);
}
~imgSaveThreadManager() {};
void setPath(std::string pathIn){
void setPath(QString pathIn){
path = pathIn;
}
imgSaveThread saveThread;
std::string genDirName(std::shared_ptr <detData> data, imgSaveThreadType type) {
QString genDirName(std::shared_ptr <detData> data, imgSaveThreadType type) {
//sqlTableDatas sqlRes = sql->selectSingleData("saveHour", data->SNcode);//查找之前的数据
//获取关键数据
std::string imgSaveDirStr = path;//所有图片的路径 sample "D://CCD"
std::string imgTypeDirStr;//二级目录,图片类型决定 sample "Result"
std::string dateDirStr;//三级目录,日期决定 sample"2024-6-8"
std::string hourDirStr;//四级目录,小时段决定 sample "14H"
std::string okNgStr;//五级目录,OK/NG决定 sample "OK"
std::string detailNameStr;//六级目录 主要是SN,如没有sn则可能是相机名称
QString imgSaveDirStr = path;//所有图片的路径 sample "D://CCD"
QString imgTypeDirStr;//二级目录,图片类型决定 sample "Result"
QString dateDirStr;//三级目录,日期决定 sample"2024-6-8"
QString hourDirStr;//四级目录,小时段决定 sample "14H"
QString okNgStr;//五级目录,OK/NG决定 sample "OK"
QString detailNameStr;//六级目录 主要是SN,如没有sn则可能是相机名称
#pragma region 赋值
//imgTypeDirStr
switch (type)
{
case oriImg:
imgTypeDirStr = "Ori";
imgTypeDirStr = "原图";
break;
case resImg:
imgTypeDirStr = "Result";
imgTypeDirStr = "结果图";
break;
default:
imgTypeDirStr = "error";
@@ -128,20 +131,24 @@ public:
{
QDateTime currentDateTime = QDateTime::currentDateTime();
dateDirStr = currentDateTime.toString("yyyy-MM-dd").toStdString();
hourDirStr = std::to_string(currentDateTime.time().hour()) + "H//";
dateDirStr = currentDateTime.toString("yyyy-MM-dd");
hourDirStr = QString::number(currentDateTime.time().hour()) + "H//";
}
if(data->aiDetOK == true && data->halconOK == true)
okNgStr = "OK";
else
if(data->aiDetOK == false && data->halconOK == false)
okNgStr = "NG";
else if (data->aiDetOK == false)
okNgStr = "aiNG";
else if (data->halconOK == false)
okNgStr = "halconNG";
else
okNgStr = "OK";
//detailNameStr
if ((data->SNcode).length() != 0)
detailNameStr = data->SNcode;
detailNameStr = QString::fromStdString(data->SNcode);
else
detailNameStr = data->cameraKeyName;
detailNameStr = QString::fromStdString(data->cameraKeyName);
#pragma endregion
return std::string(imgSaveDirStr + "/" +
return QString(imgSaveDirStr + "/" +
imgTypeDirStr + "/" +
dateDirStr + "/" +
hourDirStr + "/" +
@@ -184,33 +191,34 @@ public:
void saveOri(std::shared_ptr <detData> data)
{
std::string fileSavePath = genDirName(data, oriImg);//获取文件夹名
QString fileSavePath = genDirName(data, oriImg);//获取文件夹名
createDirectoryIfNotExists(fileSavePath);//不存在此文件夹则创建
std::vector<std::string>fileNames = genFileNames(data, oriImg);
for (int index = 0; index < fileNames.size(); index++)
saveThread.addData(fileSavePath+fileNames[index], data->oriImgs[index]);
saveThread.addData(fileSavePath.toLocal8Bit().toStdString() + fileNames[index], data->oriImgs[index]);
int queueSize = saveThread.queueSize();
if (queueSize > 10)
qDebug() << "queueSize " << queueSize;
}
void saveRes(std::shared_ptr <detData> data)
{
std::string fileSavePath = genDirName(data, resImg);//获取文件夹名
QString fileSavePath = genDirName(data, resImg);//获取文件夹名
createDirectoryIfNotExists(fileSavePath);//不存在此文件夹则创建
//结果图保存
std::vector<std::string>resFileNames = genFileNames(data, resImg);
for (int index = 0; index < resFileNames.size(); index++)
saveThread.addData(fileSavePath + resFileNames[index], data->resultImgs[index], imgSaveThread::priority);
saveThread.addData(fileSavePath.toLocal8Bit().toStdString() + resFileNames[index], data->resultImgs[index], imgSaveThread::priority);
//seg
std::vector<std::string>segFileNames = genFileNames(data, segImg);
for (int index = 0; index < segFileNames.size(); index++)
saveThread.addData(fileSavePath + segFileNames[index], data->segOriginImgs[index]);
saveThread.addData(fileSavePath.toLocal8Bit().toStdString() + segFileNames[index], data->segOriginImgs[index]);
//cls
std::vector<std::string>clsFileNames = genFileNames(data, clsImg);
for (int index = 0; index < clsFileNames.size(); index++)
saveThread.addData(fileSavePath + clsFileNames[index], data->clsOriginImgs[index].second);
saveThread.addData(fileSavePath.toLocal8Bit().toStdString() + clsFileNames[index], data->clsOriginImgs[index].second);
//额外储存NG文件夹
//std::string additionalSaveNgImgPath = genDirName(data, additionalSaveNgImg);
@@ -235,7 +243,7 @@ public:
//}
}
private:
std::string path = "";
QString path = "";
};