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// /
850CTracker::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+ }
0 commit comments