NVIDIA DeepStream SDK API Reference

7.0 Release
infer_postproc_buf.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2018-2019 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: LicenseRef-NvidiaProprietary
4  *
5  * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
6  * property and proprietary rights in and to this material, related
7  * documentation and any modifications thereto. Any use, reproduction,
8  * disclosure or distribution of this material and related documentation
9  * without an express license agreement from NVIDIA CORPORATION or
10  * its affiliates is strictly prohibited.
11  */
12 
13 #ifndef __NVDSINFERSERVER_POST_PROCESS_BUF_H__
14 #define __NVDSINFERSERVER_POST_PROCESS_BUF_H__
15 
16 #include <condition_variable>
17 #include <functional>
18 #include <list>
19 #include <memory>
20 #include <mutex>
21 #include <queue>
22 
23 #include "infer_batch_buffer.h"
24 #include "infer_cuda_utils.h"
25 #include "infer_datatypes.h"
26 #include "infer_iprocess.h"
27 #include "infer_post_datatypes.h"
28 #include "nvdsinfer.h"
29 #include "nvdsinfer_custom_impl.h"
30 #include "nvdsinferserver_config.pb.h"
31 
32 namespace ic = nvdsinferserver::config;
33 
34 struct NvDsInferDBScan;
35 
36 namespace nvdsinferserver {
37 
39 public:
41  {
43  memType : InferMemType::kCpu,
44  devId : 0,
45  dataType : InferDataType::kNone,
46  dims : {1, {1}, 1},
47  elementSize : sizeof(NvDsInferDetectionOutput),
49  isInput : false,
50  };
51  setBufDesc(desc);
52  }
54  {
55  for (auto& batch : m_Objects)
56  for (auto& object : batch)
57  if (object.label) {
58  free(object.label);
59  }
60  }
61  void swapObjects(std::vector<std::vector<NvDsInferObject>>& objs)
62  {
63  setBatchSize(objs.size());
64  m_Objects.swap(objs);
65  m_BufPtrs.resize(m_Objects.size());
66  for (size_t i = 0; i < m_BufPtrs.size(); ++i) {
67  NvDsInferDetectionOutput& bufPtr = m_BufPtrs[i];
68  bufPtr.numObjects = m_Objects.at(i).size();
69  bufPtr.objects = m_Objects.at(i).data();
70  }
71  }
73  void* getBufPtr(uint32_t batchIdx) const override
74  {
75  assert(batchIdx < (uint32_t)m_BufPtrs.size());
76  return (void*)&m_BufPtrs.at(batchIdx);
77  }
78 
79 private:
80  std::vector<std::vector<NvDsInferObject>> m_Objects;
81  std::vector<NvDsInferDetectionOutput> m_BufPtrs;
82 };
83 
85 public:
86  ClassificationOutput(int batchSize) : BaseBatchBuffer(batchSize)
87  {
89  memType : InferMemType::kCpu,
90  devId : 0,
91  dataType : InferDataType::kNone,
92  dims : {1, {1}, 1},
93  elementSize : sizeof(InferClassificationOutput),
95  isInput : false,
96  };
97  setBufDesc(desc);
98  m_BufPtrs.resize(batchSize);
99  }
101  InferClassificationOutput& mutableOutput(uint32_t idx)
102  {
103  assert(idx < m_BufPtrs.size());
104  return m_BufPtrs[idx];
105  }
107  void* getBufPtr(uint32_t batchIdx) const override
108  {
109  assert(batchIdx < (uint32_t)m_BufPtrs.size());
110  return (void*)&m_BufPtrs.at(batchIdx);
111  }
112 
114  void finalize()
115  {
116  for (uint32_t i = 0; i < m_BufPtrs.size(); ++i) {
117  InferClassificationOutput& data = mutableOutput(i);
118  for (size_t k = 0; k < data.attributes.size(); ++k) {
119  auto& attrib = data.attributes[k];
120  if (attrib.safeAttributeLabel.empty()) {
121  attrib.safeAttributeLabel = safeStr(attrib.attributeLabel);
122  }
123  attrib.attributeLabel = (char *) attrib.safeAttributeLabel.c_str();
124  }
125  }
126  }
127 
128 private:
129  std::vector<InferClassificationOutput> m_BufPtrs;
130 };
131 
132 using SharedClassOutput = std::shared_ptr<ClassificationOutput>;
133 
135 public:
136  SegmentationOutput(int batchSize) : BaseBatchBuffer(batchSize)
137  {
139  memType : InferMemType::kCpu,
140  devId : 0,
141  dataType : InferDataType::kNone,
142  dims : {1, {1}, 1},
143  elementSize : sizeof(NvDsInferSegmentationOutput),
145  isInput : false,
146  };
147  setBufDesc(desc);
148  m_BufPtrs.resize(batchSize, NvDsInferSegmentationOutput{0});
149  }
151  {
152  for (NvDsInferSegmentationOutput& out : m_BufPtrs) {
153  if (out.class_map) {
154  delete[] out.class_map;
155  }
156  }
157  }
159  {
160  assert(idx < m_BufPtrs.size());
161  return m_BufPtrs[idx];
162  }
164  void* getBufPtr(uint32_t batchIdx) const override
165  {
166  assert(batchIdx < (uint32_t)m_BufPtrs.size());
167  return (void*)&m_BufPtrs.at(batchIdx);
168  }
169 
170 private:
171  std::vector<NvDsInferSegmentationOutput> m_BufPtrs;
172 };
173 
174 } // namespace nvdsinferserver
175 
176 #endif // __NVDSINFERSERVER_POST_PROCESS_BUF_H__
nvdsinferserver
This is a header file for pre-processing cuda kernels with normalization and mean subtraction require...
Definition: infer_custom_process.h:24
nvdsinferserver::SegmentationOutput
Definition: infer_postproc_buf.h:134
nvdsinferserver::DetectionOutput::getBufPtr
void * getBufPtr(uint32_t batchIdx) const override
return NvDsInferDetectionOutput* pointer
Definition: infer_postproc_buf.h:73
nvdsinferserver::ClassificationOutput::~ClassificationOutput
~ClassificationOutput()
Definition: infer_postproc_buf.h:100
infer_datatypes.h
Header file for the data types used in the inference processing.
nvdsinferserver::SegmentationOutput::~SegmentationOutput
~SegmentationOutput()
Definition: infer_postproc_buf.h:150
NvDsInferDetectionOutput::numObjects
unsigned int numObjects
Number of objects in the array.
Definition: infer_post_datatypes.h:47
NvDsInferSegmentationOutput
Holds the information parsed from segmentation network output for one frame.
Definition: infer_post_datatypes.h:75
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:61
nvdsinferserver::ClassificationOutput::getBufPtr
void * getBufPtr(uint32_t batchIdx) const override
return InferClassificationOutput* pointer
Definition: infer_postproc_buf.h:107
nvdsinferserver::BaseBatchBuffer::setBatchSize
virtual void setBatchSize(uint32_t size)
Definition: infer_batch_buffer.h:51
INFER_SERVER_SEGMENTATION_BUF_NAME
#define INFER_SERVER_SEGMENTATION_BUF_NAME
Definition: infer_post_datatypes.h:102
INFER_SERVER_DETECTION_BUF_NAME
#define INFER_SERVER_DETECTION_BUF_NAME
Definition: infer_post_datatypes.h:99
nvdsinferserver::SegmentationOutput::SegmentationOutput
SegmentationOutput(int batchSize)
Definition: infer_postproc_buf.h:136
NvDsInferDetectionOutput
Holds the information on all objects detected by a detector network in one frame.
Definition: infer_post_datatypes.h:43
nvdsinferserver::DetectionOutput::~DetectionOutput
~DetectionOutput()
Definition: infer_postproc_buf.h:53
nvdsinferserver::ClassificationOutput::mutableOutput
InferClassificationOutput & mutableOutput(uint32_t idx)
Definition: infer_postproc_buf.h:101
nvdsinferserver::ClassificationOutput::ClassificationOutput
ClassificationOutput(int batchSize)
Definition: infer_postproc_buf.h:86
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:84
nvdsinferserver::SegmentationOutput::mutableOutput
NvDsInferSegmentationOutput & mutableOutput(uint32_t idx)
Definition: infer_postproc_buf.h:158
infer_post_datatypes.h
nvdsinferserver::SharedClassOutput
std::shared_ptr< ClassificationOutput > SharedClassOutput
Definition: infer_postproc_buf.h:132
nvdsinfer.h
nvdsinferserver::DetectionOutput::DetectionOutput
DetectionOutput()
Definition: infer_postproc_buf.h:40
nvdsinferserver::SegmentationOutput::getBufPtr
void * getBufPtr(uint32_t batchIdx) const override
return NvDsInferSegmentationOutput* pointer
Definition: infer_postproc_buf.h:164
nvdsinferserver::BaseBatchBuffer::setBufDesc
void setBufDesc(const InferBufferDescription &desc)
Definition: infer_batch_buffer.h:49
INFER_SERVER_CLASSIFICATION_BUF_NAME
#define INFER_SERVER_CLASSIFICATION_BUF_NAME
Definition: infer_post_datatypes.h:100
nvdsinferserver::InferDataType::kNone
@ kNone
nvdsinferserver::ClassificationOutput::finalize
void finalize()
copy all lables to safe place
Definition: infer_postproc_buf.h:114
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:38
nvdsinferserver::InferMemType::kCpu
@ kCpu
Host (CPU) memory.
safeStr
#define safeStr(str)
Definition: infer_options.h:34
NvDsInferDetectionOutput::objects
NvDsInferObject * objects
Array of objects.
Definition: infer_post_datatypes.h:45
nvdsinferserver::InferBufferDescription
Holds the information about a inference buffer.
Definition: infer_datatypes.h:168