|
|
|
|
|
#ifndef ARITH_TRACKER_H
|
|
|
|
|
|
#define ARITH_TRACKER_H
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "Arith_Common.hpp"
|
|
|
|
|
|
#include "Arith_TrackSAObj.h"
|
|
|
|
|
|
#include "Arith_SkyTracker.h"
|
|
|
|
|
|
#include "Arith_GroundTracker.h"
|
|
|
|
|
|
#include "API_MOT_PipeProc.h"
|
|
|
|
|
|
#include "Arith_CustomTracker.h"
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪器中数据结构使用说明
|
|
|
|
|
|
/*
|
|
|
|
|
|
* TARGET_OBJECT -- 单帧跟踪结果
|
|
|
|
|
|
* OBJECTSTATUS -- 连续跟踪结果,每个跟踪器的主要输出内容
|
|
|
|
|
|
* PIPE -- 转入跟踪前的目标信息,跟踪完毕后将跟踪信息更新到PIPE,统一管理批号。
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪器参数,按照跟踪器类型分别设置
|
|
|
|
|
|
typedef struct tagTracker_Param
|
|
|
|
|
|
{
|
|
|
|
|
|
Param_SkyTracker skyParam;
|
|
|
|
|
|
Param_GroundTracker grdParam;
|
|
|
|
|
|
}Tracker_Param;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Tracker
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 使用默认参数初创建跟踪器
|
|
|
|
|
|
Tracker(SINT32 nWidth, SINT32 nHeight, GLB_SCEN_MODE type);
|
|
|
|
|
|
|
|
|
|
|
|
// 使用指定参数创建跟踪器
|
|
|
|
|
|
Tracker(SINT32 nWidth, SINT32 nHeight, GLB_SCEN_MODE type, Tracker_Param PARA);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~Tracker();
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪初始化:统一使用管道作为接口
|
|
|
|
|
|
bool Init(GD_VIDEO_FRAME_S img, PIPE* pLockPipe, GLB_INPUT* p_GLB_Input);
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪
|
|
|
|
|
|
bool Track(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, API_MOT_PIPE* g_GLB_PipeProc, ARIDLL_PARMA* g_stArithPara);
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪器解锁
|
|
|
|
|
|
void Cancle();
|
|
|
|
|
|
|
|
|
|
|
|
// 输出AI跟踪器的控制决策信息
|
|
|
|
|
|
AIT_Command GetAIT_Cmd();
|
|
|
|
|
|
|
|
|
|
|
|
// 获取AI跟踪器结果
|
|
|
|
|
|
void SetAIT_Info(AIT_OUTPUT* out);
|
|
|
|
|
|
|
|
|
|
|
|
// 设置跟踪参数
|
|
|
|
|
|
void SetParam(Tracker_Param PARA);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪器重捕背景管道,用新管道重置tracker模型与运动模型,保留原管道告警信息
|
|
|
|
|
|
bool ResetByBackPipe(PIPE* pNewPipe, GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input,BBOOL bReInit);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取跟踪参数
|
|
|
|
|
|
Tracker_Param GetParam();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 输出跟踪框
|
|
|
|
|
|
RECT32S getTrackerBox();
|
|
|
|
|
|
|
|
|
|
|
|
//// 强制记忆跟踪
|
|
|
|
|
|
//void SetMemTrack(bool bMemFlag);
|
|
|
|
|
|
|
|
|
|
|
|
//// 跟踪器输出
|
|
|
|
|
|
bool UpdateTracker2Pipe(GLB_INPUT* p_GLB_Input, GLB_SCEN_MODE type, PIPE* pPipeOut,API_MOT_PIPE* g_GLB_PipeProc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
API_TLD* GetpTLDTracker();//返回跟踪器中的TLD对象实例指针
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
GLB_SCEN_MODE m_type; //跟踪器类型,这里使用组合而非继承
|
|
|
|
|
|
SkyTracker* pSkyTracker;
|
|
|
|
|
|
GroundTracker* pGroundTracker;
|
|
|
|
|
|
CustomTracker* pCustomTracker;
|
|
|
|
|
|
|
|
|
|
|
|
OBJECTSTATUS ObjStatus;// 跟踪结果,用于输出
|
|
|
|
|
|
PIPE* m_LockingPipe;//锁定管道指针,指向PIPE队列锁定目标,初始化赋值
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 注意:和cv::Tracker冲突,所以这里使用::Tracker表明非namespace符号
|
|
|
|
|
|
// 以下三种取名方式均可
|
|
|
|
|
|
|
|
|
|
|
|
//#define Tracker_Ptr Tracker*
|
|
|
|
|
|
//using Tracker_Ptr = ::Tracker*;
|
|
|
|
|
|
typedef ::Tracker* Tracker_Ptr;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|