X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=src%2FMultiTracker.cpp;h=199d9f7d97774104ecc6b224e272ed32f700e78f;hb=97b147e9106cb549dd7dd62829b9d29b326738c7;hp=bbfc6f3b4520dcfac5509c2eb27539227092ff0f;hpb=8b450dd21387f7775cfc68dee771bda82c0f8ed6;p=trackerpp.git diff --git a/src/MultiTracker.cpp b/src/MultiTracker.cpp index bbfc6f3..199d9f7 100644 --- a/src/MultiTracker.cpp +++ b/src/MultiTracker.cpp @@ -1,9 +1,10 @@ #include "MultiTracker.h" -#include "Metrics.h" #include #include "hungarian.h" #include "Logger.h" #include "Utils.h" +#include +#include using namespace suanzi; using namespace cv; @@ -13,6 +14,7 @@ static const std::string TAG = "MultiTracker"; static const cv::Size PREFERRED_SIZE = Size(64, 128); static const double MaxCost = 100000; static const double ProbThreshold = 0.05; +static const int MaxTrackers = 100; MultiTracker::MultiTracker(EngineWPtr e) : engine(e) @@ -37,7 +39,9 @@ static std::vector similarity(const PatchPtr p1, const PatchPtr p2) cv::Mat im2(PREFERRED_SIZE, p2->image_crop.type()); cv::resize(p1->image_crop, im1, im1.size()); cv::resize(p2->image_crop, im2, im2.size()); - cv::Mat result; + + cv::Mat result = Mat::zeros(1,1, CV_64F); + cv::matchTemplate(im1, im2, result, CV_TM_CCOEFF_NORMED); feature.push_back(result.at(0, 0)); cv::matchTemplate(im1, im2, result, CV_TM_CCORR_NORMED); @@ -61,6 +65,14 @@ static std::vector similarity(const PatchPtr p1, const PatchPtr p2) feature.push_back(calc_iou_ratio(getRectInDetection(d1), getRectInDetection(d2))); +// for (auto i : feature){ +// cout << i << "\t"; +// if (isnan(i)){ +// throw overflow_error("Nan in feature"); +// } +// } +// cout << endl; +// return feature; } @@ -74,7 +86,7 @@ double MultiTracker::distance(TrackerPtr tracker, const cv::Mat& image, const De ss = similarity(i, patch); features.insert(features.end(), ss.begin(), ss.end()); } - double prob = predictor->predict(Tracker::MaxPatch - 1, features); // TODO why is MaxPatch-1 + double prob = predictor->predict(tracker->patches.size() - 1, features); // TODO why is MaxPatch-1 if (prob > ProbThreshold) return -log(prob); else @@ -150,7 +162,7 @@ void MultiTracker::update(unsigned int total, const Detection* detections, const for (auto i : unmatch_bbs_indices){ TrackerPtr new_tracker (new Tracker(image, detections[i])); new_tracker->addPatch(createPatch(image, detections[i])); - this->trackers.push_back(new_tracker); + addTracker(new_tracker); Person test; // TODO inPersons.push_back(test); } @@ -212,3 +224,12 @@ PatchPtr MultiTracker::createPatch(const Mat& image, const Detection& detect) patch->features = std::make_pair(feature_hog_double, hist); return patch; } + +void MultiTracker::addTracker(TrackerPtr t) +{ + trackers.insert(trackers.begin(), t); + if(trackers.size() > MaxTrackers){ + LOG_ERROR(TAG, "trackers reaches the maximum " + to_string(MaxTrackers)); + trackers.pop_back(); + } +}