NVIDIA DeepStream SDK API Reference

7.1 Release
metadata.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2024 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 
21 #ifndef NVIDIA_DEEPSTREAM_METADATA
22 #define NVIDIA_DEEPSTREAM_METADATA
23 
24 #include <functional>
25 #include <memory>
26 #include <string>
27 
28 #include "nvll_osd_struct.h"
29 
30 namespace deepstream {
31 
32 #define USER_METADATA_START = (4096 + 4096 + 1)
33 
41 class Metadata {
42  public:
44  Metadata(void* data);
45 
47  virtual ~Metadata();
48 
50  virtual operator bool() { return data_ != nullptr; }
51 
52  protected:
53  void* data_; //> opaque data pointer
54 };
55 
63 template <typename T>
65  public:
67  AbstractIterator(const T& data) : data_(data) {}
68 
70  virtual ~AbstractIterator() {}
71 
73  T& operator*() { return data_; }
74 
76  T* operator->() { return &data_; }
77 
79  T& get() { return data_; }
80 
82  virtual AbstractIterator<T>& next() = 0;
83 
85  virtual bool done() = 0;
86 
88  virtual bool operator==(const AbstractIterator<T>& other) const = 0;
89 
91  bool operator!=(const AbstractIterator<T>& other) const {
92  return !(*this == other);
93  }
94 
95  protected:
96  T data_;
97 };
98 
100 class UserMetadata : public Metadata {
101  public:
102  typedef std::unique_ptr<AbstractIterator<UserMetadata>> Iterator;
103 
110  UserMetadata(void*);
112  virtual ~UserMetadata();
113 
114  friend class BatchMetadata;
115  friend class FrameMetadata;
116 
117  protected:
118  void get_(void*&);
119 };
120 
122 class ClassifierMetadata : public Metadata {
123 public:
124  typedef std::unique_ptr<AbstractIterator<ClassifierMetadata>> Iterator;
125 
132  ClassifierMetadata(void* data = nullptr);
134  virtual ~ClassifierMetadata();
135 
137  unsigned int nLabels() const;
139  unsigned int uniqueComponentId() const;
141  std::string getLabel(unsigned int nth) const;
142 
143 };
144 
151 class ObjectMetadata : public Metadata {
152  public:
153  typedef std::unique_ptr<AbstractIterator<ObjectMetadata>> Iterator;
154 
161  ObjectMetadata(void* data = nullptr);
163  virtual ~ObjectMetadata();
164 
166  unsigned int uniqueComponentId() const;
167  void setUniqueComponentId(unsigned int);
169  unsigned int classId() const;
170  void setClassId(unsigned int);
172  unsigned long int objectId() const;
173  void setObjectId(unsigned long);
175  float confidence() const;
176  void setConfidence(float);
178  float trackerConfidence() const;
179  void setTrackerConfidence(float);
181  NvOSD_RectParams& rectParams() const;
182  void setRectParams(const NvOSD_RectParams&);
184  NvOSD_MaskParams& maskParams() const;
185  void setMaskParams(const NvOSD_MaskParams&);
187  NvOSD_TextParams& textParams() const;
188  void setTextParams(const NvOSD_TextParams&);
190  std::string label() const;
191  void setLabel(std::string);
192 
194  unsigned int iterate(const std::function<void(const ClassifierMetadata&)>& func) const;
197 
199  unsigned int iterate(const std::function<void(const UserMetadata&)>& func, int meta_type) const;
201  void initiateIterator(UserMetadata::Iterator&, int meta_type) const;
202 
203  friend class FrameMetadata;
204 };
205 
206 
207 class FrameMetadata;
216  public:
217  EventMessageUserMetadata(void* data=nullptr);
218  virtual ~EventMessageUserMetadata();
219 
221  void generate(
222  const ObjectMetadata&,
223  const FrameMetadata&,
224  const std::string sensor="N/A",
225  const std::string uri="N/A",
226  const std::vector<std::string>labels=std::vector<std::string>());
227 };
228 
234 class Tensor;
236  public:
237  TensorOutputUserMetadata(void* data=nullptr);
239  virtual ~TensorOutputUserMetadata();
240 
242  unsigned int uniqueId() const;
244  std::unordered_map<std::string, Tensor*> getLayers();
245 };
246 
247 
254 template <class C, int N>
256  public:
257  UserMetadataTemplate(void* data=nullptr) : UserMetadata(data) {}
260 
261  C& get() {
262  void* p = nullptr;
263  this->get_(p);
264  return *((C*)p);
265  }
266 
267  static void* copy(void* data, void* user_data) {
268  void* p = nullptr;
270  C*& src = (C*&) p;
271  C* dst = new C(*src);
272  return dst;
273  }
274 
275  static void free(void* data, void* user_data) {
276  void* p = nullptr;
278  C*& src = (C*&) p;
279  delete src;
280  p = nullptr;
281  }
282 };
283 
291 class DisplayMetadata : public Metadata {
292  public:
293  typedef std::unique_ptr<AbstractIterator<DisplayMetadata>> Iterator;
294 
301  DisplayMetadata(void* data = nullptr);
303  virtual ~DisplayMetadata();
304 
306  unsigned int nRects() const;
308  unsigned int nLabels() const;
310  unsigned int nLines() const;
312  unsigned int nArrows() const;
314  unsigned int nCircles() const;
315 
317  bool add(NvOSD_TextParams&);
319  bool add(NvOSD_RectParams&);
321  bool add(NvOSD_LineParams&);
323  bool add(NvOSD_ArrowParams&);
325  bool add(NvOSD_CircleParams&);
326 
327  friend class FrameMetadata;
328 };
329 
336 class FrameMetadata : public Metadata {
337  public:
338  typedef std::unique_ptr<AbstractIterator<FrameMetadata>> Iterator;
339 
346  FrameMetadata(void* data=nullptr);
348  virtual ~FrameMetadata();
349 
351  unsigned int iterate(const std::function<void(const ObjectMetadata&)>& func) const;
354 
356  unsigned int iterate(const std::function<void(const DisplayMetadata&)>& func) const;
359 
361  unsigned int iterate(const std::function<void(const UserMetadata&)>& func, int meta_type) const;
363  void initiateIterator(UserMetadata::Iterator&, int meta_type) const;
364 
366  unsigned int padIndex() const;
368  unsigned int batchId() const;
370  int frameNum() const;
372  unsigned int sourceId() const;
374  unsigned int sourceWidth() const;
376  unsigned int sourceHeight() const;
377 
379  unsigned int pipelineWidth() const;
381  unsigned int pipelineHeight() const;
382 
384  uint64_t bufferPTS() const;
386  uint64_t ntpTimestamp() const;
387 
389  void append(const DisplayMetadata&);
391  void append(const UserMetadata&);
393  void append(const ObjectMetadata&);
394 
395  friend class BatchMetadata;
396 };
397 
407 class BatchMetadata : public Metadata {
408  public:
415  BatchMetadata(void *data = nullptr);
416 
418  virtual ~BatchMetadata();
419 
421  unsigned int iterate(const std::function<void(const FrameMetadata&)>& func) const;
424 
426  unsigned int iterate(const std::function<void(const UserMetadata&)>& func, int meta_type) const;
428  void initiateIterator(UserMetadata::Iterator&, int meta_type) const;
429 
431  bool acquire(DisplayMetadata&);
433  bool acquire(FrameMetadata&);
435  bool acquire(ObjectMetadata&);
439  template<class C, int N>
441  user_meta = acquireUserMetadata_(
443  );
444  return user_meta ? true : false;
445  }
446 
448  void append(const FrameMetadata&);
450  void append(const UserMetadata&);
451 
453  unsigned int nFrames() const;
454 
455  protected:
457  void* data, unsigned int type, void*(*copy)(void*, void*), void(*free)(void*, void*)
458  );
459 };
460 
461 }
462 
463 #endif
deepstream::AbstractIterator::done
virtual bool done()=0
check if the end is reached
_NvOSD_LineParams
Holds the box parameters of a line to be overlayed.
Definition: nvll_osd_struct.h:181
deepstream::EventMessageUserMetadata::EventMessageUserMetadata
EventMessageUserMetadata(void *data=nullptr)
deepstream::AbstractIterator::operator==
virtual bool operator==(const AbstractIterator< T > &other) const =0
check if two iterator point to the same position
deepstream::ClassifierMetadata
Meta generated from a classifier.
Definition: metadata.hpp:122
_NvOSD_RectParams
Holds the box parameters of the box to be overlayed.
Definition: nvll_osd_struct.h:140
deepstream::ObjectMetadata::iterate
unsigned int iterate(const std::function< void(const ClassifierMetadata &)> &func) const
Iterate the classifier metadata within it.
_NvOSD_MaskParams
Holds the mask parameters of the segment to be overlayed.
Definition: nvll_osd_struct.h:170
deepstream::ObjectMetadata::Iterator
std::unique_ptr< AbstractIterator< ObjectMetadata > > Iterator
Definition: metadata.hpp:153
deepstream::AbstractIterator
metadata iterator template
Definition: metadata.hpp:64
deepstream::ObjectMetadata::objectId
unsigned long int objectId() const
Number to identify the object which is tracked in the scene.
deepstream::BatchMetadata::acquire
bool acquire(UserMetadataTemplate< C, N > &user_meta)
Initialize an empty user metadata through template.
Definition: metadata.hpp:440
deepstream::UserMetadataTemplate::UserMetadataTemplate
UserMetadataTemplate(void *data=nullptr)
Definition: metadata.hpp:257
deepstream::AbstractIterator::data_
T data_
Definition: metadata.hpp:96
deepstream::UserMetadata::UserMetadata
UserMetadata(void *)
Constructor through opaque data pointer.
deepstream::DisplayMetadata::nRects
unsigned int nRects() const
Number of the rectangles.
deepstream::AbstractIterator::operator->
T * operator->()
Dereference the associated metadata as a pointer.
Definition: metadata.hpp:76
_NvOSD_CircleParams
Holds circle parameters to be overlayed.
Definition: nvll_osd_struct.h:224
deepstream::FrameMetadata::pipelineWidth
unsigned int pipelineWidth() const
Picture width of the pipeline.
deepstream::ObjectMetadata::setLabel
void setLabel(std::string)
deepstream::ObjectMetadata::setObjectId
void setObjectId(unsigned long)
deepstream::ObjectMetadata::maskParams
NvOSD_MaskParams & maskParams() const
Holds mask parameters for the object.
deepstream::DisplayMetadata::~DisplayMetadata
virtual ~DisplayMetadata()
Destructor.
deepstream::ObjectMetadata::classId
unsigned int classId() const
Number to identify the class of the object.
deepstream::UserMetadataTemplate::get
C & get()
Definition: metadata.hpp:261
deepstream::ObjectMetadata::textParams
NvOSD_TextParams & textParams() const
Formated text description of the object, controlling osd display.
deepstream::FrameMetadata::sourceId
unsigned int sourceId() const
Identify the source of the frame, e.g.
deepstream::UserMetadata::~UserMetadata
virtual ~UserMetadata()
Destructor.
deepstream::TensorOutputUserMetadata::~TensorOutputUserMetadata
virtual ~TensorOutputUserMetadata()
deepstream::DisplayMetadata::nLabels
unsigned int nLabels() const
Number of the labels.
deepstream::TensorOutputUserMetadata::TensorOutputUserMetadata
TensorOutputUserMetadata(void *data=nullptr)
deepstream::DisplayMetadata::nCircles
unsigned int nCircles() const
Number of the circles.
deepstream::BatchMetadata::acquireUserMetadata_
UserMetadata acquireUserMetadata_(void *data, unsigned int type, void *(*copy)(void *, void *), void(*free)(void *, void *))
deepstream::ObjectMetadata::~ObjectMetadata
virtual ~ObjectMetadata()
Destructor.
deepstream::ObjectMetadata::uniqueComponentId
unsigned int uniqueComponentId() const
Number to identify the unique component that generates the metadata.
deepstream::EventMessageUserMetadata::~EventMessageUserMetadata
virtual ~EventMessageUserMetadata()
deepstream::AbstractIterator::operator!=
bool operator!=(const AbstractIterator< T > &other) const
check if two iterator point to different position
Definition: metadata.hpp:91
deepstream::BatchMetadata::iterate
unsigned int iterate(const std::function< void(const FrameMetadata &)> &func) const
Iterate the frame metadata within it.
deepstream::ObjectMetadata::initiateIterator
void initiateIterator(ClassifierMetadata::Iterator &) const
Get the iterator for object metadata within it.
deepstream::FrameMetadata::initiateIterator
void initiateIterator(ObjectMetadata::Iterator &) const
Get the iterator for object metadata within it.
_NvOSD_ArrowParams
Holds arrow parameters to be overlaid.
Definition: nvll_osd_struct.h:200
deepstream::DisplayMetadata::Iterator
std::unique_ptr< AbstractIterator< DisplayMetadata > > Iterator
Definition: metadata.hpp:293
deepstream::FrameMetadata::sourceWidth
unsigned int sourceWidth() const
Picture width of the source.
deepstream::DisplayMetadata::nArrows
unsigned int nArrows() const
Number of the arrows.
deepstream::EventMessageUserMetadata
User metadata for event message.
Definition: metadata.hpp:215
deepstream::Metadata
Metadata base class.
Definition: metadata.hpp:41
deepstream::UserMetadataTemplate
Template for customized user metadata.
Definition: metadata.hpp:255
deepstream::ObjectMetadata::setRectParams
void setRectParams(const NvOSD_RectParams &)
deepstream::FrameMetadata::FrameMetadata
FrameMetadata(void *data=nullptr)
Constructor through opaque data pointer.
deepstream::FrameMetadata::append
void append(const DisplayMetadata &)
Append display metadata to the frame.
deepstream::AbstractIterator::~AbstractIterator
virtual ~AbstractIterator()
Destructor.
Definition: metadata.hpp:70
deepstream::ObjectMetadata
Object metadata.
Definition: metadata.hpp:151
deepstream::TensorOutputUserMetadata::getLayers
std::unordered_map< std::string, Tensor * > getLayers()
get tensor output layers
deepstream::ClassifierMetadata::~ClassifierMetadata
virtual ~ClassifierMetadata()
Destructor.
deepstream::TensorOutputUserMetadata
Definition: metadata.hpp:235
deepstream
Definition: buffer.hpp:33
deepstream::ClassifierMetadata::nLabels
unsigned int nLabels() const
Number of the lables generated by the classifier.
deepstream::Metadata::~Metadata
virtual ~Metadata()
Destructor.
deepstream::ObjectMetadata::setUniqueComponentId
void setUniqueComponentId(unsigned int)
deepstream::BatchMetadata::initiateIterator
void initiateIterator(FrameMetadata::Iterator &) const
Get the iterator for frame metadata within it.
deepstream::FrameMetadata::padIndex
unsigned int padIndex() const
Index of the pad from which the frame is generated.
deepstream::DisplayMetadata::DisplayMetadata
DisplayMetadata(void *data=nullptr)
Constructor through opaque data pointer.
deepstream::BatchMetadata
Holds information about a formed batch containingframes from different sources.
Definition: metadata.hpp:407
deepstream::FrameMetadata::~FrameMetadata
virtual ~FrameMetadata()
Destructor.
deepstream::Metadata::Metadata
Metadata(void *data)
Constructor through an opqaue pinter.
deepstream::AbstractIterator::operator*
T & operator*()
Dereference the associated metadata.
Definition: metadata.hpp:73
deepstream::BatchMetadata::~BatchMetadata
virtual ~BatchMetadata()
Destructor.
deepstream::ObjectMetadata::ObjectMetadata
ObjectMetadata(void *data=nullptr)
Constructor through opaque data pointer.
deepstream::FrameMetadata::Iterator
std::unique_ptr< AbstractIterator< FrameMetadata > > Iterator
Definition: metadata.hpp:338
deepstream::UserMetadata
Base class of user defined metadata.
Definition: metadata.hpp:100
deepstream::FrameMetadata::batchId
unsigned int batchId() const
Location the frame in the batch.
deepstream::BatchMetadata::append
void append(const FrameMetadata &)
Append a frame metadata to the batch.
deepstream::UserMetadataTemplate::copy
static void * copy(void *data, void *user_data)
Definition: metadata.hpp:267
deepstream::AbstractIterator::AbstractIterator
AbstractIterator(const T &data)
Construct an iterator for an iterable metadata.
Definition: metadata.hpp:67
deepstream::DisplayMetadata
Metadata for overlay display on a frame.
Definition: metadata.hpp:291
deepstream::UserMetadataTemplate::~UserMetadataTemplate
virtual ~UserMetadataTemplate()
Definition: metadata.hpp:259
deepstream::FrameMetadata::ntpTimestamp
uint64_t ntpTimestamp() const
Holds the ntp timestamp.
deepstream::ObjectMetadata::setTextParams
void setTextParams(const NvOSD_TextParams &)
deepstream::ObjectMetadata::label
std::string label() const
A string to describe the object class.
deepstream::ClassifierMetadata::uniqueComponentId
unsigned int uniqueComponentId() const
Identifying the unique component that generates the metadata.
deepstream::UserMetadataTemplate::UserMetadataTemplate
UserMetadataTemplate(const UserMetadata &other)
Definition: metadata.hpp:258
_NvOSD_TextParams
Holds parameters of text to be overlayed.
Definition: nvll_osd_struct.h:115
deepstream::FrameMetadata::frameNum
int frameNum() const
Frame number.
deepstream::FrameMetadata::bufferPTS
uint64_t bufferPTS() const
Holds the presentation timestamp (PTS) of the frame.
deepstream::BatchMetadata::nFrames
unsigned int nFrames() const
Number of frames in the batch.
deepstream::Tensor
Definition: service-maker/includes/tensor.hpp:49
deepstream::ClassifierMetadata::Iterator
std::unique_ptr< AbstractIterator< ClassifierMetadata > > Iterator
Definition: metadata.hpp:124
deepstream::EventMessageUserMetadata::generate
void generate(const ObjectMetadata &, const FrameMetadata &, const std::string sensor="N/A", const std::string uri="N/A", const std::vector< std::string >labels=std::vector< std::string >())
generate an event by attaching an object
deepstream::UserMetadata::get_
void get_(void *&)
deepstream::Metadata::data_
void * data_
Definition: metadata.hpp:53
deepstream::ObjectMetadata::setClassId
void setClassId(unsigned int)
deepstream::ClassifierMetadata::getLabel
std::string getLabel(unsigned int nth) const
Get the nth label.
deepstream::UserMetadataTemplate::free
static void free(void *data, void *user_data)
Definition: metadata.hpp:275
nvll_osd_struct.h
deepstream::ClassifierMetadata::ClassifierMetadata
ClassifierMetadata(void *data=nullptr)
Constructor through opaque data pointer.
deepstream::AbstractIterator::get
T & get()
Directly access the associated metadata.
Definition: metadata.hpp:79
deepstream::FrameMetadata::pipelineHeight
unsigned int pipelineHeight() const
Picture height of the pipeline.
deepstream::ObjectMetadata::trackerConfidence
float trackerConfidence() const
Confidence level from tracker.
deepstream::FrameMetadata::iterate
unsigned int iterate(const std::function< void(const ObjectMetadata &)> &func) const
Iterate the object metadata within it.
deepstream::DisplayMetadata::nLines
unsigned int nLines() const
Number of the lines.
deepstream::BatchMetadata::acquire
bool acquire(DisplayMetadata &)
Initialize an empty display metadata.
deepstream::TensorOutputUserMetadata::uniqueId
unsigned int uniqueId() const
id for inference instance
deepstream::ObjectMetadata::confidence
float confidence() const
Confidence level.
deepstream::ObjectMetadata::rectParams
NvOSD_RectParams & rectParams() const
Bounding box of the object.
deepstream::ObjectMetadata::setConfidence
void setConfidence(float)
deepstream::AbstractIterator::next
virtual AbstractIterator< T > & next()=0
advances the iterator to access the next data
deepstream::ObjectMetadata::setTrackerConfidence
void setTrackerConfidence(float)
deepstream::FrameMetadata
Holds information for a single frame.
Definition: metadata.hpp:336
deepstream::FrameMetadata::sourceHeight
unsigned int sourceHeight() const
Picture height of the source.
deepstream::UserMetadata::Iterator
std::unique_ptr< AbstractIterator< UserMetadata > > Iterator
Definition: metadata.hpp:102
deepstream::ObjectMetadata::setMaskParams
void setMaskParams(const NvOSD_MaskParams &)
deepstream::BatchMetadata::BatchMetadata
BatchMetadata(void *data=nullptr)
Constructor through opaque data pointer.
deepstream::DisplayMetadata::add
bool add(NvOSD_TextParams &)
Add a text label.