稳定版本 备份
This commit is contained in:
@@ -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 = "";
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user