|
|
#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 |