140 lines
3.9 KiB
C++
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 |