|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "Arith_Common.hpp"
|
|
|
|
|
|
#include "Arith_TrackSAObj.h"
|
|
|
|
|
|
#include "KCF/API_KCF_Tracker.h"
|
|
|
|
|
|
#include "Arith_BkgMonitor.h"
|
|
|
|
|
|
#include "API_MOT_PipeProc.h"
|
|
|
|
|
|
#include "SVM/svm.h"
|
|
|
|
|
|
#include "Matcher/Fast_Matcher.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 决策行为
|
|
|
|
|
|
enum Act
|
|
|
|
|
|
{
|
|
|
|
|
|
Credit = 1, //采信
|
|
|
|
|
|
Reset = -1, //重置
|
|
|
|
|
|
Adjust = 2, //重置位置,不更新跟踪模型
|
|
|
|
|
|
Remain = 0, //保持,不做处理
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 决策策略
|
|
|
|
|
|
struct DecPolicy
|
|
|
|
|
|
{
|
|
|
|
|
|
Act Act_SATracker;
|
|
|
|
|
|
Act Act_KCFTracker;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//邻居目标特征 + 邻居目标与主跟踪目标的关系结构体,单帧信息
|
|
|
|
|
|
typedef struct tagFrmAlarmInfo
|
|
|
|
|
|
{
|
|
|
|
|
|
BBOOL bLost; //邻居目标当前状态是否在记忆
|
|
|
|
|
|
UINT32 unFrmId; //当前帧编号
|
|
|
|
|
|
POINT32F pfCenPos; //区域的中心点坐标
|
|
|
|
|
|
ANGLE32F afAngle; //目标方位角、俯仰角
|
|
|
|
|
|
SIZE16S snSize; //目标宽高
|
|
|
|
|
|
FLOAT32 fRelationIOU; //主跟踪目标上下帧之间的IOU
|
|
|
|
|
|
DIST32F fCenDisXY; //主跟踪目标的中心点上下帧距离
|
|
|
|
|
|
}FrmAlarmInfo;
|
|
|
|
|
|
|
|
|
|
|
|
//邻居目标与主跟踪目标的关系结构体,仅统计观测区域范围内,代表一个周围目标的多帧信息
|
|
|
|
|
|
typedef struct tagPipeMainAlarmInfo
|
|
|
|
|
|
{
|
|
|
|
|
|
BBOOL bOccupy; //表示被占用标记
|
|
|
|
|
|
UBYTE8 ubEnd; //队列尾(控制角度位置,实时刷新)
|
|
|
|
|
|
UBYTE8 ubJudgePoint; //判别点,设置判别点间隔进行输出
|
|
|
|
|
|
UINT16 nCountNum; //实际队列占用,可用于标识队列是否占满
|
|
|
|
|
|
SINT32 nAlarmBatchID; //管道告警编号
|
|
|
|
|
|
FrmAlarmInfo frmAlarmInfo[MAIN_ALARM_DEPTH_MAX];//单帧
|
|
|
|
|
|
}PipeMainAlarmInfo;
|
|
|
|
|
|
|
|
|
|
|
|
class SkyTracker
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
SkyTracker(SINT32 nWidth, SINT32 nHeight);
|
|
|
|
|
|
SkyTracker(SINT32 nWidth, SINT32 nHeight, Param_SkyTracker para);
|
|
|
|
|
|
~SkyTracker();
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪参数,可接收外部传入
|
|
|
|
|
|
Param_SkyTracker mTrakingPara;
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪初始化:统一使用管道作为接口
|
|
|
|
|
|
bool Init(GD_VIDEO_FRAME_S img, PIPE* pLockPipe, GLB_INPUT* g_GLB_Input);
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪
|
|
|
|
|
|
bool Track(GD_VIDEO_FRAME_S img, GLB_INPUT* g_GLB_Input, API_MOT_PIPE* g_GLB_PipeProc, ARIDLL_PARMA* g_stArithPara);
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪器解锁
|
|
|
|
|
|
void Cancle();
|
|
|
|
|
|
|
|
|
|
|
|
// 强制记忆跟踪
|
|
|
|
|
|
void SetMemTrack(bool bMemFlag);
|
|
|
|
|
|
|
|
|
|
|
|
// 设置跟踪参数
|
|
|
|
|
|
void SetSkyParam(Param_SkyTracker PARA);
|
|
|
|
|
|
|
|
|
|
|
|
// 获取跟踪参数
|
|
|
|
|
|
Param_SkyTracker GetSkyParam();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪结果,用于输出
|
|
|
|
|
|
OBJECTSTATUS ObjStatus;
|
|
|
|
|
|
|
|
|
|
|
|
// 输出小面目标跟踪波门
|
|
|
|
|
|
CENTERRECT getSATracker_SrBox();
|
|
|
|
|
|
|
|
|
|
|
|
// 输出kcf波门
|
|
|
|
|
|
CENTERRECT getKCFTracker_SrBox();
|
|
|
|
|
|
|
|
|
|
|
|
// 输出小面目标类型
|
|
|
|
|
|
SizeType getSATracker_SizeType();
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 输出跟踪阶段小面目标列表
|
|
|
|
|
|
TARGET_OBJECT* getTrackerSATargetList(SINT32& num);
|
|
|
|
|
|
|
|
|
|
|
|
//返回小目标跟踪极值点
|
|
|
|
|
|
POINT16S* GetDST_MaxPoint_Sky();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PIPE* m_LockingPipe;//锁定管道指针,指向PIPE队列锁定目标,初始化赋值
|
|
|
|
|
|
|
|
|
|
|
|
TARGET_OBJECT mTargetFusion;//跟踪器的输出"目标",广义的单帧跟踪结果
|
|
|
|
|
|
|
|
|
|
|
|
// 跟踪融合
|
|
|
|
|
|
bool TrackDecision(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input);
|
|
|
|
|
|
|
|
|
|
|
|
// 产生决策
|
|
|
|
|
|
DecPolicy Decision(GD_VIDEO_FRAME_S img);
|
|
|
|
|
|
// KCF+CEND决策处理
|
|
|
|
|
|
DecPolicy TO_TrackDecisionOf_KCF_CEND(GD_VIDEO_FRAME_S img);
|
|
|
|
|
|
|
|
|
|
|
|
// 决策处理
|
|
|
|
|
|
bool ApplyDecision(DecPolicy policy, GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input);
|
|
|
|
|
|
|
|
|
|
|
|
// 自动切换跟踪目标模式,内部自闭环
|
|
|
|
|
|
void SetTrackModeAuto(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input);
|
|
|
|
|
|
|
|
|
|
|
|
//小面目标跟踪器(对空)
|
|
|
|
|
|
SA_Tracker* pSATracker;
|
|
|
|
|
|
|
|
|
|
|
|
//kcf跟踪器(通用)
|
|
|
|
|
|
API_KCF_Tracker* pKCFTracker;
|
|
|
|
|
|
|
|
|
|
|
|
// 背景场景监控(对空)
|
|
|
|
|
|
BkgMonitor* pBkgMonitor;
|
|
|
|
|
|
|
|
|
|
|
|
// 模板匹配句柄
|
|
|
|
|
|
templateMatching::Fast_Matcher* matcher;
|
|
|
|
|
|
|
|
|
|
|
|
// 强制记忆跟踪标记
|
|
|
|
|
|
bool m_bSetMemoryTrack;
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
SINT32 g_GLB_nTrackDecisionCnt;//决策帧计数
|
|
|
|
|
|
|
|
|
|
|
|
// 对空跟踪结果和参数输出
|
|
|
|
|
|
TSky_Output m_TSky_Output;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
|
|
|
|
bool bsvmInitDone;//
|
|
|
|
|
|
|
|
|
|
|
|
PipeMainAlarmInfo* pipeAlarmInfo; // 主跟踪管道对应的信息缓存,用于在告警操作中进行类别确认
|
|
|
|
|
|
|
|
|
|
|
|
struct svm_model* model;
|
|
|
|
|
|
|
|
|
|
|
|
struct svm_node* x;
|
|
|
|
|
|
|
|
|
|
|
|
struct svm_parameter svmParm;
|
|
|
|
|
|
|
|
|
|
|
|
void RecordAlarmInfo(PIPE* pPipe);
|
|
|
|
|
|
void AlarmClassVerify(PIPE* pPipe);
|
|
|
|
|
|
};
|