1 #include "MultiTracker.h"
7 using namespace suanzi;
11 static const std::string TAG = "MultiTracker";
12 MultiTracker::MultiTracker(MetricsPtr m) : metrics(m)
14 LOG_DEBUG(TAG, "init - load model.pkl");
15 predictor = PredictorWrapper::create("./python/model.pkl");
20 MultiTracker::~MultiTracker()
25 //TrackerPtr MultiTracker::createTracker(int id)
27 // TrackerPtr t (new Tracker(id));
32 //void MultiTracker::addTracker(TrackerPtr t)
34 // trackers.push_back(t);
37 void MultiTracker::removeTracker(TrackerPtr t)
42 void MultiTracker::initNewTrackers(cv::Mat& iamge)
47 void MultiTracker::correctTrackers(MetricsPtr m, Mat& image)
51 void calculate_edistance()
55 #define MaxCost 100000
57 static double distance(TrackerPtr t, const cv::Mat& image, const Detection& d)
62 void MultiTracker::update(unsigned int total, const Detection* detections, const Mat& image)
65 // Generate cost matrix
66 int row = trackers.size();
68 MatrixXi cost_matrix = MatrixXi::Zero(row, col);
69 for (int i = 0; i < row; i++){
70 for (int j = 0; j < col; j++){
72 // int cost = MaxCost;
73 cost_matrix(i, j) = distance(trackers[i], image, detections[j]);
78 VectorXi tracker_inds, bb_inds;
79 linear_sum_assignment(cost_matrix, tracker_inds, bb_inds);
81 // handle unmatched trackers
82 vector<TrackerPtr> unmatched_trackers;
83 for (int i = 0; i < row; i++){
84 if (!(tracker_inds.array() == i).any()){
85 unmatched_trackers.push_back(trackers[i]);
88 for (auto t : unmatched_trackers){
89 t->updateState(image);
93 // handle unmatched detections
94 vector<int> unmatched_detection;
95 for(int j = 0; j < col; j++){
96 if (!(bb_inds.array() == j).any()){
97 unmatched_detection.push_back(j);
100 // create new trackers for new detections
101 for (auto i : unmatched_detection){
102 TrackerPtr t (new Tracker(image));
103 this->trackers.push_back(t);