NVIDIA DeepStream SDK API Reference

9.2 Release
sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2025-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 REIDSERVICE_HPP_
19 #define REIDSERVICE_HPP_
20 
21 #include <deque>
22 #include <map>
23 #include "modules/ReIDService/IReIDService.hpp"
24 #include <curl/curl.h>
25 
28 {
29 public:
32 
38  ReIDServiceConfigParams(const std::string &configFilePath, const std::string moduleName);
39 
44  ReIDServiceConfigParams(const YAML::Node &fn);
45 
50  void read(const YAML::Node &fn) override;
51 
58  int m_topK;
61  std::string m_serviceAddress;
63  std::vector<int> m_operateOnClassIds;
70 };
71 
74 {
80  std::map<TargetId, reidServiceAssocInfo> reidServiceAssocResponseMap;
81 };
82 
88  std::string jsonPayload;
89  std::string response;
90  struct curl_slist *headers = nullptr;
91 };
92 
95 {
96 public:
101  ReIDService(const std::string &configFilePath);
102 
104  virtual ~ReIDService();
105 
112  void initialize(
113  const SourceFrameInfo &frameInfo, const uint maxTargetsPerStream,
114  const std::shared_ptr<NvTrackedObjectManager> &targetManager
115  ) override;
116 
121  void queryParams(NvMOTQuery &paramsQuery);
122 
127  void query(const std::map<NvMOTStreamId, NvMOTFrame *> &inputMeta) override;
128 
130  void updateTargetIDs() override;
131 
134 
135 protected:
136  bool m_isInit;
138  std::shared_ptr<NvTrackedObjectManager> m_targetManager;
139  std::map<CURL*, CurlRequestTargetInfo> m_curlRequestInfoMap;
140  CURLM *m_curlMultiHandle;
142  std::string m_curlRequestUrl;
143 
144  // [Thread-related variables]
145  std::thread m_workerThread;
146  std::atomic<bool> m_persistThreadRunning;
147  std::mutex m_inputLock;
148  std::condition_variable m_cond4In;
149  std::queue<CurlRequestTargetInfo> m_inputQueue;
150 
152  void workerThread();
153 
154  std::mutex m_outputLock;
155  std::condition_variable m_cond4Out;
156  std::queue<remoteTargetInfo> m_outputQueue;
157  std::atomic<uint32_t> m_submittedReqCnt;
158  std::atomic<uint32_t> m_finishedReqCnt;
161 
163  void waitToFinish();
164 
165  // [ID correction]
166  std::map<NvMOTStreamId, std::map<TargetId, std::pair<TargetId, int>>> m_idCorrectionMap;
167 
177  bool tryIDCorrection(
178  const std::shared_ptr<NvTrackedObject> targetToBeCorrected,
179  const std::shared_ptr<NvTrackedObject> existingTarget, TargetId associatedTargetID
180  );
181 
187  std::string convertReidFeaturesToJson(const float* reidFeatures, int reidFeatureSize);
188 
193  std::string send_post_request(const std::string& jsonPayload);
194 
199  remoteTargetInfo parseResponseForTargetID(const std::string& response);
200 
206  bool appendCurlRequest(const CurlRequestTargetInfo &curlRequestInfoInput);
207 
212  void processCompletedCurlRequest(CURLMsg *msg);
213 };
214 
215 #endif // REIDSERVICE_HPP_
ReIDService::m_targetManager
std::shared_ptr< NvTrackedObjectManager > m_targetManager
Target manager of the tracked objects.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:138
ReIDService::m_submittedReqCnt
std::atomic< uint32_t > m_submittedReqCnt
Number of submitted tasks.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:157
ReIDService::m_inputLock
std::mutex m_inputLock
Lock associated with input queue.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:147
ReIDService::m_outputQueue
std::queue< remoteTargetInfo > m_outputQueue
Queue for output.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:156
ReIDServiceConfigParams::m_debugVerboseLevel
int m_debugVerboseLevel
Debug message verbose mode level.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:53
ReIDService::m_inputQueue
std::queue< CurlRequestTargetInfo > m_inputQueue
Queue for input.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:149
ReIDServiceConfigParams
Stores configuration for the remote ReID service.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:27
ReIDServiceConfigParams::m_maxGroupCount
int m_maxGroupCount
Maximum number of vectors per object id to be considered for reid service association.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:59
ReIDService::m_outputLock
std::mutex m_outputLock
Lock associated with output.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:154
ReIDService::parseResponseForTargetID
remoteTargetInfo parseResponseForTargetID(const std::string &response)
Parse a remote identity result from a service response.
ReIDServiceConfigParams::m_maxInFlightRequests
int m_maxInFlightRequests
Maximum number of in-flight requests, requests beyond this are dropped.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:67
TargetId
uint64_t TargetId
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker_common.hpp:41
ReIDService::updateTargetIDs
void updateTargetIDs() override
Update target ID using remoteTargetID from reid service.
CurlRequestTargetInfo::response
std::string response
Response text received from the service.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:89
remoteTargetInfo::remoteTargetID
TargetId remoteTargetID
Target ID returned by the remote service.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:78
ReIDService::workerThread
void workerThread()
Process queued remote ReID requests.
ReIDService::appendCurlRequest
bool appendCurlRequest(const CurlRequestTargetInfo &curlRequestInfoInput)
Add a request to the asynchronous CURL multi-handle.
CurlRequestTargetInfo::streamId
NvMOTStreamId streamId
Stream ID of the queried target.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:85
ReIDService::m_idCorrectionMap
std::map< NvMOTStreamId, std::map< TargetId, std::pair< TargetId, int > > > m_idCorrectionMap
Target-ID corrections keyed by stream ID.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:166
CurlRequestTargetInfo
Holds CURL state and target metadata for one service request.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:84
ReIDServiceConfigParams::m_serviceAddress
std::string m_serviceAddress
Address/hostname for the reid service.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:61
ReIDService::getReIDServiceType
const REID_SERVICE_TYPES getReIDServiceType() override
Get the configured ReID-service implementation type.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:133
ReIDServiceConfigParams::m_minSecondClusterConfidence
float m_minSecondClusterConfidence
Minimum confidence for second cluster to be considered for ambiguity checking.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:56
ReIDServiceConfigParams::m_enableBlocking
bool m_enableBlocking
Whether to enable blocking mode.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:54
uint
unsigned int uint
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/helper_math.h:25
ReIDService::waitToFinish
void waitToFinish()
Wait until all submitted service requests have completed.
ReIDServiceConfigParams::read
void read(const YAML::Node &fn) override
Load configuration values from a YAML node.
ReIDService::m_isInit
bool m_isInit
Reid status if runtime variables initialized.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:136
ReIDServiceConfigParams::m_maxIou4IDCorrection
float m_maxIou4IDCorrection
Maximum IOU for ID correction.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:66
ReIDService::m_finishedReqCnt
std::atomic< uint32_t > m_finishedReqCnt
Keep track of how many tasks are finished.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:160
ReIDServiceConfigParams::m_topK
int m_topK
Maximum number of object ids to be returned by reid service association.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:58
ReIDServiceConfigParams::m_maxClusterVariance
float m_maxClusterVariance
Maximum cluster variance to be considered for reid service association.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:57
ReIDServiceConfigParams::m_minVisibility4ReidServiceQuery
float m_minVisibility4ReidServiceQuery
Minimum visibility for reid service association query.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:60
remoteTargetInfo::originalTargetID
TargetId originalTargetID
Target ID at query time.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:77
CurlRequestTargetInfo::headers
struct curl_slist * headers
Per-request header list freed with curl_slist_free_all.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:90
CurlRequestTargetInfo::jsonPayload
std::string jsonPayload
JSON request payload.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:88
NvTrackerParams
Provides common loading helpers for tracker configuration parameters.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvTrackerParams.hpp:35
REID_SERVICE_TYPES
REID_SERVICE_TYPES
Identifies the available ReID-service implementations.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/IReIDService.hpp:27
NvMOTStreamId
uint64_t NvMOTStreamId
Definition: includes/nvdstracker.h:53
ReIDServiceConfigParams::ReIDServiceConfigParams
ReIDServiceConfigParams()
Construct a ReIDServiceConfigParams instance.
ReIDServiceConfigParams::m_reidServiceType
REID_SERVICE_TYPES m_reidServiceType
Type of reid service.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:52
ReIDService::m_workerThread
std::thread m_workerThread
Worker thread.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:145
ReIDService::queryParams
void queryParams(NvMOTQuery &paramsQuery)
Populate the capabilities reported to the tracker.
ReIDServiceConfigParams::m_servicePort
int m_servicePort
Port for the reid service.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:62
ReIDService::m_persistThreadRunning
std::atomic< bool > m_persistThreadRunning
Indicates whether the worker thread should keep running.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:146
CurlRequestTargetInfo::targetID
TargetId targetID
Target ID at query time.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:87
ReIDServiceConfigParams::m_curlRequestTimeout
int m_curlRequestTimeout
CURL request timeout in seconds.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:69
remoteTargetInfo::streamId
NvMOTStreamId streamId
Stream ID of the queried target.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:75
ReIDService::m_curlRequestUrl
std::string m_curlRequestUrl
CURL request URL.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:142
_NvMOTQuery
Holds the capabilities and requirements reported by the tracker library.
Definition: includes/nvdstracker.h:420
ReIDServiceConfigParams::m_minAssociationCount4IDCorrection
int m_minAssociationCount4IDCorrection
Minimum number of successful associations for ID correction.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:65
ReIDServiceConfigParams::m_operateOnClassIds
std::vector< int > m_operateOnClassIds
Class IDs used for ReID service association. An empty list enables association for all classes.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:63
ReIDService::m_curlRequestInfoMap
std::map< CURL *, CurlRequestTargetInfo > m_curlRequestInfoMap
Active CURL handles.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:139
ReIDService::m_cond4In
std::condition_variable m_cond4In
Wakes the worker when the input queue receives a request.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:148
TrackerIndex
uint32_t TrackerIndex
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker_common.hpp:42
ReIDService::query
void query(const std::map< NvMOTStreamId, NvMOTFrame * > &inputMeta) override
Send query to reid service for all unmatched active objects.
remoteTargetInfo::validRemoteTargetID
bool validRemoteTargetID
Indicates whether the remote target ID can be adopted.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:79
ReIDService::processCompletedCurlRequest
void processCompletedCurlRequest(CURLMsg *msg)
Collect the result of a completed CURL request.
ReIDServiceConfigParams::m_enableIDCorrection
bool m_enableIDCorrection
Whether to enable ID correction.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:64
SourceFrameInfo
Information about the input source frames for the input frame batch.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvMultiObjectTracker_common.hpp:49
CurlRequestTargetInfo::targetIndex
TrackerIndex targetIndex
Tracker index of the queried target.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:86
IReIDService
Defines the interface for remote ReID association services.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/IReIDService.hpp:34
remoteTargetInfo::targetIndex
TrackerIndex targetIndex
Tracker index of the queried target.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:76
ReIDService::m_cond4Out
std::condition_variable m_cond4Out
Wakes the caller when the worker finishes a request.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:155
ReIDService::m_params
ReIDServiceConfigParams m_params
Config params for reid module.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:137
ReIDService::send_post_request
std::string send_post_request(const std::string &jsonPayload)
Send one synchronous HTTP POST request.
ReIDService::initialize
void initialize(const SourceFrameInfo &frameInfo, const uint maxTargetsPerStream, const std::shared_ptr< NvTrackedObjectManager > &targetManager) override
Initialize variables and allocate memories.
ReIDService
Associates local targets with identities returned by a remote service.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:94
ReIDServiceConfigParams::m_curlConnectTimeout
int m_curlConnectTimeout
CURL connect timeout in seconds.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:68
ReIDService::ReIDService
ReIDService(const std::string &configFilePath)
Construct a ReIDService instance from configuration.
ReIDService::convertReidFeaturesToJson
std::string convertReidFeaturesToJson(const float *reidFeatures, int reidFeatureSize)
Serialize a ReID feature vector as JSON.
ReIDServiceConfigParams::m_minTopClusterConfidence
float m_minTopClusterConfidence
Minimum confidence for top cluster to be considered for reid service association.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:55
remoteTargetInfo::reidServiceAssocResponseMap
std::map< TargetId, reidServiceAssocInfo > reidServiceAssocResponseMap
Association details keyed by target ID.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:80
ReIDService::m_curlMultiHandle
CURLM * m_curlMultiHandle
CURL multi handle.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:141
remoteTargetInfo
Output of a successful reid service association.
Definition: sources/libs/nvmultiobjecttracker/include/modules/ReIDService/ReIDService.hpp:73
ReIDService::~ReIDService
virtual ~ReIDService()
Release resources owned by the ReIDService instance.
ReIDService::tryIDCorrection
bool tryIDCorrection(const std::shared_ptr< NvTrackedObject > targetToBeCorrected, const std::shared_ptr< NvTrackedObject > existingTarget, TargetId associatedTargetID)
Apply a remote identity to a compatible local target.