|
|
# AIDMonitor
|
|
|
|
|
|
基于检测信息构建的管道,实现目标监控,具体作用包括
|
|
|
|
|
|
+ 提供最优的重捕候选,实现长时跟踪器
|
|
|
+ 跟踪过程中判断变化情况,对主跟踪目标信息修正,增加鲁棒性
|
|
|
+ 对主跟踪目标周围目标监控,提前进行干扰预警,抵抗相似目标,增强感知能力
|
|
|
|
|
|
|
|
|
## 计算观测区
|
|
|
+ 计算方法:观测区当前的计算方法是以跟踪目标的7倍宽高尺寸进行计算,
|
|
|
+ 作用:观测区的作用是对该区域内部的目标进行监控处理,目的是加快算法处理速度
|
|
|
|
|
|
## 计算重捕区
|
|
|
+ 计算前提:只有在主跟踪目标丢失记忆时计算
|
|
|
+ 计算方法:依据KCF跟踪的波门与观测区之间的回字形区域的距离,结合目标自身的运动速度、图像帧频进行外扩,最大限制的目标的15倍宽高
|
|
|
+ 作用:在跟踪丢失后的重捕是依据短时间相信预测周边,时间较长,预测出现偏差,扩大搜寻范围
|
|
|
+ 注意事项:重捕区域的位置是跟随主跟踪目标的预测点走,扩大的宽高需要限制边界,保证在图像内部
|
|
|
|
|
|
## 基于观测区添加监控管道信息
|
|
|
+ 说明:管道缓存历史帧信息帧数较少,且其中的特性有较多和监控功能无重叠,为了不增加管道当中的非通用属性,在本模块的内部构建了缓存队列,邻居目标信息是通过管道告警编号与管道之间建立一对一关系;为了对主跟踪目标与周围邻居目标进行监控,涉及数据结构将二者进行区分,本质上包括三类对象
|
|
|
|
|
|
+ 主跟踪目标的输出,其结果由 AIDMAINOBJ结构体管理
|
|
|
```c++
|
|
|
//主跟踪目标结构体,单帧信息
|
|
|
typedef struct FRMMAINOBJ_Tag
|
|
|
{
|
|
|
UINT32 unFrmId; //当前帧编号
|
|
|
ANGLE32F afAngle; //目标方位角、俯仰角
|
|
|
POINT32F pfCenPos; //区域的中心点坐标
|
|
|
SIZE32F snSize; //目标宽高
|
|
|
}FRMMAINOBJ;
|
|
|
|
|
|
//主跟踪目标与周围目标的关系结构体,仅统计观测区域范围内,代表一个周围目标的多帧信息
|
|
|
typedef struct AIDMAINOBJ_Tag
|
|
|
{
|
|
|
BBOOL bOccupy; //表示被占用标记
|
|
|
BBOOL bMoved; //运动状态是否运动的(累计时序信息统计)
|
|
|
UBYTE8 ubEnd; //队列尾
|
|
|
UINT16 ubUpdatePoint; //更新点,只有达到更新点才能更新数据
|
|
|
SINT16 uAIDirection; //受监控管道运动方向(累计时序信息统计)
|
|
|
SINT32 nStatisticCnt; //帧统计次数,每次更新到帧数组进行累加
|
|
|
SINT32 nNoUpdateCnt; //连续未更新帧计数(用来控制监控信息被删除)
|
|
|
FLOAT32 f3sDisMove; //目标在最近3s内的移动距离,像素衡量
|
|
|
ANGLE32F f3sAglMove; //目标在最近3s内的移动距离,角度衡量
|
|
|
ANGLE32F afBornAgl; //目标初始角度
|
|
|
DOUBLE64 dColorHu[9]; //主跟踪目标的颜色特征(多帧)
|
|
|
DOUBLE64 fReIDArray[512]; //主跟踪目标的ReID特征(多帧)
|
|
|
FRMMAINOBJ FrmRelation[AID_DEPTH_MAX];//建立主跟踪目标与周围目标关系(单帧)
|
|
|
}AIDMAINOBJ;
|
|
|
```
|
|
|
+ AI识别管道的输出,是与主跟踪目标为同一目标的识别管道,视作为邻居目标,其结果由 NEIBOR结构体管理
|
|
|
+ AI识别管道的输出,与主跟踪目标不为同一目标的识别管道,视作为邻居目标,其结果由 NEIBOR结构体管理
|
|
|
```c++
|
|
|
//邻居目标特征 + 邻居目标与主跟踪目标的关系结构体,单帧信息
|
|
|
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 ubShortEnd; //队列尾(控制角度位置,实时刷新)
|
|
|
UBYTE8 ubLongEnd; //队列尾(控制角度位置,间隔刷新)
|
|
|
UBYTE8 ubEndFeature; //队列尾(控制特征)
|
|
|
UBYTE8 ubIndex; //在MASTERAIDMONITOR当中占据的索引
|
|
|
UINT16 ubUpdatePoint; //更新点,只有达到更新点才能更新数据
|
|
|
SINT16 uAIDirection; //受监控管道运动方向(累计时序信息统计)
|
|
|
SINT32 nAlarmBatchID; //管道告警编号
|
|
|
SINT32 nRelationCnt; //邻居目标与主跟踪目标建立关系的帧计数
|
|
|
SINT32 nShortRecordCnt; //帧统计次数,每次更新到帧数组进行累加(间隔刷新)
|
|
|
SINT32 nLongRecordCnt; //帧统计次数,每次更新到帧数组进行累加(间隔刷新)
|
|
|
SINT32 nNoUpdateCnt; //连续未更新帧计数(用来控制监控信息被删除)
|
|
|
FLOAT32 fDisStart; //开始距离,开始统计时的距离
|
|
|
FLOAT32 f3sDisMove; //目标在最近3s内的移动距离,像素衡量
|
|
|
ANGLE32F f3sAglMove; //目标在最近3s内的移动距离,角度衡量
|
|
|
ANGLE32F afBornAgl; //目标初始角度
|
|
|
|
|
|
SHORTRELATION ShortRelation[AID_DEPTH_MAX];//邻居目标实时存储信息数组,目的用于捕获变化(单帧)
|
|
|
LONGRELATION LongRelation[AID_DEPTH_MAX];//邻居目标间隔存储信息数组,目的用于寻求稳定(单帧)
|
|
|
}NEIBOR;
|
|
|
```
|
|
|
+ 计算方法:获取当前所有的管道数组信息,对管道进行遍历,区分主跟踪目标和其他邻居目标进行监控队列目标的创建、信息更新、邻居目标的删除
|
|
|
+ 主跟踪目标的创建:首次记录的时候创建,记录帧编号、角度、位置、尺度,保存颜色特征模板
|
|
|
+ 主跟踪目标的更新:设置更新点,控制间隔更新,记录帧编号、角度、位置、尺度,颜色特征线性更新;计算轨迹与固定方位的夹角
|
|
|
+ 邻居目标的创建与更新:跳过管道帧数不足10帧的目标,计算当前管道与观测区的IOU,从监控队列当中查找是否存在记录;
|
|
|
+ 有IOU无记录:将目标加入到监控队列,标识是在主跟踪目标丢失前后创建,计算与主跟踪目标的IOU,记录长短时更新的位置、尺寸等信息,计算颜色特征
|
|
|
+ 有IOU有记录:对监控队列中的目标进行信息更新,短时信息每帧更新,长时信息依据更新点更新间隔更新,颜色特征、轨迹夹角随长时监控记录计算
|
|
|
+ 无IOU有记录:说明监控目标出了监控区,进行删除
|
|
|
+ 目的:动态维护监控历史信息,未后续查找目标做准备
|
|
|
|
|
|
## 1 获取重捕候选
|
|
|
+ 目的:提供重捕候选,基于移动速度、移动方向、运动轨迹、颜色特征的相似度排除不相似的目标,提供有效的候选目标
|
|
|
+ 优势:在传统算法或者Ai跟踪器无法提供候选的时候,可以发挥重捕作用
|
|
|
+ 使用场景:主跟踪丢失,AIDMonitor模块输出候选
|
|
|
|
|
|
## 2 辅助主跟踪修正
|
|
|
+ 目的:在主跟踪目标正常跟踪过程中,使用识别的监控管道与主跟踪目标进行位置和尺寸校验,当偏离程度较大时,对主跟踪目标进行修正
|
|
|
+ 优势:可以借助于深度特征捕获到目标的变化
|
|
|
+ 缺点:非常依赖AI识别结果,包括识别的位置、尺寸,连续性
|
|
|
+ 使用场景:需要对管道和主跟踪目标进行同一身份确认,依据连续的监控信息,计算得到位置和尺寸存在偏差
|
|
|
+ 注意事项:特性区分度和稳定性不如AI跟踪器,谨慎使用
|
|
|
|
|
|
## 3 抗相似目标干扰
|
|
|
+ 目的:感知相似目标的到来,避免同类干扰
|
|
|
+ 优势:监控范围广,可以在大范围区域实现监控
|
|
|
+ 使用场景:跟踪过程中有较为相似目标与主跟踪目标产生交集,主动避开模型更新 |