NVIDIA DeepStream SDK API Reference

6.4 Release
infer_postproc_buf.h
Go to the documentation of this file.
1 
12 #ifndef __NVDSINFERSERVER_POST_PROCESS_BUF_H__
13 #define __NVDSINFERSERVER_POST_PROCESS_BUF_H__
14 
15 #include <condition_variable>
16 #include <functional>
17 #include <list>
18 #include <memory>
19 #include <mutex>
20 #include <queue>
21 
22 #include "infer_batch_buffer.h"
23 #include "infer_cuda_utils.h"
24 #include "infer_datatypes.h"
25 #include "infer_iprocess.h"
26 #include "infer_post_datatypes.h"
27 #include "nvdsinfer.h"
28 #include "nvdsinfer_custom_impl.h"
29 #include "nvdsinferserver_config.pb.h"
30 
31 namespace ic = nvdsinferserver::config;
32 
33 struct NvDsInferDBScan;
34 
35 namespace nvdsinferserver {
36 
38 public:
40  {
42  memType : InferMemType::kCpu,
43  devId : 0,
44  dataType : InferDataType::kNone,
45  dims : {1, {1}, 1},
46  elementSize : sizeof(NvDsInferDetectionOutput),
48  isInput : false,
49  };
50  setBufDesc(desc);
51  }
53  {
54  for (auto& batch : m_Objects)
55  for (auto& object : batch)
56  if (object.label) {
57  free(object.label);
58  }
59  }
60  void swapObjects(std::vector<std::vector<NvDsInferObject>>& objs)
61  {
62  setBatchSize(objs.size());
63  m_Objects.swap(objs);
64  m_BufPtrs.resize(m_Objects.size());
65  for (size_t i = 0; i < m_BufPtrs.size(); ++i) {
66  NvDsInferDetectionOutput& bufPtr = m_BufPtrs[i];
67  bufPtr.numObjects = m_Objects.at(i).size();
68  bufPtr.objects = m_Objects.at(i).data();
69  }
70  }
72  void* getBufPtr(uint32_t batchIdx) const override
73  {
74  assert(batchIdx < (uint32_t)m_BufPtrs.size());
75  return (void*)&m_BufPtrs.at(batchIdx);
76  }
77 
78 private:
79  std::vector<std::vector<NvDsInferObject>> m_Objects;
80  std::vector<NvDsInferDetectionOutput> m_BufPtrs;
81 };
82 
84 public:
85  ClassificationOutput(int batchSize) : BaseBatchBuffer(batchSize)
86  {
88  memType : InferMemType::kCpu,
89  devId : 0,
90  dataType : InferDataType::kNone,
91  dims : {1, {1}, 1},
92  elementSize : sizeof(InferClassificationOutput),
94  isInput : false,
95  };
96  setBufDesc(desc);
97  m_BufPtrs.resize(batchSize);
98  }
100  InferClassificationOutput& mutableOutput(uint32_t idx)
101  {
102  assert(idx < m_BufPtrs.size());
103  return m_BufPtrs[idx];
104  }
106  void* getBufPtr(uint32_t batchIdx) const override
107  {
108  assert(batchIdx < (uint32_t)m_BufPtrs.size());
109  return (void*)&m_BufPtrs.at(batchIdx);
110  }
111 
113  void finalize()
114  {
115  for (uint32_t i = 0; i < m_BufPtrs.size(); ++i) {
116  InferClassificationOutput& data = mutableOutput(i);
117  for (size_t k = 0; k < data.attributes.size(); ++k) {
118  auto& attrib = data.attributes[k];
119  if (attrib.safeAttributeLabel.empty()) {
120  attrib.safeAttributeLabel = safeStr(attrib.attributeLabel);
121  }
122  attrib.attributeLabel = (char *) attrib.safeAttributeLabel.c_str();
123  }
124  }
125  }
126 
127 private:
128  std::vector<InferClassificationOutput> m_BufPtrs;
129 };
130 
131 using SharedClassOutput = std::shared_ptr<ClassificationOutput>;
132 
134 public:
135  SegmentationOutput(int batchSize) : BaseBatchBuffer(batchSize)
136  {
138  memType : InferMemType::kCpu,
139  devId : 0,
140  dataType : InferDataType::kNone,
141  dims : {1, {1}, 1},
142  elementSize : sizeof(NvDsInferSegmentationOutput),
144  isInput : false,
145  };
146  setBufDesc(desc);
147  m_BufPtrs.resize(batchSize, NvDsInferSegmentationOutput{0});
148  }
150  {
151  for (NvDsInferSegmentationOutput& out : m_BufPtrs) {
152  if (out.class_map) {
153  delete[] out.class_map;
154  }
155  }
156  }
158  {
159  assert(idx < m_BufPtrs.size());
160  return m_BufPtrs[idx];
161  }
163  void* getBufPtr(uint32_t batchIdx) const override
164  {
165  assert(batchIdx < (uint32_t)m_BufPtrs.size());
166  return (void*)&m_BufPtrs.at(batchIdx);
167  }
168 
169 private:
170  std::vector<NvDsInferSegmentationOutput> m_BufPtrs;
171 };
172 
173 } // namespace nvdsinferserver
174 
175 #endif // __NVDSINFERSERVER_POST_PROCESS_BUF_H__
nvdsinferserver
Copyright (c) 2021, NVIDIA CORPORATION.
Definition: infer_custom_process.h:28
nvdsinferserver::SegmentationOutput
Definition: infer_postproc_buf.h:133
nvdsinferserver::DetectionOutput::getBufPtr
void * getBufPtr(uint32_t batchIdx) const override
return NvDsInferDetectionOutput* pointer
Definition: infer_postproc_buf.h:72
nvdsinferserver::ClassificationOutput::~ClassificationOutput
~ClassificationOutput()
Definition: infer_postproc_buf.h:99
infer_datatypes.h
Header file for the data types used in the inference processing.
nvdsinferserver::SegmentationOutput::~SegmentationOutput
~SegmentationOutput()
Definition: infer_postproc_buf.h:149
NvDsInferDetectionOutput::numObjects
unsigned int numObjects
Number of objects in the array.
Definition: infer_post_datatypes.h:52
NvDsInferSegmentationOutput
Holds the information parsed from segmentation network output for one frame.
Definition: infer_post_datatypes.h:80
infer_batch_buffer.h
Header file of batch buffer related class declarations.
nvdsinferserver::DetectionOutput::swapObjects
void swapObjects(std::vector< std::vector< NvDsInferObject >> &objs)
Definition: infer_postproc_buf.h:60
nvdsinferserver::ClassificationOutput::getBufPtr
void * getBufPtr(uint32_t batchIdx) const override
return InferClassificationOutput* pointer
Definition: infer_postproc_buf.h:106
nvdsinferserver::BaseBatchBuffer::setBatchSize
virtual void setBatchSize(uint32_t size)
Definition: infer_batch_buffer.h:51
nvdsinferserver::SegmentationOutput::SegmentationOutput
SegmentationOutput(int batchSize)
Definition: infer_postproc_buf.h:135
NvDsInferDetectionOutput
Holds the information on all objects detected by a detector network in one frame.
Definition: infer_post_datatypes.h:48
nvdsinferserver::DetectionOutput::~DetectionOutput
~DetectionOutput()
Definition: infer_postproc_buf.h:52
nvdsinferserver::ClassificationOutput::mutableOutput
InferClassificationOutput & mutableOutput(uint32_t idx)
Definition: infer_postproc_buf.h:100
nvdsinferserver::ClassificationOutput::ClassificationOutput
ClassificationOutput(int batchSize)
Definition: infer_postproc_buf.h:85
nvdsinfer_custom_impl.h
infer_cuda_utils.h
Header file declaring utility classes for CUDA memory management, CIDA streams and events.
nvdsinferserver::ClassificationOutput
Definition: infer_postproc_buf.h:83
nvdsinferserver::SegmentationOutput::mutableOutput
NvDsInferSegmentationOutput & mutableOutput(uint32_t idx)
Definition: infer_postproc_buf.h:157
infer_post_datatypes.h
nvdsinferserver::SharedClassOutput
std::shared_ptr< ClassificationOutput > SharedClassOutput
Definition: infer_postproc_buf.h:131
INFER_SERVER_CLASSIFICATION_BUF_NAME
#define INFER_SERVER_CLASSIFICATION_BUF_NAME
Definition: infer_post_datatypes.h:105
nvdsinfer.h
nvdsinferserver::DetectionOutput::DetectionOutput
DetectionOutput()
Definition: infer_postproc_buf.h:39
nvdsinferserver::SegmentationOutput::getBufPtr
void * getBufPtr(uint32_t batchIdx) const override
return NvDsInferSegmentationOutput* pointer
Definition: infer_postproc_buf.h:163
nvdsinferserver::BaseBatchBuffer::setBufDesc
void setBufDesc(const InferBufferDescription &desc)
Definition: infer_batch_buffer.h:49
nvdsinferserver::InferDataType::kNone
@ kNone
INFER_SERVER_SEGMENTATION_BUF_NAME
#define INFER_SERVER_SEGMENTATION_BUF_NAME
Definition: infer_post_datatypes.h:107
nvdsinferserver::ClassificationOutput::finalize
void finalize()
copy all lables to safe place
Definition: infer_postproc_buf.h:113
infer_iprocess.h
Preprocessing and postprocessing interface header file.
nvdsinferserver::BaseBatchBuffer
The base class for batch buffers.
Definition: infer_batch_buffer.h:34
nvdsinferserver::DetectionOutput
Definition: infer_postproc_buf.h:37
nvdsinferserver::InferMemType::kCpu
@ kCpu
Host (CPU) memory.
safeStr
#define safeStr(str)
Definition: infer_options.h:38
INFER_SERVER_DETECTION_BUF_NAME
#define INFER_SERVER_DETECTION_BUF_NAME
Definition: infer_post_datatypes.h:104
NvDsInferDetectionOutput::objects
NvDsInferObject * objects
Array of objects.
Definition: infer_post_datatypes.h:50
nvdsinferserver::InferBufferDescription
Holds the information about a inference buffer.
Definition: infer_datatypes.h:168