Files
eUi/src/Core/detProcess.hpp
T

111 lines
4.5 KiB
C++
Raw Normal View History

2025-06-05 11:30:12 +08:00
#include <qthread.h>
2025-07-09 16:03:18 +08:00
#include <serviceManager.h>
2025-06-13 01:55:47 +08:00
#include <sql/qSqlBase.h>
#include <missonLoader.h>
2025-07-09 16:03:18 +08:00
#include <CLIManager.h>
2025-08-15 16:36:54 +08:00
#include <back/missionResultHandle.h>
class detProcess : public QThread
{
public:
2025-08-15 16:36:54 +08:00
CsvWriter* _csvWriter = nullptr;
missonResultHandle* _missonResultHandle = nullptr;
2025-07-09 16:03:18 +08:00
ServiceManager _serviceManager;
CLIManager* _cliManager; // 命令行接口管理器
2025-07-09 16:03:18 +08:00
bool initOnce = false;
2025-08-31 16:51:18 +08:00
detProcess(SQLiteDB* dbIn, nlohmann::ordered_json& jsonIn, qtFuncBridge* bridgeIn):
db(dbIn),bridge(bridgeIn),json(jsonIn){
2025-06-05 11:30:12 +08:00
}
2025-08-31 16:51:18 +08:00
void init() {
_serviceManager._imgSaveThreadManager = new imgSaveThreadManager(json["imgSaveBasePath"]);
_serviceManager._cameraManager = new cameraManager(json, bridge);
_serviceManager._triggerManager = new triggerManager(this, bridge, json["Triggers"]);
2025-07-09 16:03:18 +08:00
_serviceManager._detDataManager = new detDataManager(_serviceManager._triggerManager);
2025-06-15 03:06:01 +08:00
if (initOnce == false) {
initOnce = true;
2025-08-31 16:51:18 +08:00
_csvWriter = new CsvWriter(db);
2025-08-15 16:36:54 +08:00
_missonResultHandle = new missonResultHandle(bridge);
_serviceManager._missonResultHandle = _missonResultHandle;
2025-08-31 16:51:18 +08:00
_serviceManager.dataBase = db;
2025-08-15 16:36:54 +08:00
_serviceManager._csvWriter = _csvWriter;
2025-08-31 16:51:18 +08:00
_serviceManager._handleAiModelManager = new handleAiModelManager(json, bridge);
connect(bridge, &qtFuncBridge::reInitConfig, this, [=]() {reinitConfig(); });
_cliManager = new CLIManager(&_serviceManager, bridge);
2025-06-15 03:06:01 +08:00
}
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-06-15 03:06:01 +08:00
// 重新初始化配置
void reinitConfig() {
// 1. 释放已有资源
2025-07-09 16:03:18 +08:00
if (_serviceManager._imgSaveThreadManager) { delete _serviceManager._imgSaveThreadManager; _serviceManager._imgSaveThreadManager = nullptr; }
if (_serviceManager._cameraManager) { delete _serviceManager._cameraManager; _serviceManager._cameraManager = nullptr; }
if (_serviceManager._triggerManager) { delete _serviceManager._triggerManager; _serviceManager._triggerManager = nullptr; }
2025-08-31 16:51:18 +08:00
//if (_serviceManager._threadManager) { delete _serviceManager._threadManager; _serviceManager._threadManager = nullptr; }
2025-07-09 16:03:18 +08:00
if (_serviceManager._detDataManager) { delete _serviceManager._detDataManager; _serviceManager._detDataManager = nullptr; }
2025-06-15 03:06:01 +08:00
// 2. 重新初始化
2025-08-31 16:51:18 +08:00
init();
2025-06-15 03:06:01 +08:00
this->start();
}
2025-06-05 11:30:12 +08:00
// 初始化并运行主流程
void run() {
#if 1
2025-07-25 00:29:52 +08:00
//_pythonLoader.cao();
2025-07-09 16:03:18 +08:00
_serviceManager._cameraManager->start();
_serviceManager._handleAiModelManager->start();
//_lightSourceManager.start();
2025-07-09 16:03:18 +08:00
_serviceManager._triggerManager->start();
bool res1 = waitrForInitResult(_serviceManager._cameraManager);
bool res2 = waitrForInitResult(_serviceManager._handleAiModelManager);
bool res3 = waitrForInitResult(_serviceManager._triggerManager);
2025-06-05 11:30:12 +08:00
2025-07-09 16:03:18 +08:00
if (res1 == true && res2 == true && res3 == true) {
2025-06-13 01:55:47 +08:00
_missionLoader.loadMission(json["missionDllPath"]);
2025-08-15 16:36:54 +08:00
_missionLoader.getMisson(json["missionDllPath"])->init(
2025-07-09 16:03:18 +08:00
&_serviceManager,
2025-08-31 16:51:18 +08:00
json["missionSettings"], bridge
2025-06-05 11:30:12 +08:00
);
_cliManager->initBasicPreset();
2025-07-09 16:03:18 +08:00
//_threadManager->registerResultHandleCallback(
// [this](std::shared_ptr<detData> data) {
// detectionResultHandle(data);
// });
2025-06-05 11:30:12 +08:00
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-07-25 00:29:52 +08:00
emit bridge->initResult(InitOK);
2025-06-05 11:30:12 +08:00
}
else {
2025-07-25 00:29:52 +08:00
emit bridge->initResult(InitFailure);
}
2025-08-15 16:36:54 +08:00
//_missonResultHandle->test();
#endif
}
2025-06-05 11:30:12 +08:00
private:
2025-08-15 16:36:54 +08:00
nlohmann::ordered_json json;
2025-08-31 16:51:18 +08:00
SQLiteDB* db;
2025-06-05 11:30:12 +08:00
qtFuncBridge* bridge;
2025-06-13 01:55:47 +08:00
MissionLoader _missionLoader; // 任务加载器,用于加载任务配置
};
2025-06-05 11:30:12 +08:00
#pragma once