派生自 Algorithm/baseDetector

孙天宇
2022-07-12 ce9d187fd294cca192a27f52719094e9df7b1b62
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef TRACKER_H
#define TRACKER_H
#include <vector>
 
#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<uint64_t, std::vector<bool>>;
 
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<uint64_t> candidate_track_ids;  // 候选列表,也就是新加入的人员信息:id、 track信息(特征信息、 坐标信息)
//    std::vector<uint64_t> current_track_ids;  // 跟踪的id 信息
 
public:
    std::vector<std::shared_ptr<Track>> 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<std::shared_ptr<tracker>> &CAMERAS_VCT, const DETECTIONS& detections, int cam_id, char* img_time);
 
    typedef DYNAMICM (tracker::* GATED_METRIC_FUNC)(
            std::vector<std::shared_ptr<Track>>& tracks,
            const DETECTIONS& dets,
            const std::vector<int>& track_indices,
            const std::vector<int>& 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<std::shared_ptr<Track>>& tracks,
            const DETECTIONS& dets,
            const std::vector<int>& track_indices,
            const std::vector<int>& detection_indices);
 
    DYNAMICM cos_matric(
        std::vector<std::shared_ptr<Track>>& tracks,
        const DETECTIONS& dets,
        const std::vector<int>& track_indices,
        const std::vector<int>& detection_indices);
 
    DYNAMICM iou_cost(
            std::vector<std::shared_ptr<Track>>& tracks,
            const DETECTIONS& dets,
            const std::vector<int>& track_indices,
            const std::vector<int>& detection_indices);
    Eigen::VectorXf iou(DETECTBOX& bbox,
                        DETECTBOXSS &candidates);
};
 
#endif // TRACKER_H