OpenShot Library | libopenshot  0.5.0
sort.hpp
Go to the documentation of this file.
1 // © OpenShot Studios, LLC
2 //
3 // SPDX-License-Identifier: LGPL-3.0-or-later
4 
5 #include "KalmanTracker.h"
6 #include "Hungarian.h"
7 
8 #include <iostream>
9 #include <fstream>
10 #include <iomanip> // to format image names using setw() and setfill()
11 #include <set>
12 #include <algorithm> // for std::sort
13 
14 #include "opencv2/video/tracking.hpp"
15 #include "opencv2/highgui/highgui.hpp"
16 
17 #ifndef _OPENCV_KCFTRACKER_HPP_
18 #define _OPENCV_KCFTRACKER_HPP_
19 #endif
20 #pragma once
21 
22 typedef struct TrackingBox
23 {
24  int frame = 0;
25  float confidence = 0;
26  int classId = 0;
27  int id = 0;
28  cv::Rect_<float> box = cv::Rect_<float>(0.0, 0.0, 0.0, 0.0);
30  TrackingBox(int _frame, float _confidence, int _classId, int _id) : frame(_frame), confidence(_confidence), classId(_classId), id(_id) {}
31 } TrackingBox;
32 
34 {
35 public:
36  // Constructor
37  SortTracker(int max_age = 50, int min_hits = 5, int max_missed = 7, double min_iou = 0.1, double nms_iou_thresh = 0.5, double min_conf = 0.3);
38  // Initialize tracker
39 
40  // Update position based on the new frame
41  void update(std::vector<cv::Rect> detection, int frame_count, double image_diagonal, std::vector<float> confidences, std::vector<int> classIds);
42  static double GetIOU(cv::Rect_<float> bb_test, cv::Rect_<float> bb_gt);
43  double GetCentroidsDistance(cv::Rect_<float> bb_test, cv::Rect_<float> bb_gt);
44  std::vector<KalmanTracker> trackers;
45 
46  double max_centroid_dist_norm = 0.3;
47 
48  std::vector<cv::Rect_<float>> predictedBoxes;
49  std::vector<std::vector<double>> cost_matrix;
50  std::vector<int> assignment;
51  std::set<int> unmatchedDetections;
52  std::set<int> unmatchedTrajectories;
53  std::set<int> allItems;
54  std::set<int> matchedItems;
55  std::vector<cv::Point> matchedPairs;
56 
57  std::vector<TrackingBox> frameTrackingResult;
58  std::vector<int> dead_trackers_id;
59 
60  unsigned int trkNum = 0;
61  unsigned int detNum = 0;
62  int _min_hits;
63  int _max_age;
65  double _min_iou;
67  double _min_conf;
68  unsigned int _next_id;
70 };
SortTracker::matchedPairs
std::vector< cv::Point > matchedPairs
Definition: sort.hpp:55
TrackingBox::confidence
float confidence
Definition: sort.hpp:25
TrackingBox
struct TrackingBox TrackingBox
SortTracker::assignment
std::vector< int > assignment
Definition: sort.hpp:50
TrackingBox
Definition: sort.hpp:22
SortTracker::unmatchedTrajectories
std::set< int > unmatchedTrajectories
Definition: sort.hpp:52
SortTracker::alive_tracker
bool alive_tracker
Definition: sort.hpp:69
TrackingBox::frame
int frame
Definition: sort.hpp:24
SortTracker::detNum
unsigned int detNum
Definition: sort.hpp:61
SortTracker::frameTrackingResult
std::vector< TrackingBox > frameTrackingResult
Definition: sort.hpp:57
TrackingBox::TrackingBox
TrackingBox()
Definition: sort.hpp:29
SortTracker::trackers
std::vector< KalmanTracker > trackers
Definition: sort.hpp:44
SortTracker::GetCentroidsDistance
double GetCentroidsDistance(cv::Rect_< float > bb_test, cv::Rect_< float > bb_gt)
Definition: sort.cpp:35
SortTracker::_max_missed
int _max_missed
Definition: sort.hpp:64
SortTracker::unmatchedDetections
std::set< int > unmatchedDetections
Definition: sort.hpp:51
SortTracker
Definition: sort.hpp:33
TrackingBox::classId
int classId
Definition: sort.hpp:26
SortTracker::_nms_iou_thresh
double _nms_iou_thresh
Definition: sort.hpp:66
SortTracker::SortTracker
SortTracker(int max_age=50, int min_hits=5, int max_missed=7, double min_iou=0.1, double nms_iou_thresh=0.5, double min_conf=0.3)
Definition: sort.cpp:10
SortTracker::GetIOU
static double GetIOU(cv::Rect_< float > bb_test, cv::Rect_< float > bb_gt)
Definition: sort.cpp:23
SortTracker::_next_id
unsigned int _next_id
Definition: sort.hpp:68
TrackingBox::box
cv::Rect_< float > box
Definition: sort.hpp:28
SortTracker::matchedItems
std::set< int > matchedItems
Definition: sort.hpp:54
SortTracker::_min_conf
double _min_conf
Definition: sort.hpp:67
SortTracker::_min_iou
double _min_iou
Definition: sort.hpp:65
SortTracker::_max_age
int _max_age
Definition: sort.hpp:63
SortTracker::max_centroid_dist_norm
double max_centroid_dist_norm
Definition: sort.hpp:46
TrackingBox::id
int id
Definition: sort.hpp:27
KalmanTracker.h
TrackingBox::TrackingBox
TrackingBox(int _frame, float _confidence, int _classId, int _id)
Definition: sort.hpp:30
Hungarian.h
SortTracker::cost_matrix
std::vector< std::vector< double > > cost_matrix
Definition: sort.hpp:49
SortTracker::trkNum
unsigned int trkNum
Definition: sort.hpp:60
SortTracker::_min_hits
int _min_hits
Definition: sort.hpp:62
SortTracker::allItems
std::set< int > allItems
Definition: sort.hpp:53
SortTracker::predictedBoxes
std::vector< cv::Rect_< float > > predictedBoxes
Definition: sort.hpp:48
SortTracker::update
void update(std::vector< cv::Rect > detection, int frame_count, double image_diagonal, std::vector< float > confidences, std::vector< int > classIds)
Definition: sort.cpp:84
SortTracker::dead_trackers_id
std::vector< int > dead_trackers_id
Definition: sort.hpp:58