2025-06-05 11:30:12 +08:00
|
|
|
|
#include <qthread.h>
|
2025-03-27 18:36:54 +08:00
|
|
|
|
#include <detData.h>
|
2025-03-28 18:33:43 +08:00
|
|
|
|
#include <imgSaveThreadManager.h>
|
|
|
|
|
|
|
2025-06-05 11:30:12 +08:00
|
|
|
|
#include <cameraManager.h>
|
|
|
|
|
|
#include <triggerManager.h>
|
|
|
|
|
|
#include <detThreadManager.h>
|
2025-06-13 01:55:47 +08:00
|
|
|
|
#include <sql/qSqlBase.h>
|
|
|
|
|
|
#include <missonLoader.h>
|
|
|
|
|
|
//#include <mission/952-15-H.h>
|
2025-06-05 11:30:12 +08:00
|
|
|
|
|
2025-03-21 18:25:54 +08:00
|
|
|
|
class detProcess : public QThread
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
2025-06-13 01:55:47 +08:00
|
|
|
|
detDataManager* _detDataManager; // 检测数据管理器 需要初始化
|
|
|
|
|
|
imgSaveThreadManager* _imgSaveThreadManager;// 保存图像线程 需要初始化
|
|
|
|
|
|
triggerManager* _triggerManager; // 触发管理器
|
2025-06-05 11:30:12 +08:00
|
|
|
|
handleAiModelManager _handleAiModelManager;// 模型管理器
|
2025-06-13 01:55:47 +08:00
|
|
|
|
detThreadManager* _threadManager;
|
|
|
|
|
|
cameraManager* _cameraManager;
|
2025-06-15 03:06:01 +08:00
|
|
|
|
bool initOnce = false;
|
2025-06-05 11:30:12 +08:00
|
|
|
|
detProcess(){
|
|
|
|
|
|
//_threadManager.initialization(this);
|
|
|
|
|
|
//_manualDetThread.initialization(this);
|
|
|
|
|
|
//_cameraManager.initialization();
|
|
|
|
|
|
//_triggerManager.initialization(this);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-13 01:55:47 +08:00
|
|
|
|
void initConfig(nlohmann::json& jsonIn, qtFuncBridge* bridgeIn) {
|
2025-06-15 03:06:01 +08:00
|
|
|
|
|
|
|
|
|
|
_imgSaveThreadManager = new imgSaveThreadManager(jsonIn["imgSaveBasePath"]);
|
2025-06-13 01:55:47 +08:00
|
|
|
|
_cameraManager = new cameraManager(jsonIn, bridgeIn);
|
|
|
|
|
|
_triggerManager = new triggerManager(this, bridgeIn, jsonIn["Triggers"]);
|
|
|
|
|
|
_threadManager = new detThreadManager(this, bridgeIn);
|
|
|
|
|
|
_detDataManager = new detDataManager(_triggerManager);
|
2025-06-15 03:06:01 +08:00
|
|
|
|
if (initOnce == false) {
|
|
|
|
|
|
initOnce = true;
|
|
|
|
|
|
bridge = bridgeIn;
|
|
|
|
|
|
json = jsonIn;
|
|
|
|
|
|
connect(bridgeIn, &qtFuncBridge::reInitConfig, this, [=]() {reinitConfig(); });
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-05 11:30:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool waitrForInitResult(serviceModule* ptr, int overtimeS = 999999) {
|
|
|
|
|
|
int overTimeMs = overtimeS * 1000;
|
2025-03-28 18:33:43 +08:00
|
|
|
|
int timecnt = 0;
|
2025-06-05 11:30:12 +08:00
|
|
|
|
while (timecnt <= overTimeMs) {
|
2025-03-28 18:33:43 +08:00
|
|
|
|
if (ptr->status != NotInit)
|
|
|
|
|
|
break;
|
|
|
|
|
|
QThread::msleep(100);
|
2025-06-05 11:30:12 +08:00
|
|
|
|
timecnt += 100;
|
2025-03-28 18:33:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
if (timecnt > overTimeMs)
|
|
|
|
|
|
return false;
|
|
|
|
|
|
if (ptr->status == InitFailure)
|
|
|
|
|
|
return false;
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
2025-03-21 18:25:54 +08:00
|
|
|
|
|
2025-06-15 03:06:01 +08:00
|
|
|
|
// 重新初始化配置
|
|
|
|
|
|
void reinitConfig() {
|
|
|
|
|
|
// 1. 释放已有资源
|
|
|
|
|
|
if (_imgSaveThreadManager) { delete _imgSaveThreadManager; _imgSaveThreadManager = nullptr; }
|
|
|
|
|
|
if (_cameraManager) { delete _cameraManager; _cameraManager = nullptr; }
|
|
|
|
|
|
if (_triggerManager) { delete _triggerManager; _triggerManager = nullptr; }
|
|
|
|
|
|
if (_threadManager) { delete _threadManager; _threadManager = nullptr; }
|
|
|
|
|
|
if (_detDataManager) { delete _detDataManager; _detDataManager = nullptr; }
|
|
|
|
|
|
// 2. 重新初始化
|
|
|
|
|
|
initConfig(json, bridge);
|
|
|
|
|
|
this->start();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-13 01:55:47 +08:00
|
|
|
|
// 相机管理器
|
2025-06-05 11:30:12 +08:00
|
|
|
|
// lightSourceManager _lightSourceManager; // 光源管理器
|
|
|
|
|
|
SQLiteDB* dataBase;
|
|
|
|
|
|
// hardwareMonitor _hardwareMonitor; // 硬件监控,如CPU、内存
|
|
|
|
|
|
// camera* _2dCamera = nullptr, *_3dCamera = nullptr;
|
|
|
|
|
|
|
2025-06-11 10:00:09 +08:00
|
|
|
|
|
2025-06-05 11:30:12 +08:00
|
|
|
|
|
|
|
|
|
|
// 初始化并运行主流程
|
|
|
|
|
|
void run() {
|
|
|
|
|
|
#if 1
|
|
|
|
|
|
//dataBase = new SQLiteDB("generalDatabase");
|
2025-06-13 01:55:47 +08:00
|
|
|
|
_cameraManager->start();
|
2025-03-21 18:25:54 +08:00
|
|
|
|
_handleAiModelManager.start();
|
|
|
|
|
|
//_lightSourceManager.start();
|
2025-06-13 01:55:47 +08:00
|
|
|
|
_triggerManager->start();
|
2025-06-05 11:30:12 +08:00
|
|
|
|
|
|
|
|
|
|
/*
|
2025-03-21 18:25:54 +08:00
|
|
|
|
_summaryData = new summaryData(&_triggerManager);
|
2025-06-05 11:30:12 +08:00
|
|
|
|
*/
|
|
|
|
|
|
|
2025-06-13 01:55:47 +08:00
|
|
|
|
bool res1 = waitrForInitResult(_cameraManager);
|
2025-06-05 11:30:12 +08:00
|
|
|
|
//bool res2 = waitrForInitResult(&_handleAiModelManager);
|
2025-06-13 01:55:47 +08:00
|
|
|
|
bool res3 = waitrForInitResult(_triggerManager);
|
2025-06-05 11:30:12 +08:00
|
|
|
|
|
|
|
|
|
|
if (res1 == true && res3 == true) {
|
2025-06-13 01:55:47 +08:00
|
|
|
|
_missionLoader.loadMission(json["missionDllPath"]);
|
|
|
|
|
|
_missionLoader._misson->init(
|
|
|
|
|
|
_cameraManager,
|
|
|
|
|
|
_triggerManager,
|
|
|
|
|
|
_detDataManager,
|
|
|
|
|
|
_threadManager,
|
2025-06-15 03:06:01 +08:00
|
|
|
|
json["missionSettings"],
|
2025-06-05 11:30:12 +08:00
|
|
|
|
dataBase, bridge
|
|
|
|
|
|
);
|
2025-06-13 01:55:47 +08:00
|
|
|
|
_threadManager->registerResultHandleCallback(
|
2025-06-05 11:30:12 +08:00
|
|
|
|
[this](std::shared_ptr<detData> data) {
|
|
|
|
|
|
detectionResultHandle(data);
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2025-06-15 03:06:01 +08:00
|
|
|
|
//_threadManager->registerProcessAlgoCallback(
|
|
|
|
|
|
// [this](std::shared_ptr<detData> data, handleAiModelManager* _handleAiModelManager) {
|
|
|
|
|
|
// return _missionLoader._misson->processAlgo(data, _handleAiModelManager);
|
|
|
|
|
|
// });
|
2025-06-05 11:30:12 +08:00
|
|
|
|
|
2025-06-11 10:00:09 +08:00
|
|
|
|
emit bridge->loginResult(InitOK);
|
2025-06-05 11:30:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
else {
|
2025-06-11 10:00:09 +08:00
|
|
|
|
emit bridge->loginResult(InitFailure);
|
2025-03-21 18:25:54 +08:00
|
|
|
|
}
|
2025-06-11 10:00:09 +08:00
|
|
|
|
|
2025-03-27 18:36:54 +08:00
|
|
|
|
#endif
|
2025-03-21 18:25:54 +08:00
|
|
|
|
}
|
2025-06-05 11:30:12 +08:00
|
|
|
|
|
|
|
|
|
|
// 通用的检测结果处理
|
|
|
|
|
|
void detectionResultHandle(std::shared_ptr<detData> data) {
|
|
|
|
|
|
// 计算处理总耗时(CT)
|
2025-06-15 03:06:01 +08:00
|
|
|
|
auto totalCt = std::chrono::duration_cast<std::chrono::milliseconds>(data->algoEndTime - data->algoStartTime).count();
|
|
|
|
|
|
qDebug() << QString::fromStdString(data->cameraKeyName) << "CT<<<" << totalCt << "MS";
|
|
|
|
|
|
std::cout << "CT->" << totalCt << "ms" << std::endl;
|
2025-06-05 11:30:12 +08:00
|
|
|
|
// 将耗时数据保存入数据库或日志(伪代码)
|
|
|
|
|
|
// data->sqlVec.push_back({ "SN", data->SNcode });
|
|
|
|
|
|
// data->sqlVec.push_back({ "totalCt", std::to_string(totalCt.count()) + "ms" });
|
2025-03-21 18:25:54 +08:00
|
|
|
|
|
2025-06-05 11:30:12 +08:00
|
|
|
|
// 异步保存检测图像
|
2025-06-13 01:55:47 +08:00
|
|
|
|
std::async(std::launch::async, &imgSaveThreadManager::saveRes, _imgSaveThreadManager, data);
|
2025-03-21 18:25:54 +08:00
|
|
|
|
|
2025-06-05 11:30:12 +08:00
|
|
|
|
// 删除数据释放资源
|
2025-03-21 18:25:54 +08:00
|
|
|
|
detDataManager* dManager = data->dManager;
|
|
|
|
|
|
data->dManager->deleteDetData(data->timeCode);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-05 11:30:12 +08:00
|
|
|
|
private:
|
2025-06-13 01:55:47 +08:00
|
|
|
|
nlohmann::json json;
|
2025-06-05 11:30:12 +08:00
|
|
|
|
qtFuncBridge* bridge;
|
2025-06-13 01:55:47 +08:00
|
|
|
|
MissionLoader _missionLoader; // 任务加载器,用于加载任务配置
|
2025-03-21 18:25:54 +08:00
|
|
|
|
};
|
2025-06-05 11:30:12 +08:00
|
|
|
|
|
|
|
|
|
|
#pragma once
|