Files
handleaiuinew/HanddleAI/HandleAiUi-new/back/imgSaveThreadManager.h
T
2024-05-21 23:54:22 +08:00

115 lines
2.7 KiB
C++

#include <qthread.h>
#include <opencv.hpp>
#include <qqueue.h>
#include <sqliteManager/sqlManager.h>
#include <qdatetime.h>
#include <backStruct.h>
class backEndManager;
enum imgSaveThreadType
{
oriImgSaveThread,
resImgSaveThread
};
class imgSaveThread :public QThread
{
public:
struct imgSaveStruct {
std::string cameraKeyName;
std::string SNcode;
std::string customName;
std::string format;//留空则按原图bmp,结果图jpg
int showIndex = -1;
unsigned long long timeCode;
std::vector<cv::Mat>imgs;
};
~imgSaveThread()
{
runFlag = false;
while (this->isRunning() == true);
qDebug() << "imgSaveThread Ended";
}
imgSaveThread(imgSaveThreadType typeIn,QString pathIn)
{
type = typeIn;
switch (type)
{
case oriImgSaveThread:
path = (pathIn).toStdString() + "//yuantu//";
break;
case resImgSaveThread:
path = (pathIn).toStdString() + "//result//";
break;
}
}
void run()
{
while (runFlag)
{
while (imgQueue.size()>0)
saveImg(imgQueue.dequeue());
QThread::msleep(100);
}
}
void saveImg(imgSaveStruct& data)
{
try
{
//根据时间获取大概路径
sqlTableDatas sqlRes = sql->selectSingleData("saveHour", data.SNcode);//查找之前的数据
std::string fileSavePath = path;
if (sqlRes.rowDatas.size() > 0 && sqlRes.rowDatas[0][0].value != "")//数据存在
{
fileSavePath += sqlRes.tableName + "//" + sqlRes.rowDatas[0][0].value + "H//";
}
else//数据不存在 新建数据
{
QDateTime currentDateTime = QDateTime::currentDateTime();
std::string ymd = currentDateTime.toString("yyyy-MM-dd").toStdString();
int h = currentDateTime.time().hour();
fileSavePath += ymd + "//" + std::to_string(h) + "H//";
sql->addData(data.SNcode, { { "saveHour",std::to_string(h) } });
}
//有SN码就储存在SN码路径,无则储存在相机路径
if ((data.SNcode).length() != 0)
fileSavePath += data.SNcode + "//";
else
fileSavePath += data.cameraKeyName + "//";
createDirectoryIfNotExists(fileSavePath);//文件夹处理
std::string fileName;
{
for (int i = 0; i < data.imgs.size(); i++)
{
fileName = data.cameraKeyName + "_" + getCurrentDateTime() + "_Count" + std::to_string(i) + ".jpg";
cv::imwrite(fileSavePath + fileName, data.imgs[i]);
qInfo() << QString::fromStdString(data.cameraKeyName + " ori:" + fileSavePath + fileName);
}
}
}
catch (...)
{
return;
}
}
private:
QQueue<imgSaveStruct> imgQueue;
std::string path = "";
std::string basicFormat = "";
imgSaveThreadType type;
sqlManager* sql;
bool runFlag = true;
};
class imgSaveThreadManager
{
public:
imgSaveThreadManager(backEndManager* backEndManagerIn);
private:
backEndManager* _backEndManager;
imgSaveThread* oriSaveThread;
imgSaveThread* resSaveThread;
};
#pragma once