#ifndef TRACK_H
|
#define TRACK_H
|
|
#include "dataType.h"
|
|
#include "kalmfilter.h"
|
#include "model.h"
|
#include "time.h"
|
#include "stdio.h"
|
#include "stdlib.h"
|
#include <iostream>
|
#include<sys/time.h>
|
#include "../utils/geometry_util.h"
|
#include <queue>
|
#include "../utils/queue_util.hpp"
|
#include "../utils/log_util.h"
|
#include "../utils/time_util.h"
|
|
using namespace std;
|
|
class Track
|
{
|
|
enum TrackState {Tentative = 1, Confirmed, Deleted}; // 轨迹的状态,Tentative 是刚开始的时候,Confirmed是确认了是人的轨迹,Deleted是删除的轨迹
|
|
public:
|
bool isCurrent;
|
DETECTBOX xywh;
|
Track();
|
~Track();
|
Track(KAL_MEAN& mean, KAL_COVA& covariance, uint64_t track_id,
|
int n_init, int max_age, const FEATURE& feature, char* img_time);
|
void predit(KalmFilter *kf);
|
void update(KalmFilter * const kf, const DETECTION_ROW &detection, char* img_time);
|
bool mark_missed(char* img_time);
|
bool is_confirmed();
|
bool is_deleted();
|
bool is_tentative();
|
DETECTBOX to_tlwh();
|
DETECTBOX to_xywh();
|
int time_since_update; //累积检测不到的次数
|
uint64_t track_id;
|
FEATURESS features;
|
float confidence;
|
KAL_MEAN mean;
|
KAL_COVA covariance;
|
|
int hits;
|
int age;
|
int _n_init;
|
int _max_age;
|
TrackState state;
|
int time_substract(struct timeval *result, struct timeval *begin,struct timeval *end);
|
|
public:
|
// 附加的其他算法
|
// 逗留
|
// struct timeval last_s_time, last_e_time, last_diff_time; // 逗留的开始时间、结束时间,和持续时间
|
int last_s_time, last_e_time, last_diff_time; // 逗留的开始时间、结束时间,和持续时间
|
int last_time; //持续逗留时间
|
bool isWander;
|
|
//跌倒
|
float rate; //人体身高变化率
|
bool isFall;
|
bool first_Fall;
|
int rateScale; //判断是否逐步跌倒(短时间内)
|
MinQueue<float> rate_queue;
|
// struct timeval fall_s_time, fall_e_time, fall_diff_time; // 跌倒的持续时间 ,字段fall_diff_time代表了两个含义。距离最小比例的时间+累积跌倒时间
|
// struct timeval min_rate_time; //最大比例的定位时间
|
|
int fall_s_time, fall_e_time, fall_diff_time; // 跌倒的持续时间 ,字段fall_diff_time代表了两个含义。距离最小比例的时间+累积跌倒时间
|
int min_rate_time; //最大比例的定位时间
|
|
|
int fall_total_time;
|
float minRate; // 队列中的最大比例
|
float hisMinRate;
|
SPoint center_point, min_center_point; //重心的高度
|
float human_h;
|
float human_w;
|
|
|
|
//奔跑
|
bool is_runing_t;
|
bool is_runing_p;
|
bool isRuning;
|
SPoint last_point;
|
// struct timeval single_s_time, single_diff_time; // 单帧的结束时间可以用逗留里的时间代替
|
int single_s_time, single_diff_time; // 单帧的结束时间可以用逗留里的时间代替
|
int single_time; // 单帧所花销的时长(ms)
|
queue<float> velocity_queue;
|
float sum_velocity;
|
double run_rate;
|
double last_rate;
|
double rate_area;
|
|
// 帽子、口罩、抽烟
|
bool is_hat;
|
int hatScore;
|
int helmetScore;
|
int headScore;
|
|
bool is_mask;
|
int maskScore;
|
|
bool is_smoke;
|
int smokeScore;
|
|
private:
|
// struct timeval start,stop,diff;
|
int start,stop,diff;
|
double sum_timer;
|
bool init_t;
|
void init_track_time();
|
void featuresAppendOne(const FEATURE& f);
|
|
};
|
|
#endif // TRACK_H
|