Skip to content

Commit 83c9d97

Browse files
committed
Refactoring of CTracker class
1 parent 4b1d7f0 commit 83c9d97

12 files changed

Lines changed: 357 additions & 324 deletions

File tree

async_detector/AsyncDetector.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ void AsyncDetector::DetectThread(const config_t& config, cv::Mat firstFrame, Fra
437437
///
438438
void AsyncDetector::TrackingThread(const TrackerSettings& settings, FramesQueue* framesQue, bool* stopFlag)
439439
{
440-
std::unique_ptr<CTracker> tracker = std::make_unique<CTracker>(settings);
440+
std::unique_ptr<BaseTracker> tracker = BaseTracker::CreateTracker(settings);
441441

442442
for (; !(*stopFlag);)
443443
{

cars_counting/CarsCounting.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ bool CarsCounting::InitTracker(cv::UMat frame)
416416
settings.m_maxTraceLength = cvRound(4 * m_fps); // Maximum trace length
417417
}
418418

419-
m_tracker = std::make_unique<CTracker>(settings);
419+
m_tracker = BaseTracker::CreateTracker(settings);
420420
}
421421
#if 0
422422
#if 0

cars_counting/CarsCounting.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ class CarsCounting
357357
tracking::Detectors m_detectorType = tracking::Detectors::Yolo_Darknet;
358358

359359
std::unique_ptr<BaseDetector> m_detector;
360-
std::unique_ptr<CTracker> m_tracker;
360+
std::unique_ptr<BaseTracker> m_tracker;
361361

362362
bool m_drawHeatMap = false;
363363

example/MouseExample.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ void MouseTracking(cv::CommandLineParser parser)
5959
settings.m_maximumAllowedSkippedFrames = 25;
6060
settings.m_maxTraceLength = 25;
6161

62-
CTracker tracker(settings);
62+
std::unique_ptr<BaseTracker> tracker = BaseTracker::CreateTracker(settings);
6363

6464
track_t alpha = 0;
6565
cv::RNG rng;
@@ -85,7 +85,6 @@ void MouseTracking(cv::CommandLineParser parser)
8585
regions.push_back(CRegion(cv::Rect(cvRound(p.x), cvRound(p.y), 1, 1)));
8686
}
8787

88-
8988
for (size_t i = 0; i < pts.size(); i++)
9089
{
9190
#if (CV_VERSION_MAJOR >= 4)
@@ -95,10 +94,10 @@ void MouseTracking(cv::CommandLineParser parser)
9594
#endif
9695
}
9796

98-
tracker.Update(regions, cv::UMat(), 100);
97+
tracker->Update(regions, cv::UMat(), 100);
9998

10099
std::vector<TrackingObject> tracks;
101-
tracker.GetTracks(tracks);
100+
tracker->GetTracks(tracks);
102101
std::cout << tracks.size() << std::endl;
103102

104103
for (size_t i = 0; i < tracks.size(); i++)
@@ -119,9 +118,7 @@ void MouseTracking(cv::CommandLineParser parser)
119118
}
120119

121120
if (writer.isOpened())
122-
{
123121
writer << frame;
124-
}
125122

126123
#ifndef SILENT_WORK
127124
cv::imshow("Video", frame);

example/VideoExample.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ class VideoExample
343343

344344
protected:
345345
std::unique_ptr<BaseDetector> m_detector;
346-
std::unique_ptr<CTracker> m_tracker;
346+
std::unique_ptr<BaseTracker> m_tracker;
347347

348348
bool m_showLogs = true;
349349
float m_fps = 25;

example/examples.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ class MotionDetectorExample final : public VideoExample
145145
}
146146
}
147147

148-
m_tracker = std::make_unique<CTracker>(m_trackerSettings);
148+
m_tracker = BaseTracker::CreateTracker(m_trackerSettings);
149149
return true;
150150
}
151151

@@ -269,7 +269,7 @@ class FaceDetectorExample final : public VideoExample
269269
m_trackerSettings.m_maximumAllowedSkippedFrames = cvRound(m_fps / 2); // Maximum allowed skipped frames
270270
m_trackerSettings.m_maxTraceLength = cvRound(5 * m_fps); // Maximum trace length
271271
}
272-
m_tracker = std::make_unique<CTracker>(m_trackerSettings);
272+
m_tracker = BaseTracker::CreateTracker(m_trackerSettings);
273273

274274
return true;
275275
}
@@ -359,7 +359,7 @@ class PedestrianDetectorExample final : public VideoExample
359359
m_trackerSettings.m_maximumAllowedSkippedFrames = cvRound(m_fps); // Maximum allowed skipped frames
360360
m_trackerSettings.m_maxTraceLength = cvRound(5 * m_fps); // Maximum trace length
361361
}
362-
m_tracker = std::make_unique<CTracker>(m_trackerSettings);
362+
m_tracker = BaseTracker::CreateTracker(m_trackerSettings);
363363

364364
return true;
365365
}
@@ -499,7 +499,7 @@ class OpenCVDNNExample final : public VideoExample
499499
m_trackerSettings.m_maximumAllowedSkippedFrames = cvRound(2 * m_fps); // Maximum allowed skipped frames
500500
m_trackerSettings.m_maxTraceLength = cvRound(2 * m_fps); // Maximum trace length
501501
}
502-
m_tracker = std::make_unique<CTracker>(m_trackerSettings);
502+
m_tracker = BaseTracker::CreateTracker(m_trackerSettings);
503503
return true;
504504
}
505505

@@ -738,7 +738,7 @@ class YoloDarknetExample final : public VideoExample
738738
m_trackerSettings.AddNearTypes(ObjectTypes::obj_person, ObjectTypes::obj_bicycle, true);
739739
m_trackerSettings.AddNearTypes(ObjectTypes::obj_person, ObjectTypes::obj_motorbike, true);
740740

741-
m_tracker = std::make_unique<CTracker>(m_trackerSettings);
741+
m_tracker = BaseTracker::CreateTracker(m_trackerSettings);
742742

743743
return true;
744744
}
@@ -956,7 +956,7 @@ class YoloTensorRTExample final : public VideoExample
956956
m_trackerSettings.AddNearTypes(ObjectTypes::obj_person, ObjectTypes::obj_bicycle, true);
957957
m_trackerSettings.AddNearTypes(ObjectTypes::obj_person, ObjectTypes::obj_motorbike, true);
958958

959-
m_tracker = std::make_unique<CTracker>(m_trackerSettings);
959+
m_tracker = BaseTracker::CreateTracker(m_trackerSettings);
960960

961961
return true;
962962
}

src/Detector/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,8 @@ endif(BUILD_YOLO_TENSORRT)
9696

9797
target_link_libraries(${PROJECT_NAME} ${LIBS})
9898

99-
install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
99+
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "BaseDetector.h")
100+
install(TARGETS ${PROJECT_NAME}
101+
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
102+
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
103+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/include)

src/Tracker/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,8 @@ endif()
210210

211211
target_link_libraries(${PROJECT_NAME} ${LIBS})
212212

213-
install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
213+
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "Ctracker.h;TrackerSettings.h;trajectory.h;../common/defines.h;../common/object_types.h")
214+
install(TARGETS ${PROJECT_NAME}
215+
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
216+
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
217+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/include)

src/Tracker/Ctracker.cpp

Lines changed: 94 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,54 @@
11
#include "Ctracker.h"
2+
#include "ShortPathCalculator.h"
3+
#include "EmbeddingsCalculator.hpp"
4+
#include "track.h"
5+
6+
///
7+
/// \brief The CTracker class
8+
///
9+
class CTracker final : public BaseTracker
10+
{
11+
public:
12+
CTracker(const TrackerSettings& settings);
13+
CTracker(const CTracker&) = delete;
14+
CTracker(CTracker&&) = delete;
15+
CTracker& operator=(const CTracker&) = delete;
16+
CTracker& operator=(CTracker&&) = delete;
17+
18+
~CTracker(void) = default;
19+
20+
void Update(const regions_t& regions, cv::UMat currFrame, float fps) override;
21+
22+
bool CanGrayFrameToTrack() const override;
23+
bool CanColorFrameToTrack() const override;
24+
size_t GetTracksCount() const override;
25+
void GetTracks(std::vector<TrackingObject>& tracks) const override;
26+
27+
private:
28+
TrackerSettings m_settings;
29+
30+
tracks_t m_tracks;
31+
32+
size_t m_nextTrackID = 0;
33+
34+
cv::UMat m_prevFrame;
35+
36+
std::unique_ptr<ShortPathCalculator> m_SPCalculator;
37+
std::map<objtype_t, std::shared_ptr<EmbeddingsCalculator>> m_embCalculators;
38+
39+
void CreateDistaceMatrix(const regions_t& regions, const std::vector<RegionEmbedding>& regionEmbeddings, distMatrix_t& costMatrix, track_t maxPossibleCost, track_t& maxCost);
40+
void UpdateTrackingState(const regions_t& regions, cv::UMat currFrame, float fps);
41+
void CalcEmbeddins(std::vector<RegionEmbedding>& regionEmbeddings, const regions_t& regions, cv::UMat currFrame) const;
42+
};
43+
// ----------------------------------------------------------------------
244

345
///
446
/// \brief CTracker::CTracker
547
/// Tracker. Manage tracks. Create, remove, update.
648
/// \param settings
749
///
850
CTracker::CTracker(const TrackerSettings& settings)
9-
:
10-
m_settings(settings),
11-
m_nextTrackID(0)
51+
: m_settings(settings)
1252
{
1353
m_SPCalculator.reset();
1454
SPSettings spSettings = { settings.m_distThres, 12 };
@@ -41,10 +81,50 @@ CTracker::CTracker(const TrackerSettings& settings)
4181
}
4282

4383
///
44-
/// \brief CTracker::~CTracker
84+
/// \brief CanGrayFrameToTrack
85+
/// \return
86+
///
87+
bool CTracker::CanGrayFrameToTrack() const
88+
{
89+
bool needColor = (m_settings.m_lostTrackType == tracking::LostTrackType::TrackGOTURN) ||
90+
(m_settings.m_lostTrackType == tracking::LostTrackType::TrackDAT) ||
91+
(m_settings.m_lostTrackType == tracking::LostTrackType::TrackSTAPLE) ||
92+
(m_settings.m_lostTrackType == tracking::LostTrackType::TrackLDES);
93+
return !needColor;
94+
}
95+
96+
///
97+
/// \brief CanColorFrameToTrack
98+
/// \return
99+
///
100+
bool CTracker::CanColorFrameToTrack() const
101+
{
102+
return true;
103+
}
104+
105+
///
106+
/// \brief GetTracksCount
107+
/// \return
45108
///
46-
CTracker::~CTracker(void)
109+
size_t CTracker::GetTracksCount() const
47110
{
111+
return m_tracks.size();
112+
}
113+
114+
///
115+
/// \brief GetTracks
116+
/// \return
117+
///
118+
void CTracker::GetTracks(std::vector<TrackingObject>& tracks) const
119+
{
120+
tracks.clear();
121+
122+
if (m_tracks.size() > tracks.capacity())
123+
tracks.reserve(m_tracks.size());
124+
for (const auto& track : m_tracks)
125+
{
126+
tracks.emplace_back(track->ConstructObject());
127+
}
48128
}
49129

50130
///
@@ -53,9 +133,7 @@ CTracker::~CTracker(void)
53133
/// \param currFrame
54134
/// \param fps
55135
///
56-
void CTracker::Update(const regions_t& regions,
57-
cv::UMat currFrame,
58-
float fps)
136+
void CTracker::Update(const regions_t& regions, cv::UMat currFrame, float fps)
59137
{
60138
UpdateTrackingState(regions, currFrame, fps);
61139

@@ -354,3 +432,11 @@ void CTracker::CalcEmbeddins(std::vector<RegionEmbedding>& regionEmbeddings, con
354432
}
355433
}
356434
}
435+
436+
///
437+
/// BaseTracker::CreateTracker
438+
///
439+
std::unique_ptr<BaseTracker> BaseTracker::CreateTracker(const TrackerSettings& settings)
440+
{
441+
return std::make_unique<CTracker>(settings);
442+
}

src/Tracker/Ctracker.h

Lines changed: 15 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,33 @@
11
#pragma once
2-
#include <iostream>
2+
33
#include <vector>
44
#include <memory>
5-
#include <array>
6-
#include <deque>
7-
#include <map>
8-
#include <set>
95

106
#include "defines.h"
11-
#include "track.h"
12-
#include "ShortPathCalculator.h"
13-
#include "EmbeddingsCalculator.hpp"
7+
#include "trajectory.h"
148
#include "TrackerSettings.h"
15-
// ----------------------------------------------------------------------
169

1710
///
1811
/// \brief The CTracker class
1912
///
20-
class CTracker
13+
class BaseTracker
2114
{
2215
public:
23-
CTracker(const TrackerSettings& settings);
24-
CTracker(const CTracker&) = delete;
25-
CTracker(CTracker&&) = delete;
26-
CTracker& operator=(const CTracker&) = delete;
27-
CTracker& operator=(CTracker&&) = delete;
16+
BaseTracker() = default;
17+
BaseTracker(const BaseTracker&) = delete;
18+
BaseTracker(BaseTracker&&) = delete;
19+
BaseTracker& operator=(const BaseTracker&) = delete;
20+
BaseTracker& operator=(BaseTracker&&) = delete;
2821

29-
~CTracker(void);
30-
31-
void Update(const regions_t& regions, cv::UMat currFrame, float fps);
32-
33-
///
34-
/// \brief CanGrayFrameToTrack
35-
/// \return
36-
///
37-
bool CanGrayFrameToTrack() const
38-
{
39-
bool needColor = (m_settings.m_lostTrackType == tracking::LostTrackType::TrackGOTURN) ||
40-
(m_settings.m_lostTrackType == tracking::LostTrackType::TrackDAT) ||
41-
(m_settings.m_lostTrackType == tracking::LostTrackType::TrackSTAPLE) ||
42-
(m_settings.m_lostTrackType == tracking::LostTrackType::TrackLDES);
43-
return !needColor;
44-
}
45-
46-
///
47-
/// \brief CanColorFrameToTrack
48-
/// \return
49-
///
50-
bool CanColorFrameToTrack() const
51-
{
52-
return true;
53-
}
54-
55-
///
56-
/// \brief GetTracksCount
57-
/// \return
58-
///
59-
size_t GetTracksCount() const
22+
virtual ~BaseTracker(void)
6023
{
61-
return m_tracks.size();
6224
}
63-
///
64-
/// \brief GetTracks
65-
/// \return
66-
///
67-
void GetTracks(std::vector<TrackingObject>& tracks) const
68-
{
69-
tracks.clear();
70-
71-
if (m_tracks.size() > tracks.capacity())
72-
tracks.reserve(m_tracks.size());
73-
for (const auto& track : m_tracks)
74-
{
75-
tracks.emplace_back(track->ConstructObject());
76-
}
77-
}
78-
79-
private:
80-
TrackerSettings m_settings;
81-
82-
tracks_t m_tracks;
83-
84-
size_t m_nextTrackID;
85-
86-
cv::UMat m_prevFrame;
8725

88-
std::unique_ptr<ShortPathCalculator> m_SPCalculator;
89-
std::map<objtype_t, std::shared_ptr<EmbeddingsCalculator>> m_embCalculators;
26+
virtual void Update(const regions_t& regions, cv::UMat currFrame, float fps) = 0;
27+
virtual bool CanGrayFrameToTrack() const = 0;
28+
virtual bool CanColorFrameToTrack() const = 0;
29+
virtual size_t GetTracksCount() const = 0;
30+
virtual void GetTracks(std::vector<TrackingObject>& tracks) const = 0;
9031

91-
void CreateDistaceMatrix(const regions_t& regions, const std::vector<RegionEmbedding>& regionEmbeddings, distMatrix_t& costMatrix, track_t maxPossibleCost, track_t& maxCost);
92-
void UpdateTrackingState(const regions_t& regions, cv::UMat currFrame, float fps);
93-
void CalcEmbeddins(std::vector<RegionEmbedding>& regionEmbeddings, const regions_t& regions, cv::UMat currFrame) const;
32+
static std::unique_ptr<BaseTracker> CreateTracker(const TrackerSettings& settings);
9433
};

0 commit comments

Comments
 (0)