#ifndef ARITH_EOTRACKER_H #define ARITH_EOTRACKER_H #pragma once #include "Arith_Common.hpp" #include "Arith_Detector.h" #include "PIPE/API_MOT_PipeProc.h" #include "Arith_Tracker.h" #include "Arith_AI_Tracker.h" #include "TLD/API_TLD.h" void Arith_CalcTargetSysInfo(TARGET_OBJECT* pTargetObj, SINT32 nFrmNum, GLB_INPUT g_Input); class Arith_EOController { public: Arith_EOController(); ~Arith_EOController(); public: GLB_INPUT g_GLB_stInput; //系统输入信息,包含帧编号/伺服等 GLB_PCCOMMAND g_GLB_stCommand; //系统控制命令 GLB_OUTPUT g_GLB_stOutput; //系统输出结果 BBOOL g_GLB_bInitialize; //系统初始化标志 GLB_PARAMETERS g_GLB_stPara; //系统控制参数 ARIDLL_PARMA g_GLB_stArithPara; //算法参数 public: // 系统初始化 void Arith_SystemInit(SINT32 nWidth, SINT32 nHeight, GLB_SYS_MODE nSysMode, GLB_SCEN_MODE nScenMode); // 运行搜跟算法流程 BBOOL Arith_Controller(GD_VIDEO_FRAME_S img); // 导入外部目标列表 SINT32 Arith_ImportExternTargets(); // 清理内外部目标队列 void Arith_CleanTargetArray(); // 执行独立的单目标TLD流程 void Arith_SOT_RunTLDTracker(GD_VIDEO_FRAME_S img); // 获取单目标跟踪器状态 OBJECTSTATUS Arith_SOT_GetTrackerStatus(); // ----------------------锁定控制命令接口---------------------- // 接收视场内锁定指令,下一帧完成跟踪初始化 void Arith_CMD_Lock(CENTERRECT32S LockBox); // 视场内(根据位置)锁定并初始化跟踪器,返回锁定管道指针,接近通用跟踪器的接口设计 PIPE* Arith_CMD_LockAndInit(GD_VIDEO_FRAME_S img, CENTERRECT32S LockBox); // 接受视场内批号锁定并完成跟踪初始化,返回锁定管道指针 PIPE* Arith_CMD_LockIDAndInit(GD_VIDEO_FRAME_S img, SINT32 nID); // 调整主对地跟踪框 void Arith_CMD_AdjustSOTRect(int dx, int dy, int dw, int dh); // 视场外多目标锁定 SINT32 Arith_CMD_LockMultiTarget(TargetGuide* target, int num); // 解锁目标 void Arith_CMD_CancleLock(); // ----------------------工作场景切换命令接口---------------------- void Arith_CMD_SetScenMode(GLB_SCEN_MODE nScenMode); // ----------------------系统状态切换命令接口---------------------- void Arith_CMD_SetSysMode(GLB_SYS_MODE nSysMode); // ----------------------设置运行时参数接口---------------------- // 设置跟踪参数 void Arith_SetRunTimeParam(ARIDLL_PARMA config); // 读取跟踪参数 void Arith_GetRunTimeParam(ARIDLL_PARMA* config); // 读取参数配置文件 void Arith_ReadParaFile(const char* path); // 输出当前参数配置到文件 void Arith_ExportParaFile(const char* path); // 读取配置的文本流 void Arith_ReadJsonStream(const char* str); // 输出快速调试信息到流,用于叠加OSD SINT32 Arith_ExportDebugJson(char* str, SINT32 size, GLB_SCEN_MODE nWorkScene); // 单帧队列 TARGET_OBJECT* g_pFrameTargetArray; SINT32 g_TotalTargetNum; // 外部目标队列,接收来自NPU的AI识别结果 TARGET_OBJECT* g_pExternTargetArray; // 外部传入目标个数 SINT32 g_nExternTargetNum; // 红外检测器算法模块 Detectors* g_GLB_Detectors; // 管道处理框架 API_MOT_PIPE* g_GLB_PipeProc; // 跟踪器队列,用于多目标跟踪,与管道编号一一对应 Tracker_Ptr* g_GLB_Trackers; // AI跟踪信息 AIT_OUTPUT g_GLB_AITrackerInfo; // 跟踪算法参数模板,随系统创建,便于跟踪器未创建及销毁后持久化。 Tracker_Param g_GLB_TKPara_Template; // 静态跟踪器,不参与析构,保持反复解锁锁定效率 Tracker_Ptr g_pGrdTracker; Tracker_Ptr g_pSkyTracker; GLB_SCEN_MODE m_SceneType; // 场景类型,与跟踪器类型区分 private: // 系统初始化-初始化图像算法资源 void GLB_InitArithModule(SINT32 nWidth, SINT32 nHeight); // 系统初始化-算法输入参数 void GLB_InitInputs(SINT32 nWidth, SINT32 nHeight); // 系统初始化-系统控制参数 void GLB_InitSysParameters(SINT32 nWidth, SINT32 nHeight, GLB_SYS_MODE nSysMode, GLB_SCEN_MODE nScenMode); // 算法参数初始化 void GLB_InitArithParameters(); // 系统初始化-算法输出结果 void GLB_InitOutputs(void); // 获取并响应任务机指令 void CMD_GetCommand(void); // 响应算法控制命令 void CMD_RespondCommand(void); // 指令响应: 初始化PC机到跟踪板的控制命令 void CMD_CleanUpPCCommand(void); // 指令响应: 按下锁定键: 开始跟踪,或修正跟踪 void CMD_OnTrack(LockMode mode); // 指令响应: 按下解锁键: 停止跟踪 void CMD_OnCancelTrack(void); // 搜索状态下锁定 void Proc_SearchLock(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para); // SOT状态下锁定:保批号(如修改跟踪点应用不应该变批) void Proc_SOTLock(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para); // SOT状态下锁定:不保批号(如主动切批号跟踪) void Proc_SOTLock_NoRemainID(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para); // MOT状态下锁定 void Proc_MOTLock(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para); //******************************************** 算法状态处理***************************************************** BBOOL Arith_Status_SEARCH(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para); BBOOL Arith_Status_TRACK(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para, ARIDLL_PARMA &g_stArithPara); BBOOL Arith_Status_WAIT(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para); BBOOL Arith_Status_LOST(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para); BBOOL Arith_Status_FSCAN(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para); BBOOL Arith_Status_SCAN(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para); BBOOL Arith_Status_MOTRACK(GD_VIDEO_FRAME_S img, GLB_INPUT& g_Input, GLB_PARAMETERS& g_para, ARIDLL_PARMA& g_stArithPara);//多目标跟踪,支持多个锁定 // 释放所有跟踪器资源 void GLB_Release_Trackers(SINT32 nPipeNum); public: GLB_PCCOMMAND g_GLB_stCommand_Pre; //记录指令 }; #endif