X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=src%2FMultiTracker.cpp;h=199d9f7d97774104ecc6b224e272ed32f700e78f;hb=HEAD;hp=138657e9b8630c65110eb8e2b0e2f634dab1d452;hpb=70532232dd98f31467eff7baaaff6e68f803bb45;p=trackerpp.git diff --git a/src/MultiTracker.cpp b/src/MultiTracker.cpp index 138657e..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,12 +14,14 @@ 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) { LOG_DEBUG(TAG, "init - loading model.pkl"); - predictor = PredictorWrapper::create("./python", "./python/model.pkl"); + predictor = PredictorWrapperPtr(new PredictorWrapper()); + predictor->load("./resources/model.pkl"); predictor->dump(); this->descriptor = {Size(64, 128), Size(16, 16), Size(8, 8), Size(8, 8), 9}; } @@ -36,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); @@ -60,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; } @@ -73,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 @@ -149,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); } @@ -211,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(); + } +}