|
|
/*********版权所有(C)2014,武汉高德红外股份有限公司***************
|
|
|
* 文件名称:Arith_AIDMonitor.h
|
|
|
* 文件标识:目标跟踪
|
|
|
* 内容摘要:执行目标跟踪操作
|
|
|
* 其它说明:无
|
|
|
* 当前版本:固化V2.0
|
|
|
* 创建作者:08400yll
|
|
|
* 创建日期:2024.09.02
|
|
|
*
|
|
|
* 创建记录:
|
|
|
* 修改日期:2022.09.05
|
|
|
* 版 本 号:固化V1.0
|
|
|
* 修 改 人:yll08400
|
|
|
* 内容:1)重捕区域从目标丢失后向外扩展,观测区域设置为固定区域;
|
|
|
* 2)。
|
|
|
* 3)。
|
|
|
* 4)。
|
|
|
* 修改记录2:…
|
|
|
*******************************************************************/
|
|
|
#ifndef __Arith_TRACK_AI_MAIN_PIPE_H__
|
|
|
#define __Arith_TRACK_AI_MAIN_PIPE_H__
|
|
|
|
|
|
#include "Arith_Common.hpp"
|
|
|
#include "PIPE/API_MOT_PipeProc.h"
|
|
|
//#include "KCF/API_KCF_Tracker.h"
|
|
|
#include "opencv2/opencv.hpp"
|
|
|
|
|
|
#define AID_DEPTH_MAX 50 //AID监控邻居目标帧长度
|
|
|
#define AID_NEIBOR_MAX 30 //AID监控邻居目标最大个数
|
|
|
|
|
|
#define AID_FOOT_STEP 0.2 //AID监控踩点的帧频倍率,0.5表示p_GLB_Input->unFreq * AID_FOOT_STEP
|
|
|
#define AID_FAST_FRM_PARM 3 //AID监控踩点计算要求最小个数,比如运动方向相似性需要至少3个踩点
|
|
|
//表示AID_FAST_FRM_PARM * p_GLB_Input->unFreq * AID_FOOT_STEP才能使用轨迹判断
|
|
|
|
|
|
#define AID_SLOW_FRM_PARM 6 //AID监控踩点计算要求最小个数,比如轨迹相似性需要至少6个踩点
|
|
|
|
|
|
#define HSV_LIST_LENGTH 20 //hsv历史信息队列长度
|
|
|
|
|
|
#define STATUS_LIST_LENGTH 30 //管道稳定性统计队列长度
|
|
|
|
|
|
#define HSV_NUM 3 //提取主色数量
|
|
|
|
|
|
#define HSV_WIDTH 32 //跟踪框处理范围
|
|
|
#define HSV_HEIGHT 32
|
|
|
|
|
|
typedef struct tagColorHis
|
|
|
{
|
|
|
FLOAT32 nMin_H; //H分量最小值
|
|
|
FLOAT32 nMax_H; //H分量最大值
|
|
|
FLOAT32 nMin_S; //S分量最大值
|
|
|
FLOAT32 nMax_S; //S分量最大值
|
|
|
FLOAT32 nMin_V; //V分量最大值
|
|
|
FLOAT32 nMax_V; //V分量最大值
|
|
|
FLOAT32 nSum_H; //分量总和
|
|
|
FLOAT32 nSum_S;
|
|
|
FLOAT32 nSum_V;
|
|
|
FLOAT32 nMean_H; //分量均值
|
|
|
FLOAT32 nMean_S;
|
|
|
FLOAT32 nMean_V;
|
|
|
SINT32 nColorCnt; //像素数量
|
|
|
FLOAT32 fColorPercent; //分量占比
|
|
|
FLOAT32 fColorMatch; //分量匹配率
|
|
|
|
|
|
}HSV_Para;
|
|
|
|
|
|
|
|
|
typedef struct tagColor
|
|
|
{
|
|
|
SINT32 nColorNum; //主色像素数
|
|
|
FLOAT32 fColorPercent; //主色占比
|
|
|
SINT32 nMatchId; //主色id
|
|
|
FLOAT32 fColorMatch; //主色匹配率
|
|
|
FLOAT32 nMin_H; //主色H分量最小值
|
|
|
FLOAT32 nMax_H; //主色H分量最大值
|
|
|
FLOAT32 nMin_S; //主色S分量最大值
|
|
|
FLOAT32 nMax_S; //主色S分量最大值
|
|
|
FLOAT32 nMin_V; //主色V分量最大值
|
|
|
FLOAT32 nMax_V; //主色V分量最大值
|
|
|
FLOAT32 nMean_H; //分量均值
|
|
|
FLOAT32 nMean_S;
|
|
|
FLOAT32 nMean_V;
|
|
|
FLOAT32 nFliter_H; //分量均值滤波
|
|
|
FLOAT32 nFliter_S;
|
|
|
FLOAT32 nFliter_V;
|
|
|
FLOAT32 fFliterColorPercent;
|
|
|
SINT32 bTargetCnt;
|
|
|
UBYTE8 nColorID; //目标颜色类别
|
|
|
UBYTE8 nFliterColorID; //目标颜色类别
|
|
|
SINT32 nCnt; // 已记录的历史响应信息个数
|
|
|
SINT32 nStep; //记录帧间隔
|
|
|
SINT32 nStart; //历史循环队列头
|
|
|
SINT32 nEnd; //历史循环队列末尾
|
|
|
SINT32 nListSize; // 目标遮挡信息数组长度
|
|
|
HSV_Para historyHSV[HSV_LIST_LENGTH]; //历史分量记录
|
|
|
}ColorPara;
|
|
|
|
|
|
|
|
|
typedef struct tagTargetStatus
|
|
|
{
|
|
|
BBOOL bPipeStabFlag; //识别管道是否稳定标志
|
|
|
UBYTE8 nLostFlag;
|
|
|
FLOAT32 fWHVar; //宽高变化方差
|
|
|
FLOAT32 fWHMean; //宽高均值
|
|
|
FLOAT32 fPtVar; //中心点位移方差
|
|
|
FLOAT32 fPtMean; //中心点位移均值
|
|
|
FLOAT32 fKFPredicError; //卡尔曼滤波预测误差
|
|
|
POINT32F fKFPredicPoint; //卡尔曼滤波预测点
|
|
|
FLOAT32 fCurrentWH; //当前帧宽高
|
|
|
FLOAT32 fCurrentXY; //当前帧中心点波动
|
|
|
SIZE32F sfSize; //当前帧目标宽高
|
|
|
POINT32F ptCenPos; //当前帧目标中心点
|
|
|
SINT32 nCnt; // 已记录的历史响应信息个数
|
|
|
SINT32 nStep; //记录帧间隔
|
|
|
SINT32 nStart; //历史循环队列头
|
|
|
SINT32 nEnd; //历史循环队列末尾
|
|
|
SINT32 nListSize; // 目标遮挡信息数组长度
|
|
|
SIZE32F historySize[STATUS_LIST_LENGTH];//历史宽高信息
|
|
|
POINT32F historyCenPos[STATUS_LIST_LENGTH];//历史中心点信息
|
|
|
}TargetStatus;
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum AITScaleType_tag
|
|
|
{
|
|
|
CAL_WIDTH = 0, //计算宽度信息
|
|
|
CAL_HEIGHT = 1, //计算高度信息
|
|
|
CAL_WHRATIO = 2 //计算宽高比信息
|
|
|
}AITScaleType;
|
|
|
|
|
|
typedef struct tagAIDFeatureFluc
|
|
|
{
|
|
|
FLOAT32 fStd; //标准差
|
|
|
FLOAT32 fMean; //均值
|
|
|
FLOAT32 fMin; //最小值
|
|
|
FLOAT32 fMax; //最大值
|
|
|
}AID_FEATURE_FLUC;
|
|
|
|
|
|
//邻居目标特征 + 邻居目标与主跟踪目标的关系结构体,单帧信息
|
|
|
typedef struct pipeRelationship
|
|
|
{
|
|
|
BBOOL bLost; //邻居目标当前状态是否在记忆
|
|
|
UINT32 unFrmId; //当前帧编号
|
|
|
ANGLE32F afAngle; //目标方位角、俯仰角
|
|
|
POINT32F pfCenPos; //区域的中心点坐标
|
|
|
SIZE32F snSize; //目标宽高
|
|
|
FLOAT32 fRelationIOU; //邻居目标与主跟踪目标的IOU
|
|
|
FLOAT32 fCenDisXY; //邻居目标与主跟踪目标的中心距离
|
|
|
DOUBLE64 dColorHu[9]; //邻居目标的颜色特征(单帧)
|
|
|
//DOUBLE64 fReIDArray[512]; //邻居目标的ReID特征(单帧)【】
|
|
|
}LONGRELATION;
|
|
|
|
|
|
//邻居目标特征 + 邻居目标与主跟踪目标的关系结构体,单帧信息
|
|
|
typedef struct pipeShortRelationship
|
|
|
{
|
|
|
BBOOL bLost; //邻居目标当前状态是否在记忆
|
|
|
UINT32 unFrmId; //当前帧编号
|
|
|
ANGLE32F afAngle; //目标方位角、俯仰角
|
|
|
POINT32F pfCenPos; //区域的中心点坐标
|
|
|
SIZE32F snSize; //目标宽高
|
|
|
FLOAT32 fRelationIOU; //邻居目标与主跟踪目标的IOU
|
|
|
FLOAT32 fCenDisXY; //邻居目标与主跟踪目标的中心距离
|
|
|
}SHORTRELATION;
|
|
|
|
|
|
//邻居目标与主跟踪目标的关系结构体,仅统计观测区域范围内,代表一个周围目标的多帧信息
|
|
|
typedef struct NEIBORTAR
|
|
|
{
|
|
|
BBOOL bOccupy; //表示被占用标记
|
|
|
BBOOL bMoved; //运动状态是否运动的(累计时序信息统计)
|
|
|
BBOOL bCreateBeforeLost; //创建时机是否在主目标丢失前
|
|
|
UBYTE8 ubEnd; //最新帧编号
|
|
|
UBYTE8 ubShortEnd; //队列尾(控制角度位置,实时刷新)
|
|
|
UBYTE8 ubLongEnd; //队列尾(控制角度位置,间隔刷新)
|
|
|
UBYTE8 ubEndFeature; //队列尾(控制特征)
|
|
|
UBYTE8 ubIndex; //在MASTERAIDMONITOR当中占据的索引
|
|
|
UINT16 ubUpdatePoint; //更新点,只有达到更新点才能更新数据
|
|
|
SINT16 uAIDirection; //受监控管道运动方向(累计时序信息统计)
|
|
|
BBOOL bUseAIDirection; //方向可用性
|
|
|
SINT32 nAlarmBatchID; //管道告警编号,表示在管道数组当中的索引
|
|
|
SINT32 nRelationCnt; //邻居目标与主跟踪目标建立关系的帧计数
|
|
|
SINT32 nShortRecordCnt; //帧统计次数,每次更新到帧数组进行累加(间隔刷新)
|
|
|
SINT32 nLongRecordCnt; //帧统计次数,每次更新到帧数组进行累加(间隔刷新)
|
|
|
SINT32 nNoUpdateCnt; //连续未更新帧计数(用来控制监控信息被删除)
|
|
|
FLOAT32 fDisStart; //开始距离,开始统计时的距离
|
|
|
FLOAT32 f3sDisMove; //目标在最近3s内的移动距离,像素衡量
|
|
|
ANGLE32F f3sAglMove; //目标在最近3s内的移动距离,角度衡量
|
|
|
ANGLE32F afBornAgl; //目标初始角度
|
|
|
RECT16S rsCurrentBox;
|
|
|
SPEED32F sfAglSpeed; //目标方向
|
|
|
SINT32 nReIDDims; //邻居目标的ReID特征维度
|
|
|
FLOAT32* fReIDFeature; //邻居目标的ReID特征(多帧)
|
|
|
SHORTRELATION ShortRelation[AID_DEPTH_MAX];//邻居目标实时存储信息数组,目的用于捕获变化(单帧)
|
|
|
LONGRELATION LongRelation[AID_DEPTH_MAX];//邻居目标间隔存储信息数组,目的用于寻求稳定(单帧)
|
|
|
}NEIBOR;
|
|
|
|
|
|
//主跟踪目标结构体,单帧信息
|
|
|
typedef struct FRMMAINOBJ_Tag
|
|
|
{
|
|
|
UINT32 unFrmId; //当前帧编号
|
|
|
ANGLE32F afAngle; //目标方位角、俯仰角
|
|
|
POINT32F pfCenPos; //区域的中心点坐标
|
|
|
SIZE32F snSize; //目标宽高
|
|
|
}FRMMAINOBJ;
|
|
|
|
|
|
//主跟踪目标与周围目标的关系结构体,仅统计观测区域范围内,代表一个周围目标的多帧信息
|
|
|
typedef struct AIDMAINOBJ_Tag
|
|
|
{
|
|
|
BBOOL bOccupy; //表示被占用标记
|
|
|
BBOOL bLost; //表示当前跟踪管道没有对应的AI识别管道
|
|
|
BBOOL bMoved; //运动状态是否运动的(累计时序信息统计)
|
|
|
UBYTE8 ubEnd; //队列尾
|
|
|
POINT32F pfCenPos; //区域的中心点坐标
|
|
|
SIZE32F snSize; //目标宽高
|
|
|
UINT16 ubUpdatePoint; //更新点,只有达到更新点才能更新数据
|
|
|
SINT16 uAIDirection; //受监控管道运动方向(累计时序信息统计)
|
|
|
BBOOL bUseAIDirection; //具备方向统计性
|
|
|
SINT32 nStatisticCnt; //帧统计次数,每次更新到帧数组进行累加
|
|
|
UINT32 unExistCnt; //已存在帧数
|
|
|
UINT32 unContiLostCnt; //持续丢失帧计数
|
|
|
UINT32 unContiTrackedCnt;//持续跟踪计数
|
|
|
SINT32 nNoUpdateCnt; //连续未更新帧计数(用来控制监控信息被删除)
|
|
|
FLOAT32 f3sDisMove; //目标在最近3s内的移动距离,像素衡量
|
|
|
ANGLE32F f3sAglMove; //目标在最近3s内的移动距离,角度衡量
|
|
|
ANGLE32F afBornAgl; //目标初始角度
|
|
|
DOUBLE64 dColorHu[9]; //主跟踪目标的颜色特征(多帧)
|
|
|
SINT32 nReIDDims; //主跟踪目标的ReID特征维度
|
|
|
FLOAT32 fReIDFeature[GLB_REID_FEATURE_DIMS];//主跟踪目标的ReID特征(多帧统一为1个数据)
|
|
|
SINT32 nJamCnt; //主跟目标干扰计数
|
|
|
FLOAT32 fTrackIou; //与跟踪目标最大IOU
|
|
|
SINT32 nTrackId; //主跟踪识别管道id
|
|
|
FRMMAINOBJ FrmRelation[AID_DEPTH_MAX];//建立与主跟踪目标最近的管道目标关系(单帧)
|
|
|
ColorPara pColorInfo;
|
|
|
}AIDMAINOBJ;
|
|
|
|
|
|
|
|
|
typedef struct MASTERTARPIPE
|
|
|
{
|
|
|
SINT32 nNeighborCnt; //在观测区域的邻域目标个数--正常跟踪数量
|
|
|
UBYTE8 uDevideEvent; //事件判断:主目标和邻域目标分开-合并-分开的过程2-1-2
|
|
|
SINT32 nSameDirectCnt; //同向运动目标个数,X或Y方向15个像素以内,每帧动态更新--也是危险目标
|
|
|
SINT32 nOppositeDirectCnt; //反向交错目标个数
|
|
|
SINT32 nMaxIouId; //与主跟目标最大IOU对应的邻居id
|
|
|
FLOAT32 fMaxIou; //与主跟目标最大IOU
|
|
|
SINT32 nBestArrestId; //重捕最优目标ID
|
|
|
SINT32 nTargetNum; //通过全部条件筛选的目标个数
|
|
|
SINT32 nArrestIdArray[AID_DEPTH_MAX]; //可重捕目标id
|
|
|
NEIBOR nNeiborInfo[AID_NEIBOR_MAX];//邻域目标信息,邻域范围最多处理目标个数;
|
|
|
AIDMAINOBJ nMainInfo; //主目标信息
|
|
|
}MASTERAIDMONITOR;
|
|
|
|
|
|
|
|
|
class AID_Monitor
|
|
|
{
|
|
|
public:
|
|
|
AID_Monitor();
|
|
|
~AID_Monitor();
|
|
|
private:
|
|
|
/*************************************
|
|
|
* Method: isIn_Monitor_Info()
|
|
|
* Func Discription: 基于输入管道编号,在监控队列当中查询是否存在监控节点
|
|
|
* CreateData: 2024/9/9
|
|
|
* Input Param: SINT32 nPipeID:待查询的管道编号
|
|
|
* Output Param:
|
|
|
* Return: BBOOL
|
|
|
* Call Relation:
|
|
|
* Other Discription:
|
|
|
*************************************/
|
|
|
NEIBOR* isIn_Monitor_Info(SINT32 nPipeID, BBOOL& finded);
|
|
|
|
|
|
|
|
|
void cal_Recap_Area(GLB_INPUT* p_GLB_Input, OBJECTSTATUS* ObjStatus, PIPE* m_LockingPipe, RECT16S& RecapRect);
|
|
|
|
|
|
//计算与跟踪相关的识别管道id
|
|
|
void cal_MainPipe_ID(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, OBJECTSTATUS* ObjStatus, PIPE* m_LockingPipe, API_MOT_PIPE* g_GLB_PipeProc);
|
|
|
|
|
|
/*************************************
|
|
|
* Method: add_newMonitorObj()
|
|
|
* Func Discription: 添加新的监控目标,首次创建
|
|
|
* CreateData: 2024/9/9
|
|
|
* Input Param: NEIBOR * pNeibor:被添加到监控队列的位置
|
|
|
* Input Param: PIPE * pAddPipe:被添加的管道
|
|
|
* Output Param:
|
|
|
* Return: void
|
|
|
* Call Relation:
|
|
|
* Other Discription:
|
|
|
*************************************/
|
|
|
void add_newMonitorObj(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, OBJECTSTATUS* ObjStatus, NEIBOR* pNeibor, PIPE* pAddPipe, SINT32 nPipeId);
|
|
|
|
|
|
|
|
|
/*************************************
|
|
|
* Method: delete_MonitorObj()
|
|
|
* Func Discription: 删除监控目标
|
|
|
* CreateData: 2024/9/11
|
|
|
* Input Param: NEIBOR * pNeibor
|
|
|
* Output Param:
|
|
|
* Return: void
|
|
|
* Call Relation:
|
|
|
* Other Discription:
|
|
|
*************************************/
|
|
|
void delete_MonitorObj(NEIBOR* pNeibor);
|
|
|
|
|
|
|
|
|
/*************************************
|
|
|
* Method: update_Main_Info()
|
|
|
* Func Discription: 更新主跟踪目标信息,位置、轨迹、颜色、reID等
|
|
|
* CreateData: 2024/9/11
|
|
|
* Input Param: GLB_INPUT * p_GLB_Input
|
|
|
* Input Param: OBJECTSTATUS * ObjStatus
|
|
|
* Output Param:
|
|
|
* Return: void
|
|
|
* Call Relation:
|
|
|
* Other Discription:
|
|
|
*************************************/
|
|
|
void update_Main_Info(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, OBJECTSTATUS* ObjStatus);
|
|
|
|
|
|
//更新主管道目标信息
|
|
|
void update_MainPipe_Info(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, PIPE* pMainPipe, OBJECTSTATUS* ObjStatus);
|
|
|
|
|
|
//更新邻居管道目标信息
|
|
|
void update_NeiborPipe_info(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, PIPE* pPipe, OBJECTSTATUS* ObjStatus, SINT32 nPipeId);
|
|
|
|
|
|
|
|
|
/*************************************
|
|
|
* Method: update_MonitorObj()
|
|
|
* Func Discription: 对已添加的监控队列进行维护,包括更新信息,考虑到对地目标通常运动速度较慢,
|
|
|
为了在时序利用有效的空间,得到更加准确的结果,更新数据时间隔0.5S
|
|
|
* CreateData: 2024/9/9
|
|
|
* Input Param: GLB_INPUT * p_GLB_Input
|
|
|
* Input Param: OBJECTSTATUS * ObjStatus
|
|
|
* Input Param: NEIBOR * pNeibor
|
|
|
* Input Param: PIPE * pAddPipe
|
|
|
* Output Param:
|
|
|
* Return: void
|
|
|
* Call Relation:
|
|
|
* Other Discription:
|
|
|
*************************************/
|
|
|
void update_MonitorObj(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, OBJECTSTATUS* ObjStatus, NEIBOR* pNeibor, PIPE* pAddPipe);
|
|
|
|
|
|
/*************************************
|
|
|
* Method: update_Monitor_Info()
|
|
|
* Func Discription:
|
|
|
* CreateData: 2024/9/9
|
|
|
* Input Param: GLB_INPUT * p_GLB_Input
|
|
|
* Input Param: OBJECTSTATUS * ObjStatus
|
|
|
* Input Param: API_MOT_PIPE * g_GLB_PipeProc
|
|
|
* Output Param:
|
|
|
* Return: void
|
|
|
* Call Relation:
|
|
|
* Other Discription:
|
|
|
*************************************/
|
|
|
void update_Monitor_Info(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, OBJECTSTATUS* ObjStatus, API_MOT_PIPE* g_GLB_PipeProc);
|
|
|
|
|
|
|
|
|
/*************************************
|
|
|
* Method: get_Recap_Candidate()
|
|
|
* Func Discription:在监控信息上获得重捕管道候选
|
|
|
// 排除方法1:在目标丢失前创建的排除
|
|
|
// 排除方法2:在重捕区域外的排除
|
|
|
// 排除方法3:运动方向相反的排除
|
|
|
// 排除方法4:静止运动状态不一致的排除
|
|
|
// 最佳排序:轨迹相似性 + 运动方向相似度 + 位移相似度(相同时间) + 尺度相似性 + 外观特性相似性(颜色、reID)-->综合决策
|
|
|
// 送出目标的时机是目标未丢失,与其它管道无IOU、尺度变化平稳(避免在遮挡、干扰过程中送出)
|
|
|
* CreateData: 2024/9/10
|
|
|
* Output Param:
|
|
|
* Return: void
|
|
|
* Call Relation:
|
|
|
* Other Discription:
|
|
|
*************************************/
|
|
|
SINT32 get_Recap_Candidate(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, OBJECTSTATUS* ObjStatus, API_MOT_PIPE* g_GLB_PipeProc);
|
|
|
|
|
|
//更新邻居目标与主跟踪之间的关系
|
|
|
void update_TrackNeibor_Info(GLB_INPUT* p_GLB_Input, SINT32 nMaxPipeNum, PIPE* pArrayList, OBJECTSTATUS* ObjStatus);
|
|
|
|
|
|
//更新目标颜色信息
|
|
|
BBOOL getMainColorInfo(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, RECT16S rsBox, AIDMAINOBJ* pMainInfo, UBYTE8 nMode);
|
|
|
|
|
|
//计算目标颜色匹配结果
|
|
|
BBOOL calcMainColorMatchInfo(UBYTE8* img, SINT32 nWidth, SINT32 nHeight, ColorPara* pMainColorInfo, UBYTE8 nMode);
|
|
|
|
|
|
//更新目标颜色队列信息
|
|
|
void recordObjColorInfo(ColorPara* pMainColorInfo, BBOOL bSuccess);
|
|
|
|
|
|
//颜色信息滤波值估算
|
|
|
void objColorInfoFliter(ColorPara* pMainColorInfo);
|
|
|
|
|
|
//清理主目标信息
|
|
|
void memory_MainInfo();
|
|
|
|
|
|
//计算管道目标稳定性
|
|
|
void calcPipeStability(TargetStatus* objPipeStatus, RECT32F rfBox, SINT32 nWidth, SINT32 nHeight);
|
|
|
|
|
|
//宽高方差计算函数
|
|
|
FLOAT32 calcWHStability(TargetStatus* objPipeStatus);
|
|
|
|
|
|
// 中心点位移MSE计算函数
|
|
|
FLOAT32 calcPositionStability(TargetStatus* objPipeStatus, SINT32 nWidth, SINT32 nHeight);
|
|
|
|
|
|
//计算卡尔曼滤波预测误差
|
|
|
FLOAT32 calcKFPredictError(TargetStatus* objPipeStatus);
|
|
|
|
|
|
|
|
|
public:
|
|
|
UINT16 updateFreq; // 更新频率
|
|
|
|
|
|
FLOAT32 fWStartExpand; // 重捕区域宽度扩展起始值
|
|
|
FLOAT32 fHStartExpand; // 重捕区域高度扩展起始值
|
|
|
|
|
|
//全局变量
|
|
|
RECT16S ObservRect; // 观测区
|
|
|
|
|
|
RECT16S RecapRect; // 重捕区
|
|
|
|
|
|
MASTERAIDMONITOR masterPipeMonitor; // 监控信息
|
|
|
|
|
|
TargetStatus m_pPipeStatus;
|
|
|
//cv::KalmanFilter m_kf;
|
|
|
|
|
|
UBYTE8 m_ubLostStatus;
|
|
|
UBYTE8 m_ubArrestStatus;
|
|
|
|
|
|
FLOAT32 m_ArrestWH; //重捕宽高阈值参数
|
|
|
|
|
|
UBYTE8 m_ColorImg[HSV_WIDTH*HSV_HEIGHT*3];
|
|
|
|
|
|
public:
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
//--接口函数声明--
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
AID_Monitor* Create();
|
|
|
|
|
|
void Destroy(AID_Monitor* obj);
|
|
|
|
|
|
/*************************************
|
|
|
* Method: Process()
|
|
|
* Func Discription: 基于AI检测的管道监控处理
|
|
|
* CreateData: 2024/9/5
|
|
|
* Input Param: PIPE* m_LockingPipe:主跟踪管道
|
|
|
* Input Param: API_MOT_PIPE * g_GLB_PipeProc:管道数组
|
|
|
* Output Param:
|
|
|
* Return: void
|
|
|
* Call Relation:
|
|
|
* Other Discription:
|
|
|
*************************************/
|
|
|
void Process(GD_VIDEO_FRAME_S img, GLB_INPUT* p_GLB_Input, OBJECTSTATUS *ObjStatus, PIPE* m_LockingPipe, API_MOT_PIPE* g_GLB_PipeProc);
|
|
|
|
|
|
//初始化参数
|
|
|
void initPara();
|
|
|
|
|
|
MASTERAIDMONITOR* getAIDMasterInfo();
|
|
|
};
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|