Add boost python, and predictor wrapper
[trackerpp.git] / src / MultiTracker.cpp
1 #include "MultiTracker.h"
2 #include "Metrics.h"
3 #include <algorithm>
4 #include "hungarian.h"
5
6 using namespace suanzi;
7 using namespace cv;
8 using namespace Eigen;
9
10 MultiTracker::MultiTracker(MetricsPtr m) : metrics(m)
11 {
12 }
13
14
15 MultiTracker::~MultiTracker()
16 {
17     trackers.clear();
18 }
19
20 TrackerPtr MultiTracker::createTracker(int id)
21 {
22     TrackerPtr t (new Tracker(id));
23     addTracker(t);
24     return t;
25 }
26
27 void MultiTracker::addTracker(TrackerPtr t)
28 {
29     trackers.push_back(t);
30 }
31
32 void MultiTracker::removeTracker(TrackerPtr t)
33 {
34 //    trackers.erase(t);
35 }
36
37 void MultiTracker::initNewTrackers(cv::Mat& iamge)
38 {
39 }
40
41
42 void MultiTracker::correctTrackers(MetricsPtr m, Mat& image)
43 {
44 }
45
46 void calculate_edistance()
47 {
48 }
49
50 #define MaxCost  100000
51
52 void MultiTracker::update(unsigned int total, const Detection* detections, const Mat& image)
53 {
54     // correct_trackers
55     // Generate cost matrix
56     int row = trackers.size();
57     int col = total;
58     MatrixXi cost_matrix = MatrixXi::Zero(row, col);
59     for (int i = 0; i < row; i++){
60         for (int j = 0; j < col; j++){
61             TrackerPtr tracker = trackers[i];
62             Detection det = detections[j];
63
64             int cost = MaxCost;
65
66             // TODO
67             cost_matrix(i, j) = cost;
68         }
69     }
70
71     // assignment
72     VectorXi tracker_inds, bb_inds;
73     linear_sum_assignment(cost_matrix, tracker_inds, bb_inds);
74
75     // handle the result
76     vector<TrackerPtr> unmatched_trackers;
77     vector<Detection> unmatched_detection;
78     for (int i = 0; i < row; i++){
79         if (!(tracker_inds.array() == i).any()){
80             unmatched_trackers.push_back(trackers[i]);
81         }
82     }
83     for(int j = 0; j < col; j++){
84         if (!(bb_inds.array() == j).any()){
85             unmatched_detection.push_back(detections[j]);
86         }
87     }
88
89
90     // create new trackers for new detections
91 }