5
#ifndef __OPENCV_TRACKING_TRACKING_BY_MATCHING_HPP__
6
#define __OPENCV_TRACKING_TRACKING_BY_MATCHING_HPP__
11
#include <unordered_map>
18
#include "opencv2/core.hpp"
19
#include "opencv2/imgproc.hpp"
24
inline
namespace
tracking {
59
confidence(confidence),
65
using
TrackedObjects = std::deque<TrackedObject>;
67
bool
operator==(
const
TrackedObject& first,
const
TrackedObject& second);
68
bool
operator!=(
const
TrackedObject& first,
const
TrackedObject& second);
70
using
ObjectTracks = std::unordered_map<int, TrackedObjects>;
96
virtual
void
compute(
const
std::vector<cv::Mat> &mats,
97
CV_OUT std::vector<cv::Mat>& descrs) = 0;
115
: descr_size_(descr_size), interpolation_(interpolation) {
133
cv::resize(mat, descr, descr_size_, 0, 0, interpolation_);
141
void
compute(
const
std::vector<cv::Mat> &mats,
142
CV_OUT std::vector<cv::Mat>& descrs)
override
{
143
descrs.resize(mats.size());
144
for
(
size_t
i = 0; i < mats.size(); i++) {
145
compute(mats[i], descrs[i]);
176
virtual
std::vector<float>
compute(
const
std::vector<cv::Mat> &descrs1,
177
const
std::vector<cv::Mat> &descrs2) = 0;
209
const
std::vector<cv::Mat> &descrs1,
210
const
std::vector<cv::Mat> &descrs2)
override;
236
float
scale = -1,
float
offset = 1)
237
: type_(type), scale_(scale), offset_(offset) {}
251
std::vector<float>
compute(
const
std::vector<cv::Mat> &descrs1,
252
const
std::vector<cv::Mat> &descrs2)
override;
330
predicted_rect(!objs.empty() ? objs.back().rect :
cv::
Rect()),
331
last_image(last_image),
332
descriptor_fast(descriptor_fast),
333
descriptor_strong(descriptor_strong),
337
first_object = objs[0];
344
bool
empty()
const
{
return
objects.empty(); }
350
size_t
size()
const
{
return
objects.size(); }
374
return
objects.back();
383
return
objects.back();
418
using
Descriptor = std::shared_ptr<IImageDescriptor>;
419
using
Distance = std::shared_ptr<IDescriptorDistance>;
434
uint64_t timestamp) = 0;
506
virtual
std::unordered_map<size_t, std::vector<cv::Point> >
getActiveTracks()
const
= 0;
533
virtual
const
std::unordered_map<size_t, Track> &
tracks()
const
= 0;
n-dimensional dense array class
Definition:
mat.hpp:802
Template class for 2D rectangles
Definition:
core/types.hpp:421
Template class for specifying the size of an image or rectangle.
Definition:
core/types.hpp:316
_Tp height
the height
Definition:
core/types.hpp:340
_Tp width
the width
Definition:
core/types.hpp:339
The CosDistance class allows computing cosine distance between two reidentification descriptors.
Definition:
tracking_by_matching.hpp:186
CosDistance(const cv::Size &descriptor_size)
CosDistance constructor.
float compute(const cv::Mat &descr1, const cv::Mat &descr2) override
Computes distance between two descriptors.
std::vector< float > compute(const std::vector< cv::Mat > &descrs1, const std::vector< cv::Mat > &descrs2) override
Computes distances between two descriptors in batches.
The IDescriptorDistance class declares an interface for distance computation between reidentification...
Definition:
tracking_by_matching.hpp:160
virtual float compute(const cv::Mat &descr1, const cv::Mat &descr2)=0
Computes distance between two descriptors.
virtual std::vector< float > compute(const std::vector< cv::Mat > &descrs1, const std::vector< cv::Mat > &descrs2)=0
Computes distances between two descriptors in batches.
The IImageDescriptor class declares base class for image descriptor.
Definition:
tracking_by_matching.hpp:76
virtual void compute(const cv::Mat &mat, CV_OUT cv::Mat &descr)=0
Computes image descriptor.
virtual void compute(const std::vector< cv::Mat > &mats, CV_OUT std::vector< cv::Mat > &descrs)=0
Computes image descriptors in batches.
virtual cv::Size size() const =0
Descriptor size getter.
Tracker-by-Matching algorithm interface.
Definition:
tracking_by_matching.hpp:416
virtual size_t count() const =0
Returns number of counted people.
virtual bool isTrackValid(size_t track_id) const =0
isTrackValid Checks whether track is valid (duration > threshold).
virtual void process(const cv::Mat &frame, const TrackedObjects &detections, uint64_t timestamp)=0
Process given frame.
virtual const TrackerParams & params() const =0
Pipeline parameters getter.
virtual const Descriptor & descriptorFast() const =0
Fast descriptor getter.
virtual const std::unordered_map< size_t, Track > & tracks() const =0
tracks Returns all tracks including forgotten (lost too many frames ago).
virtual bool isTrackForgotten(size_t id) const =0
isTrackForgotten returns true if track is forgotten.
virtual TrackedObjects trackedDetections() const =0
Get tracked detections.
virtual const Distance & distanceFast() const =0
Fast distance getter.
virtual const Descriptor & descriptorStrong() const =0
Strong descriptor getter.
virtual void setDescriptorStrong(const Descriptor &val)=0
Strong descriptor setter.
virtual void setDescriptorFast(const Descriptor &val)=0
Fast descriptor setter.
virtual void dropForgottenTrack(size_t track_id)=0
dropForgottenTrack Check that the track was lost too many frames ago and removes it frm memory.
virtual void setDistanceFast(const Distance &val)=0
Fast distance setter.
virtual std::unordered_map< size_t, std::vector< cv::Point > > getActiveTracks() const =0
Get active tracks to draw
virtual ~ITrackerByMatching()
Destructor for the tracker
Definition:
tracking_by_matching.hpp:424
virtual void setParams(const TrackerParams ¶ms)=0
Pipeline parameters setter.
virtual void dropForgottenTracks()=0
dropForgottenTracks Removes tracks from memory that were lost too many frames ago.
virtual const Distance & distanceStrong() const =0
Strong distance getter.
virtual void setDistanceStrong(const Distance &val)=0
Strong distance setter.
virtual cv::Mat drawActiveTracks(const cv::Mat &frame)=0
Draws active tracks on a given frame.
Computes distance between images using MatchTemplate function from OpenCV library and its cross-corre...
Definition:
tracking_by_matching.hpp:222
std::vector< float > compute(const std::vector< cv::Mat > &descrs1, const std::vector< cv::Mat > &descrs2) override
Computes distances between two descriptors in batches.
MatchTemplateDistance(int type=cv::TemplateMatchModes::TM_CCORR_NORMED, float scale=-1, float offset=1)
Constructs the distance object.
Definition:
tracking_by_matching.hpp:235
float compute(const cv::Mat &descr1, const cv::Mat &descr2) override
Computes distance between image descriptors.
Uses resized image as descriptor.
Definition:
tracking_by_matching.hpp:106
ResizedImageDescriptor(const cv::Size &descr_size, const cv::InterpolationFlags interpolation)
Constructor.
Definition:
tracking_by_matching.hpp:113
void compute(const cv::Mat &mat, CV_OUT cv::Mat &descr) override
Computes image descriptor.
Definition:
tracking_by_matching.hpp:131
void compute(const std::vector< cv::Mat > &mats, CV_OUT std::vector< cv::Mat > &descrs) override
Computes images descriptors.
Definition:
tracking_by_matching.hpp:141
cv::Size size() const override
Returns descriptor size.
Definition:
tracking_by_matching.hpp:124
The Track class describes tracks.
Definition:
tracking_by_matching.hpp:318
cv::Mat last_image
Image of last detected object in track.
Definition:
tracking_by_matching.hpp:389
cv::Mat descriptor_fast
Fast descriptor.
Definition:
tracking_by_matching.hpp:390
size_t lost
How many frames ago track has been lost.
Definition:
tracking_by_matching.hpp:392
TrackedObjects objects
Detected objects;
Definition:
tracking_by_matching.hpp:386
bool empty() const
empty returns if track does not contain objects.
Definition:
tracking_by_matching.hpp:344
TrackedObject & back()
back returns non-const reference to last object in track.
Definition:
tracking_by_matching.hpp:381
size_t length
Definition:
tracking_by_matching.hpp:395
const TrackedObject & operator[](size_t i) const
operator [] return const reference to detected object with specified index.
Definition:
tracking_by_matching.hpp:358
cv::Rect predicted_rect
Definition:
tracking_by_matching.hpp:387
const TrackedObject & back() const
back returns const reference to last object in track.
Definition:
tracking_by_matching.hpp:372
TrackedObject first_object
First object in track.
Definition:
tracking_by_matching.hpp:394
size_t size() const
size returns number of detected objects in a track.
Definition:
tracking_by_matching.hpp:350
Track(const TrackedObjects &objs, const cv::Mat &last_image, const cv::Mat &descriptor_fast, const cv::Mat &descriptor_strong)
Track constructor.
Definition:
tracking_by_matching.hpp:327
TrackedObject & operator[](size_t i)
operator [] return non-const reference to detected object with specified index.
Definition:
tracking_by_matching.hpp:366
cv::Mat descriptor_strong
Strong descriptor (reid embedding).
Definition:
tracking_by_matching.hpp:391
#define CV_Assert(expr)
Checks a condition at runtime and throws exception if it fails
Definition:
base.hpp:342
@ TM_CCORR_NORMED
Definition:
imgproc.hpp:3739
"black box" representation of the file storage associated with a file on disk.
Definition:
aruco.hpp:75
Definition:
cvstd_wrapper.hpp:74
The TrackedObject struct defines properties of detected object.
Definition:
tracking_by_matching.hpp:33
TrackedObject(const cv::Rect &rect, float confidence, int frame_idx, int object_id)
Constructor with parameters.
Definition:
tracking_by_matching.hpp:56
double confidence
Detection confidence level (-1 if N/A).
Definition:
tracking_by_matching.hpp:35
cv::Rect rect
Detected object ROI (zero area if N/A).
Definition:
tracking_by_matching.hpp:34
int frame_idx
Frame index where object was detected (-1 if N/A).
Definition:
tracking_by_matching.hpp:36
uint64_t timestamp
Timestamp in milliseconds.
Definition:
tracking_by_matching.hpp:38
int object_id
Unique object identifier (-1 if N/A).
Definition:
tracking_by_matching.hpp:37
TrackedObject()
Default constructor.
Definition:
tracking_by_matching.hpp:43
The TrackerParams struct stores parameters of TrackerByMatching
Definition:
tracking_by_matching.hpp:266
size_t min_track_duration
Min track duration in milliseconds.
Definition:
tracking_by_matching.hpp:267
float shape_affinity_w
Shape affinity weight.
Definition:
tracking_by_matching.hpp:281
cv::Vec2f bbox_aspect_ratios_range
Bounding box aspect ratios range.
Definition:
tracking_by_matching.hpp:289
size_t forget_delay
Definition:
tracking_by_matching.hpp:269
cv::Vec2f bbox_heights_range
Bounding box heights range.
Definition:
tracking_by_matching.hpp:291
float min_det_conf
Min confidence of detection.
Definition:
tracking_by_matching.hpp:287
float motion_affinity_w
Motion affinity weight.
Definition:
tracking_by_matching.hpp:283
int max_num_objects_in_track
Definition:
tracking_by_matching.hpp:305
float strong_affinity_thr
of lost track.
Definition:
tracking_by_matching.hpp:296
float aff_thr_strong
Definition:
tracking_by_matching.hpp:277
float reid_thr
Affinity threshold for re-identification.
Definition:
tracking_by_matching.hpp:300
bool drop_forgotten_tracks
Definition:
tracking_by_matching.hpp:302
float aff_thr_fast
Definition:
tracking_by_matching.hpp:273
int predict
Definition:
tracking_by_matching.hpp:293
float time_affinity_w
Time affinity weight.
Definition:
tracking_by_matching.hpp:285