NVIDIA DeepStream SDK API Reference

9.2 Release
sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2024-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 POSEESTIMATORLIB_POSEINFERENCE_HPP_
19 #define POSEESTIMATORLIB_POSEINFERENCE_HPP_
20 
21 #include <deque>
22 #include <map>
23 
24 #ifdef VIZ_DEBUG_POSE
25 #include <opencv2/core.hpp>
26 #include <opencv2/imgcodecs.hpp>
27 #include <opencv2/imgproc.hpp>
28 #endif
29 
30 #include <NvInfer.h>
31 #include <NvOnnxParser.h>
32 #include "modules/PoseEstimator/IPoseEstimator.hpp"
33 #include "modules/FrameTransform/trtModule.hpp"
34 #include "modules/ReID/ReIDFrameTransformTexture.hpp"
35 #include "modules/ReID/ReIDCropScaler.hpp"
36 
39 {
40 public:
43 
49  PoseInferenceConfigParams(const std::string &configFilePath, const std::string moduleName);
50 
55  PoseInferenceConfigParams(const YAML::Node &fn);
56 
61  void read(const YAML::Node &fn) override;
62 
65  std::vector<int> m_inferDims;
68  int m_width;
69  int m_height;
70  int m_channel;
72  int m_gpuId;
75  std::vector<float> m_offsets;
78  std::string m_vizDir;
81  std::vector<int> m_operateOnClassIds;
82 };
84 
87 {
88 public:
93  PoseInference(const std::string &configFilePath);
94 
100  PoseInference(const std::string &configFilePath, const std::string &modelName);
101 
103  virtual ~PoseInference();
104 
111  void initializeRuntime(
112  const SourceFrameInfo &frameInfo, const uint maxTargetsPerStream,
113  const std::shared_ptr<NvTrackedObjectManager> &targetManager
114  ) override;
115 
117  void initializeModel() override;
118 
123  void queryParams(NvMOTQuery &paramsQuery);
124 
131  void doInference(
132  const std::map<NvMOTStreamId, NvMOTFrame *>& inputMeta,
133  std::map<NvMOTStreamId, std::deque<DetectedObjInfo>> &detectedObjects, const bool isForReAssoc
134  ) override;
135 
137  void update() override;
138 
143  void removeStream(const NvMOTStreamId videoStreamId) override;
144 
147 
148 protected:
153  float *m_points_d;
155  float *m_inputMask_d;
163  float *m_outputIou_d;
167  std::vector<std::tuple<uint, NvMOTStreamId, NvMotDataTypes::Rect2f>> m_targetStreamIdList;
168 
170  std::vector<void*> m_bindings;
172  std::shared_ptr<NvTrackedObjectManager> m_targetManager;
173  std::shared_ptr<ReIDFrameTransformTexture> m_subImageCropper2;
174  std::shared_ptr<ReIDCropScaler> m_subImageCropScaler;
175  std::map<NvMOTStreamId, std::vector<std::pair<uint, NvMotDataTypes::Rect2f>>> m_inputRoisInBatch;
179 
184  void extractImagePatchesBatch(const std::map<NvMOTStreamId, NvMOTFrame *> &inputMeta);
185 
188 };
189 
190 #endif // POSEESTIMATORLIB_POSEINFERENCE_HPP_
PoseInference::m_isRuntimeInit
bool m_isRuntimeInit
Reid status if runtime variables initialized.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:149
PoseInference::m_targetStreamIdList
std::vector< std::tuple< uint, NvMOTStreamId, NvMotDataTypes::Rect2f > > m_targetStreamIdList
Target index, stream ID, and crop ROI for each box.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:167
PoseInference::m_cuStream
cudaStream_t m_cuStream
Cuda stream to run all GPU tasks.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:169
PoseInference::m_inputMaskLabel_d
float * m_inputMaskLabel_d
Mask label, currently unused and set as 0.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:156
PoseInferenceConfigParams::m_operateOnClassIds
std::vector< int > m_operateOnClassIds
Class IDs selected for pose estimation.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:81
PoseInference::m_pose25d_h
float * m_pose25d_h
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:162
PoseInference::m_pose2d_d
float * m_pose2d_d
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:161
PoseInference::doInference
void doInference(const std::map< NvMOTStreamId, NvMOTFrame * > &inputMeta, std::map< NvMOTStreamId, std::deque< DetectedObjInfo >> &detectedObjects, const bool isForReAssoc) override
Run pose inference on cropped targets from the input frames.
PoseInference::initializeModel
void initializeModel() override
Create TensorRT inference engine; if engine does not exist, serialize from model file.
PoseInference::m_pose2d_org_img_d
float * m_pose2d_org_img_d
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:161
PoseInferenceConfigParams::m_vizDir
std::string m_vizDir
Dir to save visualization dumps.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:78
PoseInferenceConfigParams::m_saveFrameViz
bool m_saveFrameViz
Save overlay masks for each target in each frame.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:80
PoseInference::update
void update() override
Update the pose estimator after data association.
PoseInferenceConfigParams::m_gpuId
int m_gpuId
Gpu id.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:72
PoseInference::getPoseEstimatorType
const POSEESTIMATOR_TYPES getPoseEstimatorType() override
Get the configured pose-estimator type.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:146
PoseInference::setValues4PoseGeometryInput
void setValues4PoseGeometryInput()
Upload fixed geometry tensors used by pose inference.
PoseInference::m_pose3d_h
float * m_pose3d_h
Host 2.5D and 3D poses.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:162
PoseInference::initializeRuntime
void initializeRuntime(const SourceFrameInfo &frameInfo, const uint maxTargetsPerStream, const std::shared_ptr< NvTrackedObjectManager > &targetManager) override
Initialize variables and allocate memories.
PoseInference
Runs pose inference for tracked target regions.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:86
PoseInference::m_subImageCropper2
std::shared_ptr< ReIDFrameTransformTexture > m_subImageCropper2
Image cropper, may share with visual tracker in the future.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:173
cudaStream_t
struct CUstream_st * cudaStream_t
Forward declaration of cudaStream_t.
Definition: includes/nvbufsurftransform.h:40
PoseInferenceConfigParams::m_width
int m_width
Input image patch width.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:68
PoseInferenceConfigParams::m_useVPICropScaler
bool m_useVPICropScaler
Use VPI crop scaler instead of in built crop scaler.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:77
PoseInferenceConfigParams::read
void read(const YAML::Node &fn) override
Load configuration values from a YAML node.
PoseInference::m_outputIou_d
float * m_outputIou_d
Device output IoU.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:163
PoseInference::m_params
PoseInferenceConfigParams m_params
Config params for reid module.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:164
uint
unsigned int uint
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/helper_math.h:25
POSEESTIMATOR_TYPES
POSEESTIMATOR_TYPES
Enumerate the supported pose-estimator implementation types.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/IPoseEstimator.hpp:27
PoseInferenceConfigParams::m_poseInferenceInterval
int m_poseInferenceInterval
Pose inference interval.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:73
PoseInferenceConfigParams::m_channel
int m_channel
Input image patch channel.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:70
PoseInference::m_tFormInv_d
float * m_tFormInv_d
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:160
PoseInference::m_pointLabels_d
float * m_pointLabels_d
Input a list of point types (single point, bounding box corners) to decoder.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:154
PoseInference::m_numBboxes
int m_numBboxes
Number of detected boxes in the current batch tracker recieved.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:151
PoseInference::m_subImageCropScaler
std::shared_ptr< ReIDCropScaler > m_subImageCropScaler
Image crop scaler.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:174
PoseInference::m_targetManager
std::shared_ptr< NvTrackedObjectManager > m_targetManager
Target manager providing target status to update feature gallery.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:172
PoseInferenceConfigParams::m_offsets
std::vector< float > m_offsets
List of mean values of color components to be subtracted from input.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:75
TrtModule
TRT module to perform various deep learning inference.
Definition: sources/libs/nvmultiobjecttracker/include/modules/FrameTransform/trtModule.hpp:137
PoseInference::m_srcImageSize
NvMotDataTypes::Size m_srcImageSize
Size of the source image.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:165
PoseInference::m_maxTargetsToTrack
int m_maxTargetsToTrack
Max number of targets to keep for all streams.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:178
PoseInferenceConfigParams::m_netScaleFactor
float m_netScaleFactor
Input normalization factor.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:74
PoseInference::m_bindings
std::vector< void * > m_bindings
Pointers to TensorRT tensors.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:170
PoseInferenceConfigParams::m_debugVerboseLevel
int m_debugVerboseLevel
Debug message verbose mode level.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:79
PoseInference::m_inputBuf_d
float * m_inputBuf_d
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:152
NvTrackerParams
Provides common loading helpers for tracker configuration parameters.
Definition: sources/libs/nvmultiobjecttracker/include/modules/NvMultiObjectTracker/NvTrackerParams.hpp:35
PoseInferenceConfigParams::m_inputOrder
int m_inputOrder
Input dimension order: 0: NCHW, 1: NHWC.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:66
PoseInference::m_inputBuf_h
float * m_inputBuf_h
Input patches to encoder.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:152
PoseInference::m_inputMask_d
float * m_inputMask_d
Mask prompt, currently unused and set as 0.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:155
NvMOTStreamId
uint64_t NvMOTStreamId
Definition: includes/nvdstracker.h:53
PoseInference::m_targetMaskDecSize_h
float * m_targetMaskDecSize_h
Mask output for each target.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:157
PoseInference::queryParams
void queryParams(NvMOTQuery &paramsQuery)
Populate the capabilities reported to the tracker.
PoseInference::m_points_d
float * m_points_d
Input a list of points (prompt) to decoder.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:153
PoseInferenceConfigParams::m_encoderFeatureDim
int m_encoderFeatureDim
Size of each encoder feature.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:67
_NvMOTQuery
Holds the capabilities and requirements reported by the tracker library.
Definition: includes/nvdstracker.h:420
PoseInference::m_featuresEncoder_d
float * m_featuresEncoder_d
Encoder output features.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:171
PoseInference::m_inputRoisInBatch
std::map< NvMOTStreamId, std::vector< std::pair< uint, NvMotDataTypes::Rect2f > > > m_inputRoisInBatch
Reid input rois to crop.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:176
PoseInference::m_batchMaskDecSize_d
float * m_batchMaskDecSize_d
Mask output in a batch.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:158
PoseInferenceConfigParams::PoseInferenceConfigParams
PoseInferenceConfigParams()
Construct a PoseInferenceConfigParams instance.
PoseInference::m_pose25d_d
float * m_pose25d_d
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:161
PoseInference::removeStream
void removeStream(const NvMOTStreamId videoStreamId) override
Remove a stream from the pose estimator.
PoseInference::m_targetMaskOriginalSrcSize_d
float * m_targetMaskOriginalSrcSize_d
Mask for each target resized to original streammux size.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:159
PoseInferenceConfigParams::m_colorFormat
NvBufSurfaceColorFormat m_colorFormat
Color format of input to reid network.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:76
PoseInferenceConfigParams::m_maxBatchSize
int m_maxBatchSize
Maximum batch size for reid network.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:71
PoseInference::m_pose3d_d
float * m_pose3d_d
Device 2D, original-image 2D, 2.5D, and 3D poses.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:161
PoseInference::m_inference
TrtModule m_inference
Inference module.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:177
PoseInferenceConfigParams::m_height
int m_height
Input image patch height.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:69
PoseInferenceConfigParams::m_hiddenDim
int m_hiddenDim
Size of each reid feature.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:64
PoseInference::m_maxPointNum
int m_maxPointNum
Max number of points.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:150
PoseInference::m_scaleNormalizedMeanLimbLengths_d
float * m_scaleNormalizedMeanLimbLengths_d
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:160
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
PoseInferenceConfigParams::m_poseEstimatorType
POSEESTIMATOR_TYPES m_poseEstimatorType
Type of pose estimator.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:63
PoseInferenceConfigParams
Stores configuration for pose inference.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:38
PoseInference::~PoseInference
virtual ~PoseInference()
Release resources owned by the PoseInference instance.
IPoseEstimator
Defines the interface for per-target pose estimation.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/IPoseEstimator.hpp:35
PoseInference::m_kInv_d
float * m_kInv_d
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:160
PoseInference::PoseInference
PoseInference(const std::string &configFilePath)
Construct a PoseInference instance from configuration.
PoseInference::m_meanLimbLengths_d
float * m_meanLimbLengths_d
Device inverse intrinsics, inverse transforms, and limb-length priors.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:160
PoseInference::m_originalSrcImageSize
NvMotDataTypes::Size m_originalSrcImageSize
Size of the original source image.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:166
PoseInference::m_targetMaskDecSize_d
float * m_targetMaskDecSize_d
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:157
PoseInference::extractImagePatchesBatch
void extractImagePatchesBatch(const std::map< NvMOTStreamId, NvMOTFrame * > &inputMeta)
Rescale all tracker frames into encoder input.
PoseInferenceConfigParams::m_inferDims
std::vector< int > m_inferDims
Reid input dimension.
Definition: sources/libs/nvmultiobjecttracker/include/modules/PoseEstimator/PoseInference.hpp:65
NvBufSurfaceColorFormat
NvBufSurfaceColorFormat
Defines color formats for NvBufSurface.
Definition: includes/nvbufsurface.h:110