You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
6.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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