#ifndef TRACKER_H #define TRACKER_H #include #include "kalmfilter.h" #include "track.h" #include "model.h" // #include "../utils/config_util.h" #include "feature_util.h" #include "../utils/geometry_util.h" #include "../std_target.h" typedef int (*fn)(void* args, const int sender_chan, const char *recver, const char *data, const int len); class NearNeighborDisMetric; using CURRENT_ID_REG = std::pair>; class tracker { public: NearNeighborDisMetric* metric; float max_iou_distance; int max_age; int n_init; KalmFilter* kf; uint64_t _next_idx; private: // bool P_in_Polygon(SPoint p, IntersectReg polygon); // std::vector candidate_track_ids; // 候选列表,也就是新加入的人员信息:id、 track信息(特征信息、 坐标信息) // std::vector current_track_ids; // 跟踪的id 信息 public: std::vector> tracks; tracker( /*NearNeighborDisMetric* metric,*/ float max_cosine_distance, int nn_budget, float max_iou_distance = MAX_IOU_DISTANCE, int max_age = MAX_AGE, int n_init = N_INIT); ~tracker(); void predict(); void update(std::vector> &CAMERAS_VCT, const DETECTIONS& detections, int cam_id, char* img_time); typedef DYNAMICM (tracker::* GATED_METRIC_FUNC)( std::vector>& tracks, const DETECTIONS& dets, const std::vector& track_indices, const std::vector& detection_indices); private: void _match(const DETECTIONS& detections, TRACHER_MATCHD& res); void _initiate_track(const DETECTION_ROW& detection, int cam_id, char* img_time); public: DYNAMICM gated_matric( std::vector>& tracks, const DETECTIONS& dets, const std::vector& track_indices, const std::vector& detection_indices); DYNAMICM cos_matric( std::vector>& tracks, const DETECTIONS& dets, const std::vector& track_indices, const std::vector& detection_indices); DYNAMICM iou_cost( std::vector>& tracks, const DETECTIONS& dets, const std::vector& track_indices, const std::vector& detection_indices); Eigen::VectorXf iou(DETECTBOX& bbox, DETECTBOXSS &candidates); }; #endif // TRACKER_H