更新,完善检测算法
This commit is contained in:
@@ -2,12 +2,9 @@
|
||||
#include <FrontendBackendBridge.h>
|
||||
#include <sqlManager/sqlManager.h>
|
||||
#include <imgSaveThreadManager.h>
|
||||
#include <triggerManager.h>
|
||||
#include <algo/ALGO_MAIN.h>
|
||||
|
||||
#include <algo/ALGO_Test.h>
|
||||
#include <algo/ALGO_Correction.h>
|
||||
#include <algo/ALGO_Inspection.h>
|
||||
|
||||
using namespace std;
|
||||
void createDirectoryIfNotExists_2(const std::string& path) {
|
||||
// 检查路径是否存在
|
||||
if (!std::filesystem::exists(path)) {
|
||||
@@ -50,6 +47,8 @@ void threadManager::init(backEndManager* _backEndManagerIn)
|
||||
_backEndManager = _backEndManagerIn;
|
||||
sql = &_backEndManager->_sqlManager;
|
||||
_imgSaveThreadManager = _backEndManagerIn->_imgSaveThreadManager;
|
||||
_triggerManager = _backEndManagerIn->_triggerManager;
|
||||
_handleAiModelManager = _backEndManager->_handleAiModelManager;
|
||||
this->start();
|
||||
}
|
||||
void threadManager::process()
|
||||
@@ -67,7 +66,7 @@ void threadManager::process()
|
||||
std::shared_ptr<detData> ptr = *it;
|
||||
if (ptr->oriImgs.size() >= ptr->imgAmountMin)
|
||||
{
|
||||
algoFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, ALGO_Inspection, ptr)));
|
||||
algoFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, processAlgo, ptr,_handleAiModelManager)));
|
||||
processData.push_back(ptr);
|
||||
|
||||
it = waitImgData.erase(it);
|
||||
@@ -81,10 +80,12 @@ void threadManager::process()
|
||||
{
|
||||
std::shared_ptr<detData> ptr = *it;
|
||||
futrueIte = algoFutures.find(ptr->timeCode);
|
||||
if (futrueIte->second.wait_for(zeroSec)== std::future_status::ready)
|
||||
if (futrueIte->second.wait_for(zeroSec) == std::future_status::ready)
|
||||
{
|
||||
resultData.push_back(ptr);
|
||||
resultFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, &threadManager::resultHandle, this, ptr)));
|
||||
bool res= futrueIte->second.get();
|
||||
//resultData.push_back(ptr);
|
||||
//resultFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, &threadManager::resultHandle, this, ptr)));
|
||||
std::async(std::launch::async, &threadManager::resultHandle, this, ptr);
|
||||
|
||||
it = processData.erase(it);
|
||||
algoFutures.erase(futrueIte);
|
||||
@@ -94,19 +95,19 @@ void threadManager::process()
|
||||
}
|
||||
#pragma endregion
|
||||
#pragma region 等待结果并执行显示图片等操作
|
||||
for (auto it = resultData.begin(); it != resultData.end();)
|
||||
{
|
||||
std::shared_ptr<detData> ptr = *it;
|
||||
futrueIte = resultFutures.find(ptr->timeCode);
|
||||
if (futrueIte->second.wait_for(zeroSec) == std::future_status::ready)
|
||||
{
|
||||
//for (auto it = resultData.begin(); it != resultData.end();)
|
||||
//{
|
||||
// std::shared_ptr<detData> ptr = *it;
|
||||
// futrueIte = resultFutures.find(ptr->timeCode);
|
||||
// if (futrueIte->second.wait_for(zeroSec) == std::future_status::ready)
|
||||
// {
|
||||
|
||||
it = resultData.erase(it);
|
||||
resultFutures.erase(futrueIte);
|
||||
}
|
||||
else
|
||||
++it;
|
||||
}
|
||||
// it = resultData.erase(it);
|
||||
// resultFutures.erase(futrueIte);
|
||||
// }
|
||||
// else
|
||||
// ++it;
|
||||
//}
|
||||
#pragma endregion
|
||||
|
||||
}
|
||||
@@ -115,13 +116,16 @@ void threadManager::resultHandle(std::shared_ptr <detData> data)
|
||||
//储存结果图
|
||||
_imgSaveThreadManager->resSaveThread->imgDataQueue.append(data);
|
||||
//发送图片
|
||||
QPixmap pixmap;
|
||||
cvMatToQPixMap(data->resultImgs[0], pixmap);
|
||||
showImgPack* pack = new showImgPack();
|
||||
pack->img = pixmap;
|
||||
pack->type = imgWidgetRes;
|
||||
pack->index = data->oriShowIndex;
|
||||
emit _backEndManager->sendPixmapImageWidget(pack);
|
||||
if(data->resultImgs.size()>0)
|
||||
{
|
||||
QPixmap pixmap;
|
||||
cvMatToQPixMap(data->resultImgs[0], pixmap);
|
||||
showImgPack* pack = new showImgPack();
|
||||
pack->img = pixmap;
|
||||
pack->type = imgWidgetRes;
|
||||
pack->index = data->oriShowIndex;
|
||||
emit _backEndManager->sendPixmapImageWidget(pack);
|
||||
}
|
||||
|
||||
//SQL
|
||||
std::vector<sqlData> sqlDatas;
|
||||
@@ -129,6 +133,10 @@ void threadManager::resultHandle(std::shared_ptr <detData> data)
|
||||
sqlDatas.push_back({ sqlData.first, std::to_string(sqlData.second) });
|
||||
sql->addData(data->SNcode, sqlDatas);
|
||||
|
||||
//写入plc
|
||||
for (auto writeBackStr : data->writeBackData)
|
||||
_triggerManager->sendFinsMsg(writeBackStr);
|
||||
|
||||
//提交清理申请
|
||||
detDataManager* dManager = data->dManager;
|
||||
data->dManager->deleteDetData(data->timeCode);
|
||||
@@ -143,14 +151,9 @@ void threadManager::run()
|
||||
}
|
||||
void threadManager::addTask(std::shared_ptr <detData> data)
|
||||
{
|
||||
//{
|
||||
// CameraListCls::datastruct _struct = bridge.back.json.camera.getData(data->cameraKeyName);
|
||||
// data->oriShowIndex = _struct.showIndex;
|
||||
//}
|
||||
insertQueueMutex.lock();
|
||||
insertQueue.enqueue(data);
|
||||
insertQueueMutex.unlock();
|
||||
//this->start();
|
||||
}
|
||||
threadManager::~threadManager()
|
||||
{
|
||||
@@ -182,12 +185,12 @@ bool sncodeCls::clearSameSnRequestData()
|
||||
}
|
||||
return true;
|
||||
}
|
||||
void sncodeCls::checkSnFromWaittingVec(QByteArray byte)
|
||||
void sncodeCls::checkSnFromWaittingVec(QByteArray plcByte)
|
||||
{
|
||||
while (clearSameSnRequestData() == false);
|
||||
for (int i = 0; i < snWaittingVec.size(); i++)
|
||||
{//第一位是hash,第二位是index
|
||||
string SN = readSnFromQByteArray(byte, snWaittingVec[i].startpos, false, true, 0);
|
||||
std::string SN = readSnFromQByteArray(plcByte, snWaittingVec[i].startpos, false, true, 0);
|
||||
if (SN.compare(snErrorsnError))//不为空
|
||||
{
|
||||
snResList.push_back({ snWaittingVec[i].timecode,SN,snWaittingVec[i].startpos });
|
||||
@@ -199,28 +202,28 @@ void sncodeCls::checkSnFromWaittingVec(QByteArray byte)
|
||||
}
|
||||
|
||||
//FINSEDIT
|
||||
string sncodeCls::readSnFromQByteArray(QByteArray byte, int dmPos,
|
||||
std::string sncodeCls::readSnFromQByteArray(QByteArray plcByte, int dmPos,
|
||||
bool highLowConversion, bool clearAfterRead, long long timeCode, int Size)
|
||||
{
|
||||
int triggerPos = (dmPos - tcpStartPos) * 2;
|
||||
if (triggerPos < 0)
|
||||
{
|
||||
cout << "Read SN error,trigger is DM:" << dmPos << ",but read start at DM:" << tcpStartPos << endl;
|
||||
std::cout << "Read SN error,trigger is DM:" << dmPos << ",but read start at DM:" << tcpStartPos << endl;
|
||||
return snErrorsnError;
|
||||
}
|
||||
QString str;
|
||||
if (byte.at(triggerPos + 1) == 0 && byte.at(triggerPos) == 0)
|
||||
if (plcByte.at(triggerPos + 1) == 0 && plcByte.at(triggerPos) == 0)
|
||||
return snErrorsnError;
|
||||
int snCount = 0;
|
||||
while (byte.at(snCount + triggerPos) != 0 || byte.at(snCount + triggerPos + 1) != 0)
|
||||
while (plcByte.at(snCount + triggerPos) != 0 || plcByte.at(snCount + triggerPos + 1) != 0)
|
||||
{
|
||||
|
||||
if (byte.at(snCount + triggerPos) == 0)
|
||||
if (plcByte.at(snCount + triggerPos) == 0)
|
||||
{
|
||||
snCount++;
|
||||
continue;
|
||||
}
|
||||
str += QChar(byte.at(snCount + triggerPos));
|
||||
str += QChar(plcByte.at(snCount + triggerPos));
|
||||
snCount++;
|
||||
}
|
||||
if (highLowConversion == true)
|
||||
@@ -244,7 +247,7 @@ QString sncodeCls::snHex(QString sn)
|
||||
}
|
||||
return resultStr;
|
||||
}
|
||||
string sncodeCls::getData(unsigned long long timeCode)
|
||||
std::string sncodeCls::getData(unsigned long long timeCode)
|
||||
{
|
||||
for (int i = snResList.size() - 1; i >= 0; i--)
|
||||
{
|
||||
@@ -253,10 +256,10 @@ string sncodeCls::getData(unsigned long long timeCode)
|
||||
}
|
||||
return snErrorsnError;
|
||||
}
|
||||
string sncodeCls::waitForSn(unsigned long long timeCode, int timeOut)
|
||||
std::string sncodeCls::waitForSn(unsigned long long timeCode, int timeOut)
|
||||
{
|
||||
int cnt = 0;
|
||||
string sn = getData(timeCode);
|
||||
std::string sn = getData(timeCode);
|
||||
if (!sn.compare(snErrorsnError))
|
||||
{
|
||||
|
||||
|
||||
Reference in New Issue
Block a user