NVIDIA DeepStream SDK API Reference

9.2 Release
sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #ifndef NVMULTIOBJECTTRACKERBASE_HPP_
19 #define NVMULTIOBJECTTRACKERBASE_HPP_
20 
21 #include <vector>
22 #include <unordered_map>
23 #include <map>
24 #include <set>
25 #include <deque>
26 #include <random>
27 #include <limits>
28 #ifndef _WIN32
29 #include <sys/syscall.h>
30 #endif
31 
32 #include "nvdstracker.h"
33 #include "nvds_tracker_meta.h"
34 
35 #include "modules/utility/debug_common.hpp"
36 #include "modules/DataAssociator/DataAssociator_factory.hpp"
37 #include "modules/VisualTracker/VisualTracker_factory.hpp"
38 #include "modules/ReID/ReID_factory.hpp"
39 #include "modules/Segmenter/Segmenter_factory.hpp"
40 #include "modules/ReIDService/ReIDService_factory.hpp"
41 #include "modules/PoseEstimator/PoseEstimator_factory.hpp"
42 #include "modules/NvMultiObjectTracker/NvMultiObjectTracker_common.hpp"
43 #include "modules/NvMultiObjectTracker/localizer.hpp"
44 #include "modules/NvMultiObjectTracker/NvTrackerParams.hpp"
45 #include "modules/NvMultiObjectTracker/NvTrackedObject.hpp"
46 
49 {
50 public:
53 
59  NvTrackerParamsBase(const std::string &configFilePath, const std::string moduleName);
60 
65  NvTrackerParamsBase(const YAML::Node &fn);
66 
71  void read(const YAML::Node &fn) override;
72 
73  // [General]
75  bool m_isInit = false;
76 
78  // [Class match]
80 
81  // [Target candidacy]
83 
84  // [Frame ID]
86 };
87 
90 {
91 public:
96  NvMultiObjectTrackerBase(const std::string &configFilePath);
97 
100 
102  bool isInitialized() { return m_isInit; }
103 
109  virtual void initialize(const NvMotDataTypes::Size srcImgSize, const size_t srcImgPitch);
110 
116  virtual void update(
117  const std::map<NvMOTStreamId, NvMOTFrame*> &nvFramesInBatch, NvMOTTrackedObjBatch *&pTrackedObjectsBatch
118  );
119 
124  void queryParams(NvMOTQuery &paramsQuery);
125 
131  void outputPastFrameObjs(
132  const std::set<NvMOTStreamId> videoStreamIdList, NvDsTargetMiscDataBatch *&pPastFrameObjBatch
133  );
134 
141  const std::set<NvMOTStreamId> videoStreamIdList, NvDsTargetMiscDataBatch *&pPastFrameObjBatch
142  );
143 
149  void outputShadowObj(const std::set<NvMOTStreamId> videoStreamIdList, NvDsTargetMiscDataBatch *&pShadowTracksBatch);
150 
155  void deleteRemovedStreamTrackers(const NvMOTStreamId videoStreamID);
156 
161  void updateParams(const std::string &configStr);
162 
165 
170  void setColorFormatType(const NvBufSurfaceColorFormat colorFormat) { m_frameInfo.colorFormat = colorFormat; }
171 
173  uint32_t getMaxStreams() const { return m_frameInfo.maxStreams; }
174 
179  void setMaxStreams(const uint32_t maxStreams) { m_frameInfo.maxStreams = maxStreams; }
180 
185  void setMaxBufSurfAddrSize(const uint32_t maxBufSurfAddrSize)
186  {
187  m_frameInfo.maxBufSurfAddrSize = maxBufSurfAddrSize;
188  }
189 
190 protected:
191 
192  // [Config params set by parsing the config file or by deriving from it]
194  const std::string m_configFilePath;
195 
196  // [Info about the source frame batch]
198  std::map<NvMOTStreamId, NvMOTFrame *> m_inputMeta;
199  std::map<NvMOTStreamId, std::deque<DetectedObjInfo>> m_detectedObjects;
200 
201  // [Target management module (including the state estimator for each target)]
202  std::shared_ptr<NvTrackedObjectManager> m_targets;
203 
204  // [Data association module]
205  std::shared_ptr<IDataAssociator> m_dataAssociator;
206 
207  // [Visual tracker module]
208  std::shared_ptr<IVisualTracker> m_visualTracker;
209 
210  // [ReID module]
211  std::shared_ptr<IReID> m_reid;
212 
213  // [Segmenter module]
214  std::shared_ptr<ISegmenter> m_segmenter;
215 
216  // [Pose estimator module]
217  std::shared_ptr<IPoseEstimator> m_poseEstimator;
218 
219  // [Re-ID service module]
220  std::shared_ptr<IReIDService> m_reidService;
221 
222  // [Camera model module]
223  std::map<const NvMOTStreamId, std::shared_ptr<ObjectModelProjector>> m_objModelProjectors;
224 
225  // [Multi-threaded producer-consumer for stream specific tasks]
226  std::shared_ptr<NvTrackerMultiThreadWorker<assocDataIn_t>> m_threadWorker;
227  bool m_isInit;
230 
232  void initializeSubModules();
233 
236 
243  bool checkInputOutput(
244  const std::map<NvMOTStreamId, NvMOTFrame*> &nvFramesInBatch, NvMOTTrackedObjBatch *&pTrackedObjectsBatch
245  );
246 
248  void parseInputMetadata();
249 
251  void recoverFullBbox();
252 
255 
261 
266  void setOutputData(NvMOTTrackedObjBatch *&pTrackedObjectsBatch);
267 
270 
271  friend class NvTrackedObject;
272 };
273 
274 #endif // NVMULTIOBJECTTRACKERBASE_HPP_
SourceFrameInfo::maxStreams
uint32_t maxStreams
Max # of video streams to be supported.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker_common.hpp:64
NvMultiObjectTrackerBase::update
virtual void update(const std::map< NvMOTStreamId, NvMOTFrame * > &nvFramesInBatch, NvMOTTrackedObjBatch *&pTrackedObjectsBatch)
Perform multi-object tracking for a batch of frames from multiple streams, with at most one frame per...
NvMultiObjectTrackerBase::checkInputOutput
bool checkInputOutput(const std::map< NvMOTStreamId, NvMOTFrame * > &nvFramesInBatch, NvMOTTrackedObjBatch *&pTrackedObjectsBatch)
Check the input and output for the update function.
NvMultiObjectTrackerBase::addStreamSubModulesRuntime
void addStreamSubModulesRuntime()
Add per stream submodules runtime whenever there is a new stream coming in.
NvMultiObjectTrackerBase::setMaxStreams
void setMaxStreams(const uint32_t maxStreams)
Set the maximum number of supported streams.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:179
NvMultiObjectTrackerBase::m_detectedObjects
std::map< NvMOTStreamId, std::deque< DetectedObjInfo > > m_detectedObjects
Valid detected objects obtained from the input metadata.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:199
IBatchLocalizer
Defines batched multi-stream tracker operations.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/localizer.hpp:30
NvTrackerParamsBase::m_checkClassMatch
bool m_checkClassMatch
Restricts association to objects of the same class when enabled.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:79
NvMultiObjectTrackerBase::m_threadWorker
std::shared_ptr< NvTrackerMultiThreadWorker< assocDataIn_t > > m_threadWorker
Multi-threaded producer-consumer for stream specific tasks.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:226
NvMultiObjectTrackerBase::m_segmenter
std::shared_ptr< ISegmenter > m_segmenter
Object segmentation module.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:214
NvMultiObjectTrackerBase::wrapUpProcessingFrameBatch
void wrapUpProcessingFrameBatch()
Advance batch state and emit optional debug output.
NvMultiObjectTrackerBase::m_configFilePath
const std::string m_configFilePath
Path to the tracker configuration file.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:194
_NvMOTTrackedObjBatch
Holds a batch of lists of tracked objects.
Definition: includes/nvdstracker.h:375
NvMultiObjectTrackerBase::m_reid4ReAssocState
REID4REASSOC_STATE m_reid4ReAssocState
Indicates whether per-stream input must be resubmitted for ReID-based reassociation.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:229
NvMultiObjectTrackerBase::m_reidService
std::shared_ptr< IReIDService > m_reidService
Re-ID Service module.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:220
NvMultiObjectTrackerBase::m_objModelProjectors
std::map< const NvMOTStreamId, std::shared_ptr< ObjectModelProjector > > m_objModelProjectors
Refine bbox based on 3D object model.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:223
NvTrackedObject
Stores and updates the state of one tracked target.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvTrackedObject.hpp:203
NvMultiObjectTrackerBase::setMaxBufSurfAddrSize
void setMaxBufSurfAddrSize(const uint32_t maxBufSurfAddrSize)
Set the maximum surface-buffer address pool size.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:185
NvMultiObjectTrackerBase::outputShadowObj
void outputShadowObj(const std::set< NvMOTStreamId > videoStreamIdList, NvDsTargetMiscDataBatch *&pShadowTracksBatch)
Output most recent frame history for current shadow tracks to the plugin.
NvTrackerParamsBase::m_useBatchNumForFrameId
bool m_useBatchNumForFrameId
Selects the batch counter instead of the per-stream frame number for cross-stream synchronization.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:85
NvMultiObjectTrackerBase::setOutputData
void setOutputData(NvMOTTrackedObjBatch *&pTrackedObjectsBatch)
Fill out the output metadata.
NvMultiObjectTrackerBase::m_targets
std::shared_ptr< NvTrackedObjectManager > m_targets
Targets in use and in the object pool.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:202
NvMultiObjectTrackerBase::performDataAssociationAndUpdate
void performDataAssociationAndUpdate()
Submit all streams' objects from main thread to each working thread to perform data association,...
NvMultiObjectTrackerBase::setColorFormatType
void setColorFormatType(const NvBufSurfaceColorFormat colorFormat)
Set the input surface color format.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:170
NvMultiObjectTrackerBase::deleteRemovedStreamTrackers
void deleteRemovedStreamTrackers(const NvMOTStreamId videoStreamID)
Delete trackers when a stream is removed.
NvMultiObjectTrackerBase::performDataAssociationAndUpdatePerStream
void performDataAssociationAndUpdatePerStream(assocDataIn_t in)
Function called in each thread to perform each stream's data association and update.
NvMultiObjectTrackerBase
Coordinates tracker submodules to process batched multi-stream input.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:89
NvTrackerParamsBase::m_minDetectorConfidence
float m_minDetectorConfidence
Minimum detector confidence required for tracking.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:82
NvMultiObjectTrackerBase::initialize
virtual void initialize(const NvMotDataTypes::Size srcImgSize, const size_t srcImgPitch)
Initialize variables and allocate memories.
NvMultiObjectTrackerBase::m_inputMeta
std::map< NvMOTStreamId, NvMOTFrame * > m_inputMeta
Input frame metadata keyed by stream ID.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:198
NvMultiObjectTrackerBase::m_frameInfo
SourceFrameInfo m_frameInfo
Source video frame information.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:197
NvMultiObjectTrackerBase::updateParams
void updateParams(const std::string &configStr)
Apply supported runtime tracker configuration updates.
NvTrackerParams
Provides common loading helpers for tracker configuration parameters.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvTrackerParams.hpp:35
NvMOTStreamId
uint64_t NvMOTStreamId
Definition: includes/nvdstracker.h:53
NvMultiObjectTrackerBase::m_poseEstimator
std::shared_ptr< IPoseEstimator > m_poseEstimator
Pose estimation module.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:217
_NvMOTQuery
Holds the capabilities and requirements reported by the tracker library.
Definition: includes/nvdstracker.h:420
NvMultiObjectTrackerBase::recoverFullBbox
void recoverFullBbox()
Recover the full bbox if 3D camera params are provided.
SourceFrameInfo::colorFormat
NvBufSurfaceColorFormat colorFormat
Color format of the input surfaces.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker_common.hpp:63
NvTrackerParamsBase::m_debugVerboseLevel
int m_debugVerboseLevel
Debug message verbose mode level.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:74
NvMultiObjectTrackerBase::m_paramsBase
NvTrackerParamsBase m_paramsBase
Configuration parameters used by the base tracker.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:193
NvMultiObjectTrackerBase::queryParams
void queryParams(NvMOTQuery &paramsQuery)
Populate tracker capability and memory requirement fields.
SourceFrameInfo::maxBufSurfAddrSize
uint32_t maxBufSurfAddrSize
Max size of surface buffer pool.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker_common.hpp:65
NvMultiObjectTrackerBase::getColorFormatType
NvBufSurfaceColorFormat getColorFormatType() const
Return the configured input surface color format.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:164
_NvDsTargetMiscDataBatch
Batch of all streams of a given target misc output.
Definition: includes/nvds_tracker_meta.h:113
NvMultiObjectTrackerBase::NvMultiObjectTrackerBase
NvMultiObjectTrackerBase(const std::string &configFilePath)
Constructor.
NvMotDataTypes::Size
Represents a two-dimensional integer size.
Definition: sources/libs/nvmultiobjecttracker/include/modules/utility/dataTypes.hpp:52
SourceFrameInfo
Information about the input source frames for the input frame batch.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker_common.hpp:49
NvMultiObjectTrackerBase::m_reid
std::shared_ptr< IReID > m_reid
ReID module.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:211
NvMultiObjectTrackerBase::~NvMultiObjectTrackerBase
~NvMultiObjectTrackerBase()
Release the tracker submodules.
REID4REASSOC_STATE
REID4REASSOC_STATE
Identifies the ReID processing stage for reassociation.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvTrackedObject.hpp:60
NvMultiObjectTrackerBase::getMaxStreams
uint32_t getMaxStreams() const
Return the maximum number of supported streams.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:173
NvMultiObjectTrackerBase::isInitialized
bool isInitialized()
Report whether the tracker is initialized.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:102
NvMultiObjectTrackerBase::outputPastFrameObjs
void outputPastFrameObjs(const std::set< NvMOTStreamId > videoStreamIdList, NvDsTargetMiscDataBatch *&pPastFrameObjBatch)
Output past-frame tracking data to tracker plugin and clear the buffer.
NvTrackerParamsBase
Stores configuration parameters used by the base tracker.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:48
NvMultiObjectTrackerBase::initializeSubModules
void initializeSubModules()
Initialize the sub-modules.
NvMultiObjectTrackerBase::m_isInitSubModules
bool m_isInitSubModules
Indicates whether all tracker submodules are initialized.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:228
assocDataIn_t
Input for the data association module.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvTrackedObject.hpp:86
nvdstracker.h
NvTrackerParamsBase::read
void read(const YAML::Node &fn) override
Read base tracker parameters from a YAML node.
NvTrackerParamsBase::m_isInit
bool m_isInit
Indicates whether the parameters have been initialized.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:75
NvBufSurfaceColorFormat
NvBufSurfaceColorFormat
Defines color formats for NvBufSurface.
Definition: includes/nvbufsurface.h:110
NvMultiObjectTrackerBase::m_isInit
bool m_isInit
Indicates whether the base tracker is initialized.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:227
NvTrackerParamsBase::NvTrackerParamsBase
NvTrackerParamsBase()
Initialize the base tracker parameters with default values.
NvMultiObjectTrackerBase::m_visualTracker
std::shared_ptr< IVisualTracker > m_visualTracker
Visual tracker module for target localization.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:208
NvMultiObjectTrackerBase::m_dataAssociator
std::shared_ptr< IDataAssociator > m_dataAssociator
Data association module.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker.hpp:205
NvMultiObjectTrackerBase::parseInputMetadata
void parseInputMetadata()
Parse and filter the input metadata and store only valid detected objects.
NvMultiObjectTrackerBase::outputTerminatedObjs
void outputTerminatedObjs(const std::set< NvMOTStreamId > videoStreamIdList, NvDsTargetMiscDataBatch *&pPastFrameObjBatch)
Output complete frame history for all terminated tracks to the plugin.