Files
handleaiuinew/HanddleAI/HandleAiUi-new/back/imgSaveThreadManager.h
T

140 lines
3.9 KiB
C++

#include <qthread.h>
#include <opencv.hpp>
#include <qqueue.h>
#include <sqlManager/sqlManager.h>
#include <qdatetime.h>
#include <backStruct.h>
#include <threadPoolManager.h>
class backEndManager;
enum imgSaveThreadType
{
oriImgSaveThread,
resImgSaveThread
};
class imgSaveThread :public QThread
{
public:
~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 (imgDataQueue.size()>0)
saveImg(imgDataQueue.dequeue());
QThread::msleep(1000);
}
}
void saveImg(std::shared_ptr <detData> 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 (auto str : data->imgSaveFileParameter)
fileName += str + "_";
std::string segClsDirName;
switch (type)
{
case oriImgSaveThread:
for (int i = 0; i < data->oriImgs.size(); i++)
{
cv::imwrite(fileSavePath + fileName + getCurrentDateTime() + "_Count" + std::to_string(i) + ".bmp", data->oriImgs[i]);
qInfo() << QString::fromStdString(data->cameraKeyName + " ori:" + fileSavePath + fileName);
}
break;
case resImgSaveThread:
for (int i = 0; i < data->resultImgs.size(); i++)
{
cv::imwrite(fileSavePath + fileName + getCurrentDateTime() + "_Count" + std::to_string(i) + ".jpg", data->resultImgs[i]);
qInfo() << QString::fromStdString(data->cameraKeyName + " ori:" + fileSavePath + fileName);
}
//保存seg原图和cls原图
segClsDirName = fileSavePath + "detImgs//"+ getCurrentDateTime()+"//";
createDirectoryIfNotExists(segClsDirName);//文件夹处理
for (int i = 0; i < data->segOriginImgs.size(); i++)
{
;
cv::imwrite(segClsDirName + fileName + "SEG_Count_" + getCurrentDateTime() + "_" + std::to_string(i) + ".bmp", data->segOriginImgs[i]);
//qInfo() << QString::fromStdString(data->cameraKeyName + " ori:" + fileSavePath + fileName);
}
for (int i = 0; i < data->clsOriginImgs.size(); i++)
{
cv::imwrite(segClsDirName + fileName + "CLS_RES" + getCurrentDateTime() + "_" + std::to_string(data->clsOriginImgs[i].second) + "_Count" + std::to_string(i) + ".bmp", data->clsOriginImgs[i].first);
//qInfo() << QString::fromStdString(data->cameraKeyName + " ori:" + fileSavePath + fileName);
}
break;
}
}
catch (...)
{
return;
}
}
QQueue<std::shared_ptr <detData>> imgDataQueue;
private:
std::string path = "";
std::string basicFormat = "";
imgSaveThreadType type;
sqlManager* sql;
bool runFlag = true;
};
class imgSaveThreadManager
{
public:
imgSaveThreadManager(backEndManager* backEndManagerIn);
~imgSaveThreadManager();
imgSaveThread* oriSaveThread;
imgSaveThread* resSaveThread;
void start()
{
oriSaveThread->start();
resSaveThread->start();
}
private:
backEndManager* _backEndManager;
};
#pragma once