NVIDIA DeepStream SDK API Reference

9.2 Release
service-maker/sources/python/src/bindings/metadata.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 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 #include "metadatadoc.h"
19 #include <gst/gst.h>
20 
21 struct BBox {
22  float x;
23  float y;
24  float w;
25  float h;
26 };
27 
28 template<class T, class ITERATOR>
30  public:
32 
33  T& operator*() const {
34  return *(*iterator_);
35  }
36 
38  iterator_->next();
39  return *this;
40  }
41 
42  bool operator != (const IteratorWrapper& other) const {
43  return *iterator_ != *other.iterator_;
44  }
45 
46  bool operator == (const IteratorWrapper& other) const {
47  return *iterator_ == *other.iterator_;
48  }
49 
50  ITERATOR& get() { return iterator_; }
51 
52  protected:
53  ITERATOR iterator_;
54 };
55 
56 template<class T, class META_CLS, class ITERATOR>
57 py::iterable generate_iterator(META_CLS& metadata) {
58  if (!metadata) {
59  return py::cast(std::vector<T>());
60  }
63  metadata.initiateIterator(begin.get());
64  metadata.initiateIterator(end.get());
65  while (!end.get()->done()) ++end;
66 
67  return py::make_iterator(std::move(begin), std::move(end));
68 }
69 
70 template<class META_CLS, int N>
71 py::iterable generate_usermeta_iterator(META_CLS& metadata) {
72  if (!metadata) {
73  return py::cast(std::vector<UserMetadata>());
74  }
77  metadata.initiateIterator(begin.get(), N);
78  metadata.initiateIterator(end.get(), N);
79  while (!end.get()->done()) ++end;
80 
81  return py::make_iterator(std::move(begin), std::move(end));
82 }
83 
84 template<class META_CLS>
85 std::vector<deepstream::UserMetadata> retrieve_structure_usermeta(META_CLS& self, const std::string& type_name) {
86  int type = NVDS_START_USER_META + g_quark_from_string(type_name.c_str());
87  std::vector<deepstream::UserMetadata> results = {};
88  self.iterate([type, &results](const UserMetadata& user_meta) {
89  StructureUserMetadata meta(user_meta);
90  if (meta.getStructureUserMetadata() && meta.getStructureUserMetatype() == type) {
91  results.emplace_back(user_meta);
92  }
93  }, type);
94  return results;
95 }
96 
97 py::list preprocess_batch_metadata_extract(PreprocessBatchUserMetadata& self, unsigned int max_items);
98 py::list batch_metadata_extract(BatchMetadata& self, unsigned int max_items);
99 py::list audio_batch_metadata_extract(BatchMetadata& self, unsigned int max_items);
100 
101 py::list preprocess_batch_metadata_extract(PreprocessBatchUserMetadata& self, unsigned int max_items) {
102  // Check if preprocess batch metadata is valid
103  if (!self) {
104  return py::list();
105  }
106 
107  // Get ROIs from preprocess batch
108  std::vector<RoiMetadata> rois = self.getRois();
109  if (rois.empty()) {
110  return py::list();
111  }
112 
113  // Create list with capacity of max_items
114  py::list received(max_items);
115 
116  // Initialize all elements with None
117  for (unsigned int i = 0; i < max_items; i++) {
118  received[i] = py::none();
119  }
120 
121  // Iterate through ROIs
122  for (const RoiMetadata& roi : rois) {
123  py::dict metadata;
124  std::vector<int> shape;
125  std::vector<std::vector<int>> bboxes;
126  std::vector<float> probs;
127  std::vector<std::vector<std::string>> labels;
128  std::vector<py::array_t<int>> seg_maps;
129  std::vector<int> objects;
130  int64_t timestamp = 0;
131 
132  FrameMetadata frame_meta = roi.frameMetadata();
133  if (!frame_meta) continue;
134 
135  // Extract shape from frame metadata (pipeline dimensions)
136  shape = {static_cast<int>(frame_meta.pipelineHeight()),
137  static_cast<int>(frame_meta.pipelineWidth())};
138 
139  // Iterate through segmentation user metadata in ROI
140  roi.iterate([&](const UserMetadata& user_meta) {
141  SegmentationUserMetadata seg_meta(user_meta);
142 
143  if (seg_meta) {
144  shape = {static_cast<int>(seg_meta.getHeight()),
145  static_cast<int>(seg_meta.getWidth())};
146 
147  const int* class_map_data = seg_meta.getClassMap();
148  if (class_map_data) {
149  // Allocate new array and copy data
150  unsigned int height = seg_meta.getHeight();
151  unsigned int width = seg_meta.getWidth();
152  py::array_t<int> class_map({height, width});
153  auto buf = class_map.mutable_unchecked<2>();
154 
155  // Copy data in C++ for performance
156  for (unsigned int i = 0; i < height; i++) {
157  for (unsigned int j = 0; j < width; j++) {
158  buf(i, j) = class_map_data[i * width + j];
159  }
160  }
161  seg_maps.push_back(class_map);
162  }
163  }
165 
166  // Iterate through objects in the ROI's frame
167  frame_meta.iterate([&](const ObjectMetadata& object_meta) {
168  // Extract labels
169  std::vector<std::string> obj_labels;
170  if (!object_meta.label().empty()) {
171  obj_labels.push_back(object_meta.label());
172  }
173 
174  // Extract bbox coordinates
175  const NvOSD_RectParams& rect = object_meta.rectParams();
176  int left = static_cast<int>(rect.left);
177  int top = static_cast<int>(rect.top);
178  int width = static_cast<int>(rect.width);
179  int height = static_cast<int>(rect.height);
180 
181  // Set shape
182  shape = {static_cast<int>(frame_meta.pipelineHeight()),
183  static_cast<int>(frame_meta.pipelineWidth())};
184 
185  // Add bbox in [left, top, left+width, top+height] format
186  bboxes.push_back({left, top, left + width, top + height});
187 
188  // Add confidence
189  probs.push_back(object_meta.confidence());
190 
191  // Extract classifier labels
192  object_meta.iterate([&](const ClassifierMetadata& classifier) {
193  for (unsigned int i = 0; i < classifier.nLabels(); i++) {
194  obj_labels.push_back(classifier.getLabel(i));
195  }
196  });
197 
198  labels.push_back(obj_labels);
199  objects.push_back(static_cast<int>(object_meta.objectId()));
200  });
201 
202  // Iterate through classifier metadata at ROI level
203  roi.iterate([&](const ClassifierMetadata& classifier) {
204  std::vector<std::string> cls_labels;
205  for (unsigned int i = 0; i < classifier.nLabels(); i++) {
206  cls_labels.push_back(classifier.getLabel(i));
207  }
208  if (!cls_labels.empty()) {
209  labels.push_back(cls_labels);
210  }
211  });
212 
213  // Set timestamp
214  timestamp = static_cast<int64_t>(frame_meta.bufferPTS());
215 
216  // Build dictionary
217  metadata["shape"] = shape;
218  metadata["bboxes"] = bboxes;
219  metadata["probs"] = probs;
220  metadata["labels"] = labels;
221  metadata["seg_maps"] = seg_maps;
222  metadata["objects"] = objects;
223  metadata["timestamp"] = timestamp;
224 
225  // Store in list indexed by pad_index
226  unsigned int pad_index = frame_meta.padIndex();
227  if (pad_index < max_items) {
228  received[pad_index] = metadata;
229  }
230  }
231 
232  return received;
233 }
234 
235 py::list batch_metadata_extract(BatchMetadata& self, unsigned int max_items) {
236  // Check if batch metadata is valid
237  if (!self) {
238  return py::list(); // Return empty list if batch metadata is null
239  }
240 
241  if (self.isAudioBatch()) {
242  return audio_batch_metadata_extract(self, max_items);
243  }
244 
245  // Create list with capacity of max_items
246  py::list received(max_items);
247 
248  // Initialize all elements with None
249  for (unsigned int i = 0; i < max_items; i++) {
250  received[i] = py::none();
251  }
252 
253  // Iterate through frames in batch
254  self.iterate([&](const FrameMetadata& frame_meta) {
255  py::dict metadata;
256  std::vector<int> shape;
257  std::vector<std::vector<int>> bboxes;
258  std::vector<float> probs;
259  std::vector<std::vector<std::string>> labels;
260  std::vector<py::array_t<int>> seg_maps;
261  std::vector<int> objects;
262  int64_t timestamp = 0;
263 
264  // Extract shape from frame metadata (pipeline dimensions)
265  shape = {static_cast<int>(frame_meta.pipelineHeight()),
266  static_cast<int>(frame_meta.pipelineWidth())};
267 
268  // Iterate through objects in frame
269  frame_meta.iterate([&](const ObjectMetadata& object_meta) {
270  // Extract labels
271  std::vector<std::string> obj_labels;
272  if (!object_meta.label().empty()) {
273  obj_labels.push_back(object_meta.label());
274  }
275 
276  // Extract bbox coordinates
277  const NvOSD_RectParams& rect = object_meta.rectParams();
278  int left = static_cast<int>(rect.left);
279  int top = static_cast<int>(rect.top);
280  int width = static_cast<int>(rect.width);
281  int height = static_cast<int>(rect.height);
282 
283  // Add bbox in [left, top, left+width, top+height] format
284  bboxes.push_back({left, top, left + width, top + height});
285 
286  // Add confidence
287  probs.push_back(object_meta.confidence());
288 
289  // Extract classifier labels
290  object_meta.iterate([&](const ClassifierMetadata& classifier) {
291  for (unsigned int i = 0; i < classifier.nLabels(); i++) {
292  obj_labels.push_back(classifier.getLabel(i));
293  }
294  });
295 
296  labels.push_back(obj_labels);
297  objects.push_back(static_cast<int>(object_meta.objectId()));
298 
299  // Handle instance mask
300  const NvOSD_MaskParams& mask_params = object_meta.maskParams();
301  if (mask_params.data != nullptr && mask_params.size > 0) {
302  // Allocate new array and copy/convert data (for data persistence and type conversion)
303  py::array_t<int> mask_array_int({mask_params.height, mask_params.width});
304  auto mask_buf = mask_array_int.mutable_unchecked<2>();
305 
306  // Copy and convert float to int in C++ for performance
307  for (unsigned int i = 0; i < mask_params.height; i++) {
308  for (unsigned int j = 0; j < mask_params.width; j++) {
309  mask_buf(i, j) = static_cast<int>(mask_params.data[i * mask_params.width + j]);
310  }
311  }
312  seg_maps.push_back(mask_array_int);
313  }
314  });
315 
316  // Iterate through segmentation user metadata
317  frame_meta.iterate([&](const UserMetadata& user_meta) {
318  SegmentationUserMetadata seg_meta(user_meta);
319 
320  if (seg_meta) {
321  shape = {static_cast<int>(seg_meta.getHeight()),
322  static_cast<int>(seg_meta.getWidth())};
323 
324  const int* class_map_data = seg_meta.getClassMap();
325  if (class_map_data) {
326  // Allocate new array and copy data (for data persistence beyond callback)
327  unsigned int height = seg_meta.getHeight();
328  unsigned int width = seg_meta.getWidth();
329  py::array_t<int> class_map({height, width});
330  auto buf = class_map.mutable_unchecked<2>();
331 
332  // Copy data in C++ for performance
333  for (unsigned int i = 0; i < height; i++) {
334  for (unsigned int j = 0; j < width; j++) {
335  buf(i, j) = class_map_data[i * width + j];
336  }
337  }
338  seg_maps.push_back(class_map);
339  }
340  }
342 
343  // Set timestamp
344  timestamp = static_cast<int64_t>(frame_meta.bufferPTS());
345 
346  // Build dictionary
347  metadata["shape"] = shape;
348  metadata["bboxes"] = bboxes;
349  metadata["probs"] = probs;
350  metadata["labels"] = labels;
351  metadata["seg_maps"] = seg_maps;
352  metadata["objects"] = objects;
353  metadata["timestamp"] = timestamp;
354 
355  // Store in list indexed by pad_index
356  unsigned int pad_index = frame_meta.padIndex();
357  if (pad_index < max_items) {
358  received[pad_index] = metadata;
359  }
360  });
361 
362  return received;
363 }
364 
365 py::list audio_batch_metadata_extract(BatchMetadata& self, unsigned int max_items) {
366  if (!self) {
367  return py::list();
368  }
369 
370  py::list received(max_items);
371  for (unsigned int i = 0; i < max_items; i++) {
372  received[i] = py::none();
373  }
374 
375  self.iterate([&](const AudioFrameMetadata& frame_meta) {
376  py::dict metadata;
377  std::vector<int> shape = {
378  static_cast<int>(frame_meta.numSamplesPerFrame()),
379  static_cast<int>(frame_meta.numChannels())
380  };
381  std::vector<std::vector<int>> bboxes;
382  std::vector<float> probs;
383  std::vector<std::vector<std::string>> labels;
384  std::vector<py::array_t<int>> seg_maps;
385  std::vector<int> objects;
386 
387  if (!frame_meta.classLabel().empty()) {
388  labels.push_back({frame_meta.classLabel()});
389  probs.push_back(frame_meta.confidence());
390  objects.push_back(frame_meta.classId());
391  }
392 
393  frame_meta.iterate([&](const ClassifierMetadata& classifier) {
394  std::vector<std::string> cls_labels;
395  for (unsigned int i = 0; i < classifier.nLabels(); i++) {
396  cls_labels.push_back(classifier.getLabel(i));
397  }
398  if (!cls_labels.empty()) {
399  labels.push_back(cls_labels);
400  }
401  });
402 
403  metadata["media_type"] = "audio";
404  metadata["shape"] = shape;
405  metadata["bboxes"] = bboxes;
406  metadata["probs"] = probs;
407  metadata["labels"] = labels;
408  metadata["seg_maps"] = seg_maps;
409  metadata["objects"] = objects;
410  metadata["timestamp"] = static_cast<int64_t>(frame_meta.bufferPTS());
411  metadata["sample_rate"] = frame_meta.sampleRate();
412  metadata["num_channels"] = frame_meta.numChannels();
413  metadata["num_samples_per_frame"] = frame_meta.numSamplesPerFrame();
414  metadata["format"] = frame_meta.format();
415  metadata["layout"] = frame_meta.layout();
416  metadata["infer_done"] = frame_meta.inferDone();
417  metadata["class_id"] = frame_meta.classId();
418  metadata["class_label"] = frame_meta.classLabel();
419  metadata["confidence"] = frame_meta.confidence();
420 
421  unsigned int pad_index = frame_meta.padIndex();
422  if (pad_index < max_items) {
423  received[pad_index] = metadata;
424  }
425  });
426 
427  return received;
428 }
429 
435 static void* copy_cstring_user_data(void* data, void* user_data) {
436  NvDsUserMeta* usermeta = (NvDsUserMeta*)(data);
437  return (usermeta && usermeta->user_meta_data) ? strdup((char*)usermeta->user_meta_data) : NULL;
438 }
439 
445 static void release_cstring_user_data(void* data, void* user_data) {
446  NvDsUserMeta* usermeta = (NvDsUserMeta*)data;
447  if (usermeta && usermeta->user_meta_data) {
448  free(usermeta->user_meta_data);
449  usermeta->user_meta_data = NULL;
450  }
451 }
452 
453 void module_metadata_bind(py::module &m);
454 
455 void module_metadata_bind(py::module &m) {
456  py::class_<BatchMetadata>(m, "BatchMetadata", pydeepstreamdoc::nvmeta::BatchMetaDoc::descr)
457  .def_property_readonly("n_frames", [](const BatchMetadata& self) {
458  return self.nFrames();
459  })
460  .def_property_readonly("is_audio", &BatchMetadata::isAudioBatch)
461  .def_property_readonly("frame_items", [](BatchMetadata& self) -> py::object {
462  if (self.isAudioBatch()) {
463  return py::cast(std::vector<FrameMetadata>());
464  }
465  return generate_iterator<FrameMetadata, BatchMetadata, FrameMetadata::Iterator>(self);
466  }, py::keep_alive<0, 1>())
467  .def_property_readonly("audio_frame_items", [](BatchMetadata& self) -> py::object {
468  if (!self.isAudioBatch()) {
469  return py::cast(std::vector<AudioFrameMetadata>());
470  }
471  return generate_iterator<AudioFrameMetadata, BatchMetadata, AudioFrameMetadata::Iterator>(self);
472  }, py::keep_alive<0, 1>())
473  .def_property_readonly("preprocess_batch_items", [](BatchMetadata& self) {
474  return generate_usermeta_iterator<BatchMetadata, NVDS_PREPROCESS_BATCH_META>(self);
475  }, py::keep_alive<0, 1>())
476  .def("retrieve_structure_usermeta", [](BatchMetadata& self, const std::string& type_name) {
477  return retrieve_structure_usermeta<BatchMetadata>(self, type_name);
478  })
479  .def("user_meta_items", [](BatchMetadata& self, int meta_type) {
482  self.initiateIterator(begin.get(), meta_type);
483  self.initiateIterator(end.get(), meta_type);
484  while (!end.get()->done()) ++end;
485  return py::make_iterator(std::move(begin), std::move(end));
487  py::arg("meta_type"), py::keep_alive<0, 1>())
488  .def("acquire_display_meta", [](BatchMetadata& self) {
489  DisplayMetadata display_meta;
490  self.acquire(display_meta);
491  // basic initialization for convenience
492  return display_meta;
494  .def("acquire_frame_meta", [](BatchMetadata& self) {
495  if (self.isAudioBatch()) {
496  throw py::type_error("Use audio_frame_items to access audio frame metadata");
497  }
498  FrameMetadata frame_meta;
499  self.acquire(frame_meta);
500  // basic initialization for convenience
501  return frame_meta;
503  .def("acquire_object_meta", [](BatchMetadata& self) {
504  ObjectMetadata object_meta;
505  self.acquire(object_meta);
506  // basic initialization for convenience
507  return object_meta;
509  .def("acquire_event_message_meta", [](BatchMetadata& self) {
510  EventMessageUserMetadata event_meta;
511  self.acquire(event_meta);
512  return event_meta;
514  .def("acquire_preprocess_batch_meta", [](BatchMetadata& self) {
515  PreprocessBatchUserMetadata preprocess_meta;
516  self.acquire(preprocess_meta);
517  return preprocess_meta;
519  .def("acquire_user_meta", [](BatchMetadata& self) {
520  UserMetadata user_meta(nullptr);
521  self.acquire(user_meta);
522  return user_meta;
524  .def("acquire_obj_reid_meta", [](BatchMetadata& self) {
525  ObjectReidUserMetadata reid_meta;
526  self.acquire(reid_meta);
527  return reid_meta;
529  .def("append", [](BatchMetadata& self, py::object object) {
530  if (py::isinstance<PreprocessBatchUserMetadata>(object)) {
531  self.append(object.cast<PreprocessBatchUserMetadata>());
532  } else {
533  throw py::type_error("Invalid type for BatchMetadata.append");
534  }
536  .def("extract", &batch_metadata_extract, pydeepstreamdoc::nvmeta::BatchMetaDoc::extract, py::arg("max_items"))
537  .def("__repr__", [](BatchMetadata& self) {
538  std::string frame_items_repr = "[]";
539  std::string audio_frame_items_repr = "[]";
540  if (self.isAudioBatch()) {
541  audio_frame_items_repr =
542  py::repr(generate_iterator<AudioFrameMetadata, BatchMetadata, AudioFrameMetadata::Iterator>(self)).cast<std::string>();
543  } else {
544  frame_items_repr =
545  py::repr(generate_iterator<FrameMetadata, BatchMetadata, FrameMetadata::Iterator>(self)).cast<std::string>();
546  }
547  return "BatchMetadata(n_frames=" + std::to_string(self.nFrames()) +
548  ", is_audio=" + std::string(self.isAudioBatch() ? "True" : "False") +
549  ", frame_items=" + frame_items_repr +
550  ", audio_frame_items=" + audio_frame_items_repr +
551  ", preprocess_batch_items=" + py::repr(generate_usermeta_iterator<BatchMetadata, NVDS_PREPROCESS_BATCH_META>(self)).cast<std::string>() + ")";
552  });
553  py::class_<FrameMetadata>(m, "FrameMetadata", pydeepstreamdoc::nvmeta::FrameMetaDoc::descr)
554  .def_property_readonly("frame_number", [](const FrameMetadata& self) {
555  return self.frameNum();
556  })
557  .def_property_readonly("pad_index", [](const FrameMetadata& self) {
558  return self.padIndex();
559  })
560  .def_property_readonly("batch_id", [](const FrameMetadata& self) {
561  return self.batchId();
562  })
563  .def_property_readonly("source_id", [](const FrameMetadata& self) {
564  return self.sourceId();
565  })
566  .def_property_readonly("source_width", [](const FrameMetadata& self) {
567  return self.sourceWidth();
568  })
569  .def_property_readonly("source_height", [](const FrameMetadata& self) {
570  return self.sourceHeight();
571  })
572  .def_property_readonly("pipeline_width", [](const FrameMetadata& self) {
573  return self.pipelineWidth();
574  })
575  .def_property_readonly("pipeline_height", [](const FrameMetadata& self) {
576  return self.pipelineHeight();
577  })
578  .def_property_readonly("buffer_pts", [](const FrameMetadata& self) {
579  return self.bufferPTS();
580  })
581  .def_property_readonly("ntp_timestamp", [](const FrameMetadata& self) {
582  return self.ntpTimestamp();
583  })
584  .def_property_readonly("object_items", [](FrameMetadata& self) {
585  return generate_iterator<ObjectMetadata, FrameMetadata, ObjectMetadata::Iterator>(self);
586  })
587  .def_property_readonly("tensor_items", [](FrameMetadata& self) {
588  return generate_usermeta_iterator<FrameMetadata, NVDSINFER_TENSOR_OUTPUT_META>(self);
589  })
590  .def_property_readonly("segmentation_items", [](FrameMetadata& self) {
591  return generate_usermeta_iterator<FrameMetadata, NVDSINFER_SEGMENTATION_META>(self);
592  })
593  .def_property_readonly("nvdsanalytics_frame_items", [](FrameMetadata& self) {
594  return generate_usermeta_iterator<FrameMetadata, NVDS_USER_FRAME_META_NVDSANALYTICS>(self);
595  })
596  .def("retrieve_structure_usermeta", [](FrameMetadata& self, const std::string& type_name){
597  return retrieve_structure_usermeta<FrameMetadata>(self, type_name);
598  })
599  .def("user_meta_items", [](FrameMetadata& self, int meta_type) {
602  self.initiateIterator(begin.get(), meta_type);
603  self.initiateIterator(end.get(), meta_type);
604  while (!end.get()->done()) ++end;
605  return py::make_iterator(std::move(begin), std::move(end));
607  py::arg("meta_type"), py::keep_alive<0, 1>())
608  .def("append", [](FrameMetadata& self, py::object object) {
609  if (py::isinstance<DisplayMetadata>(object)){
610  self.append(object.cast<DisplayMetadata>());
611  } else if (py::isinstance<EventMessageUserMetadata>(object)) {
612  self.append(object.cast<EventMessageUserMetadata>());
613  } else if (py::isinstance<ObjectMetadata>(object)) {
614  self.append(object.cast<ObjectMetadata>());
615  } else {
616  throw py::type_error("Invalid type for FrameMetadata.append");
617  }
619  .def("__repr__", [](FrameMetadata& self) {
620  return "FrameMetadata(frame_number=" + std::to_string(self.frameNum()) +
621  ", pad_index=" + std::to_string(self.padIndex()) +
622  ", batch_id=" + std::to_string(self.batchId()) +
623  ", source_id=" + std::to_string(self.sourceId()) +
624  ", source_width=" + std::to_string(self.sourceWidth()) +
625  ", source_height=" + std::to_string(self.sourceHeight()) +
626  ", pipeline_width=" + std::to_string(self.pipelineWidth()) +
627  ", pipeline_height=" + std::to_string(self.pipelineHeight()) +
628  ", buffer_pts=" + std::to_string(self.bufferPTS()) +
629  ", ntp_timestamp=" + std::to_string(self.ntpTimestamp()) +
630  ", object_items=" + py::repr(generate_iterator<ObjectMetadata, FrameMetadata, ObjectMetadata::Iterator>(self)).cast<std::string>() +
631  ", tensor_items=" + py::repr(generate_usermeta_iterator<FrameMetadata, NVDSINFER_TENSOR_OUTPUT_META>(self)).cast<std::string>() +
632  ", segmentation_items=" + py::repr(generate_usermeta_iterator<FrameMetadata, NVDSINFER_SEGMENTATION_META>(self)).cast<std::string>() +
633  ", nvdsanalytics_frame_items=" + py::repr(generate_usermeta_iterator<FrameMetadata, NVDS_USER_FRAME_META_NVDSANALYTICS>(self)).cast<std::string>() + ")";
634  });
635  py::class_<AudioFrameMetadata>(m, "AudioFrameMetadata", pydeepstreamdoc::nvmeta::AudioFrameMetaDoc::descr)
636  .def_property_readonly("frame_number", [](const AudioFrameMetadata& self) {
637  return self.frameNum();
638  })
639  .def_property_readonly("pad_index", [](const AudioFrameMetadata& self) {
640  return self.padIndex();
641  })
642  .def_property_readonly("batch_id", [](const AudioFrameMetadata& self) {
643  return self.batchId();
644  })
645  .def_property_readonly("source_id", [](const AudioFrameMetadata& self) {
646  return self.sourceId();
647  })
648  .def_property_readonly("sample_rate", [](const AudioFrameMetadata& self) {
649  return self.sampleRate();
650  })
651  .def_property_readonly("num_channels", [](const AudioFrameMetadata& self) {
652  return self.numChannels();
653  })
654  .def_property_readonly("num_samples_per_frame", [](const AudioFrameMetadata& self) {
655  return self.numSamplesPerFrame();
656  })
657  .def_property_readonly("format", [](const AudioFrameMetadata& self) {
658  return self.format();
659  })
660  .def_property_readonly("layout", [](const AudioFrameMetadata& self) {
661  return self.layout();
662  })
663  .def_property_readonly("buffer_pts", [](const AudioFrameMetadata& self) {
664  return self.bufferPTS();
665  })
666  .def_property_readonly("ntp_timestamp", [](const AudioFrameMetadata& self) {
667  return self.ntpTimestamp();
668  })
669  .def_property_readonly("infer_done", [](const AudioFrameMetadata& self) {
670  return self.inferDone();
671  })
672  .def_property_readonly("class_id", [](const AudioFrameMetadata& self) {
673  return self.classId();
674  })
675  .def_property_readonly("confidence", [](const AudioFrameMetadata& self) {
676  return self.confidence();
677  })
678  .def_property_readonly("class_label", [](const AudioFrameMetadata& self) {
679  return self.classLabel();
680  })
681  .def_property_readonly("classifier_items", [](AudioFrameMetadata& self) {
682  return generate_iterator<ClassifierMetadata, AudioFrameMetadata, ClassifierMetadata::Iterator>(self);
683  })
684  .def_property_readonly("tensor_items", [](AudioFrameMetadata& self) {
685  return generate_usermeta_iterator<AudioFrameMetadata, NVDSINFER_TENSOR_OUTPUT_META>(self);
686  })
687  .def("user_meta_items", [](AudioFrameMetadata& self, int meta_type) {
690  self.initiateIterator(begin.get(), meta_type);
691  self.initiateIterator(end.get(), meta_type);
692  while (!end.get()->done()) ++end;
693  return py::make_iterator(std::move(begin), std::move(end));
695  py::arg("meta_type"), py::keep_alive<0, 1>())
696  .def("append", [](AudioFrameMetadata& self, py::object object) {
697  if (py::isinstance<EventMessageUserMetadata>(object)) {
698  self.append(object.cast<EventMessageUserMetadata>());
699  } else if (py::isinstance<UserMetadata>(object)) {
700  self.append(object.cast<UserMetadata>());
701  } else {
702  throw py::type_error("Invalid type for AudioFrameMetadata.append");
703  }
705  .def("__repr__", [](AudioFrameMetadata& self) {
706  return "AudioFrameMetadata(frame_number=" + std::to_string(self.frameNum()) +
707  ", pad_index=" + std::to_string(self.padIndex()) +
708  ", batch_id=" + std::to_string(self.batchId()) +
709  ", source_id=" + std::to_string(self.sourceId()) +
710  ", sample_rate=" + std::to_string(self.sampleRate()) +
711  ", num_channels=" + std::to_string(self.numChannels()) +
712  ", num_samples_per_frame=" + std::to_string(self.numSamplesPerFrame()) +
713  ", class_id=" + std::to_string(self.classId()) +
714  ", class_label=" + (self.classLabel().empty() ? "''" : self.classLabel()) +
715  ", confidence=" + std::to_string(self.confidence()) +
716  ", classifier_items=" + py::repr(generate_iterator<ClassifierMetadata, AudioFrameMetadata, ClassifierMetadata::Iterator>(self)).cast<std::string>() + ")";
717  });
718  py::class_<DisplayMetadata>(m, "DisplayMetadata", pydeepstreamdoc::nvmeta::DisplayMetaDoc::descr)
719  .def_property_readonly("n_rects", [](const DisplayMetadata& self) {
720  return self.nRects();
721  })
722  .def_property_readonly("n_labels", [](const DisplayMetadata& self) {
723  return self.nLabels();
724  })
725  .def_property_readonly("n_lines", [](const DisplayMetadata& self) {
726  return self.nLines();
727  })
728  .def_property_readonly("n_arrows", [](const DisplayMetadata& self) {
729  return self.nArrows();
730  })
731  .def_property_readonly("n_circles", [](const DisplayMetadata& self) {
732  return self.nCircles();
733  })
734  .def("add_text", [](DisplayMetadata& self, Text& item) {
735  self.add(item);
737  .def("add_rect", [](DisplayMetadata& self, NvOSD_RectParams& item) {
738  self.add(item);
740  .def("add_line", [](DisplayMetadata& self, NvOSD_LineParams& item) {
741  self.add(item);
743  .def("add_arrow", [](DisplayMetadata& self, NvOSD_ArrowParams& item) {
744  self.add(item);
746  .def("add_circle", [](DisplayMetadata& self, NvOSD_CircleParams& item) {
747  self.add(item);
749  .def("__repr__", [](DisplayMetadata& self) {
750  return "DisplayMetadata(n_rects=" + std::to_string(self.nRects()) +
751  ", n_labels=" + std::to_string(self.nLabels()) +
752  ", n_lines=" + std::to_string(self.nLines()) +
753  ", n_arrows=" + std::to_string(self.nArrows()) +
754  ", n_circles=" + std::to_string(self.nCircles()) + ")";
755  });
756  py::class_<LabelInfo>(m, "LabelInfo", pydeepstreamdoc::nvmeta::LabelInfoDoc::descr)
757  .def_property_readonly("label", &LabelInfo::label)
758  .def_property_readonly("class_id", &LabelInfo::classId)
759  .def_property_readonly("prob", &LabelInfo::prob)
760  .def_property_readonly("label_id", &LabelInfo::labelId)
761  .def_property_readonly("num_classes", &LabelInfo::numClasses)
762  .def("__repr__", [](LabelInfo& self) {
763  return "LabelInfo(label=" + self.label() +
764  ", class_id=" + std::to_string(self.classId()) +
765  ", prob=" + std::to_string(self.prob()) +
766  ", label_id=" + std::to_string(self.labelId()) +
767  ", num_classes=" + std::to_string(self.numClasses()) + ")";
768  });
769  py::class_<ClassifierMetadata>(m, "ClassifierMetadata", pydeepstreamdoc::nvmeta::ClassifierMetaDoc::descr)
770  .def_property_readonly("n_labels", &ClassifierMetadata::nLabels)
771  .def_property_readonly("unique_component_id", &ClassifierMetadata::uniqueComponentId)
772  .def_property_readonly("classifier_type", &ClassifierMetadata::classifierType, pydeepstreamdoc::nvmeta::ClassifierMetaDoc::classifier_type)
773  .def("get_label_info", &ClassifierMetadata::getLabelInfo, pydeepstreamdoc::nvmeta::ClassifierMetaDoc::get_label_info)
774  .def("get_n_label", &ClassifierMetadata::getLabel, pydeepstreamdoc::nvmeta::ClassifierMetaDoc::get_label)
775  .def("__repr__", [](ClassifierMetadata& self) {
776  return "ClassifierMetadata(n_labels=" + std::to_string(self.nLabels()) +
777  ", unique_component_id=" + std::to_string(self.uniqueComponentId()) +
778  ", classifier_type=" + self.classifierType() + ")";
779  });
780  py::class_<ObjectMetadata>(m, "ObjectMetadata", pydeepstreamdoc::nvmeta::ObjectMetaDoc::descr)
781  .def_property("class_id", &ObjectMetadata::classId, &ObjectMetadata::setClassId)
782  .def_property("object_id", &ObjectMetadata::objectId, &ObjectMetadata::setObjectId)
783  .def_property("unique_component_id", &ObjectMetadata::uniqueComponentId, &ObjectMetadata::setUniqueComponentId)
784  .def_property("confidence", &ObjectMetadata::confidence, &ObjectMetadata::setConfidence)
785  .def_property("tracker_confidence", &ObjectMetadata::trackerConfidence, &ObjectMetadata::setTrackerConfidence)
786  .def_property("rect_params", &ObjectMetadata::rectParams, &ObjectMetadata::setRectParams, py::return_value_policy::reference_internal)
787  .def_property("mask_params", &ObjectMetadata::maskParams, &ObjectMetadata::setMaskParams, py::return_value_policy::reference_internal)
788  .def_property("text_params", &ObjectMetadata::textParams, &ObjectMetadata::setTextParams, py::return_value_policy::reference_internal)
789  .def_property("label", &ObjectMetadata::label, &ObjectMetadata::setLabel)
790  .def_property_readonly("classifier_items", [](ObjectMetadata& self) {
791  return generate_iterator<ClassifierMetadata, ObjectMetadata, ClassifierMetadata::Iterator>(self);
792  })
793  .def_property_readonly("tensor_items", [](ObjectMetadata& self) {
794  return generate_usermeta_iterator<ObjectMetadata, NVDSINFER_TENSOR_OUTPUT_META>(self);
795  })
796  .def_property_readonly("nvdsanalytics_obj_items", [](ObjectMetadata& self) {
797  return generate_usermeta_iterator<ObjectMetadata, NVDS_USER_OBJ_META_NVDSANALYTICS>(self);
798  })
799  .def_property_readonly("obj_reid_items", [](ObjectMetadata& self) {
800  return generate_usermeta_iterator<ObjectMetadata, NVDS_TRACKER_OBJ_REID_META>(self);
801  })
802  .def("user_meta_items", [](ObjectMetadata& self, int meta_type) {
805  self.initiateIterator(begin.get(), meta_type);
806  self.initiateIterator(end.get(), meta_type);
807  while (!end.get()->done()) ++end;
808  return py::make_iterator(std::move(begin), std::move(end));
810  py::arg("meta_type"), py::keep_alive<0, 1>())
811  .def("append", [](ObjectMetadata& self, UserMetadata& user_meta) {
812  self.append(user_meta);
814  .def_property("nv_bbox_info", [](const ObjectMetadata& self) {
815  const NvBbox_Coords& b = self.nvBboxInfo();
816  py::dict d;
817  d["left"] = b.left;
818  d["top"] = b.top;
819  d["width"] = b.width;
820  d["height"] = b.height;
821  return d;
822  }, [](ObjectMetadata& self, py::dict d) {
823  NvBbox_Coords b;
824  b.left = d["left"].cast<float>();
825  b.top = d["top"].cast<float>();
826  b.width = d["width"].cast<float>();
827  b.height = d["height"].cast<float>();
828  self.setNvBboxInfo(b);
829  })
830  .def("__repr__", [](ObjectMetadata& self) {
831  return "ObjectMetadata(class_id=" + std::to_string(self.classId()) +
832  ", object_id=" + std::to_string(self.objectId()) +
833  ", unique_component_id=" + std::to_string(self.uniqueComponentId()) +
834  ", confidence=" + std::to_string(self.confidence()) +
835  ", rect_params=" + py::repr(py::cast(self.rectParams())).cast<std::string>() +
836  ", mask_params=" + py::repr(py::cast(self.maskParams())).cast<std::string>() +
837  ", text_params=" + [&]() {
838  const NvOSD_TextParams* text_ptr = &self.textParams();
839  if (text_ptr == nullptr) {
840  return std::string("Text(null)");
841  }
842  const NvOSD_TextParams& text = *text_ptr;
843  std::string display_text_str = text.display_text ? std::string(text.display_text) : "null";
844  std::string font_name_str = text.font_params.font_name ? std::string(text.font_params.font_name) : "null";
845 
846  return "Text(display_text='" + display_text_str +
847  "', x_offset=" + std::to_string(text.x_offset) +
848  ", y_offset=" + std::to_string(text.y_offset) +
849  ", font_name='" + font_name_str +
850  "', font_size=" + std::to_string(text.font_params.font_size) +
851  ", bg_color=" + py::repr(py::cast(text.text_bg_clr)).cast<std::string>() + ")";
852  }() +
853  ", label=" + (self.label().empty() ? "''" : self.label()) +
854  ", classifier_items=" + py::repr(generate_iterator<ClassifierMetadata, ObjectMetadata, ClassifierMetadata::Iterator>(self)).cast<std::string>() +
855  ", tensor_items=" + py::repr(generate_usermeta_iterator<ObjectMetadata, NVDSINFER_TENSOR_OUTPUT_META>(self)).cast<std::string>() +
856  ", nvdsanalytics_obj_items=" + py::repr(generate_usermeta_iterator<ObjectMetadata, NVDS_USER_OBJ_META_NVDSANALYTICS>(self)).cast<std::string>() + ")";
857  });
858  py::class_<UserMetadata>(m, "UserMetadata", pydeepstreamdoc::nvmeta::UserMetaDoc::descr)
859  .def_property("meta_type", &UserMetadata::metaType, &UserMetadata::setMetaType)
860  .def("set_user_data_json", [](UserMetadata& self, py::object obj, int meta_type) {
861  // Import json module and serialize object
862  py::module_ json = py::module_::import("json");
863  py::str json_str = json.attr("dumps")(obj);
864  std::string str = json_str.cast<std::string>();
865  // Allocate C string copy
866  char* c_str = strdup(str.c_str());
867  self.setUserData(c_str, copy_cstring_user_data, release_cstring_user_data);
868  self.setMetaType(meta_type);
870  py::arg("data"), py::arg("meta_type"))
871  .def("get_user_data_json", [](UserMetadata& self) -> py::object {
872  void* data = self.userData();
873  if (data) {
874  const char* json_str = static_cast<const char*>(data);
875  // Import json module and deserialize string
876  py::module_ json = py::module_::import("json");
877  return json.attr("loads")(py::str(json_str));
878  }
879  return py::none();
881  .def("as_tensor_output", [](UserMetadata& self) {
882  return TensorOutputUserMetadata(self);
884  .def("as_segmentation", [](UserMetadata& self) {
885  return SegmentationUserMetadata(self);
887  .def("as_preprocess_batch", [](UserMetadata& self) {
888  return PreprocessBatchUserMetadata(self);
890  .def("as_nvdsanalytics_obj", [](UserMetadata& self) {
891  return AnalyticsObjInfo(self);
893  .def("as_nvdsanalytics_frame", [](UserMetadata& self) {
894  return AnalyticsFrameMeta(self);
896  .def("as_structure_str", [](UserMetadata& self) -> std::string {
897  StructureUserMetadata meta(self);
898  const auto *structure = (const GstStructure*)meta.getStructureUserMetadata();
899  if (!structure) return "";
900 
901  // If Structure no name, return empty string
902  auto name = gst_structure_get_name(structure);
903  if (name == nullptr) return "";
904 
905  // Create a copy and convert gpointer fields to guint64
906  GstStructure *converted = gst_structure_new_empty(name);
907  gint n_fields = gst_structure_n_fields(structure);
908  for (gint i = 0; i < n_fields; i++) {
909  const gchar *field_name = gst_structure_nth_field_name(structure, i);
910  const GValue *value = gst_structure_get_value(structure, field_name);
911  if (value && G_VALUE_TYPE(value) == G_TYPE_POINTER) {
912  // Convert pointer to uint64
913  gpointer ptr = g_value_get_pointer(value);
914  guint64 ptr_as_uint64 = (guint64)(uintptr_t)ptr;
915  gst_structure_set(converted, field_name, G_TYPE_UINT64, ptr_as_uint64, NULL);
916  } else if (value) {
917  // Copy other fields as-is
918  gst_structure_set_value(converted, field_name, value);
919  }
920  }
921 
922  gchar* str = gst_structure_to_string(converted);
923  gst_structure_free(converted);
924 
925  if (!str) return "";
926  std::string result(str);
927  g_free(str);
928  return result;
929  })
930  .def("as_obj_reid", [](UserMetadata& self) {
931  return ObjectReidUserMetadata(self);
933  .def("__bool__", [](UserMetadata& self) { return (bool)self; });
934  py::class_<ObjectReidUserMetadata, UserMetadata>(m, "ObjectReidUserMetadata", pydeepstreamdoc::nvmeta::ObjectReidUserMetaDoc::descr)
935  .def_property_readonly("feature_size", &ObjectReidUserMetadata::featureSize)
936  .def_property_readonly("feature_vector", [](ObjectReidUserMetadata& self) {
937  const float* data = self.featureVector();
938  unsigned int size = self.featureSize();
939  if (!data || size == 0) {
940  return py::array_t<float>();
941  }
942  return py::array_t<float>(
943  {size},
944  {sizeof(float)},
945  data
946  );
947  })
948  .def("set_feature_vector", [](ObjectReidUserMetadata& self, py::array_t<float> features) {
949  auto buf = features.request();
950  if (buf.ndim != 1) {
951  throw std::runtime_error("Feature vector must be 1-dimensional");
952  }
953  self.setFeatureVector(static_cast<float*>(buf.ptr), buf.shape[0]);
955  py::arg("features"))
956  .def("__repr__", [](ObjectReidUserMetadata& self) {
957  return "ObjectReidUserMetadata(feature_size=" + std::to_string(self.featureSize()) + ")";
958  });
959  py::class_<EventMessageUserMetadata, UserMetadata>(m, "EventMessageUserMetadata", pydeepstreamdoc::nvmeta::EventMessageUserMetaDoc::descr)
960  .def("generate", [](EventMessageUserMetadata& self,
961  const ObjectMetadata& object_meta,
962  const FrameMetadata& frame_meta,
963  const std::string& sensor,
964  const std::string& uri,
965  const std::vector<std::string>& labels) {
966  self.generate(object_meta, frame_meta, sensor, uri, labels);
968  py::arg("object_meta"), py::arg("frame_meta"), py::arg("sensor")="N/A", py::arg("uri")="N/A", py::arg("labels")=std::vector<std::string>())
969  .def("generate", [](EventMessageUserMetadata& self,
970  const AudioFrameMetadata& audio_frame_meta,
971  const std::string& sensor,
972  const std::string& uri) {
973  self.generate(audio_frame_meta, sensor, uri);
975  py::arg("audio_frame_meta"), py::arg("sensor")="N/A", py::arg("uri")="N/A");
976  py::class_<TensorOutputUserMetadata, UserMetadata>(m, "TensorOutputUserMetadata", pydeepstreamdoc::nvmeta::TensorOutputUserMetaDoc::descr)
977  .def_property_readonly("unique_id", [](const TensorOutputUserMetadata& self) {
978  return self.uniqueId();
979  })
980  .def("get_layers", [](TensorOutputUserMetadata& self) {
981  std::unordered_map<std::string, TensorWrapper> outputs;
982  auto layers = self.getLayers();
983  for (auto it = layers.begin(); it != layers.end(); it++) {
984  outputs[it->first] = TensorWrapper(it->second);
985  }
986  return outputs;
988  .def("__repr__", [](TensorOutputUserMetadata& self) {
989  return "TensorOutputUserMetadata(unique_id=" + std::to_string(self.uniqueId()) + ")";
990  });
991  py::class_<SegmentationUserMetadata, UserMetadata>(m, "SegmentationUserMetadata", pydeepstreamdoc::nvmeta::SegmentationUserMetaDoc::descr)
992  .def_property_readonly("unique_id", [](const SegmentationUserMetadata& self) {
993  return self.uniqueId();
994  })
995  .def_property_readonly("classes", [](SegmentationUserMetadata& self) {
996  return self.getClasses();
997  })
998  .def_property_readonly("width", [](SegmentationUserMetadata& self) {
999  return self.getWidth();
1000  })
1001  .def_property_readonly("height", [](SegmentationUserMetadata& self) {
1002  return self.getHeight();
1003  })
1004  .def_property_readonly("class_map", [](SegmentationUserMetadata& self) {
1005  const int* data = self.getClassMap();
1006  if (!data) {
1007  return py::array_t<int>();
1008  }
1009  return py::array_t<int>(
1010  {self.getHeight(), self.getWidth()},
1011  {self.getWidth() * sizeof(int), sizeof(int)},
1012  data
1013  );
1014  })
1015  .def_property_readonly("class_probabilities_map", [](SegmentationUserMetadata& self) {
1016  const float* data = self.getClassProbabilitiesMap();
1017  if (!data) {
1018  return py::array_t<float>();
1019  }
1020  return py::array_t<float>(
1021  {self.getHeight(), self.getWidth(), self.getClasses()},
1022  {self.getWidth() * self.getClasses() * sizeof(float), self.getClasses() * sizeof(float), sizeof(float)},
1023  data
1024  );
1025  })
1026  .def("__repr__", [](SegmentationUserMetadata& self) {
1027  const int* class_map_data = self.getClassMap();
1028  py::array_t<int> class_map;
1029  if (!class_map_data) {
1030  class_map = py::array_t<int>();
1031  } else {
1032  class_map = py::array_t<int>(
1033  {self.getHeight(), self.getWidth()},
1034  {self.getWidth() * sizeof(int), sizeof(int)},
1035  class_map_data
1036  );
1037  }
1038  const float* class_probabilities_map_data = self.getClassProbabilitiesMap();
1039  py::array_t<float> class_probabilities_map;
1040  if (!class_probabilities_map_data) {
1041  class_probabilities_map = py::array_t<float>();
1042  } else {
1043  class_probabilities_map = py::array_t<float>(
1044  {self.getHeight(), self.getWidth(), self.getClasses()},
1045  {self.getWidth() * self.getClasses() * sizeof(float), self.getClasses() * sizeof(float), sizeof(float)},
1046  class_probabilities_map_data
1047  );
1048  }
1049 
1050  return "SegmentationUserMetadata(unique_id=" + std::to_string(self.uniqueId()) +
1051  ", classes=" + std::to_string(self.getClasses()) +
1052  ", width=" + std::to_string(self.getWidth()) +
1053  ", height=" + std::to_string(self.getHeight()) +
1054  ", class_map=" + py::repr(class_map).cast<std::string>() +
1055  ", class_probabilities_map=" + py::repr(class_probabilities_map).cast<std::string>() + ")";
1056  });
1057  py::class_<RoiMetadata>(m, "RoiMetadata", pydeepstreamdoc::nvmeta::RoiMetaDoc::descr)
1058  .def_property_readonly("roi", [](const RoiMetadata& self) {
1059  return self.rectParams();
1060  })
1061  .def_property_readonly("frame_meta", [](const RoiMetadata& self) {
1062  return self.frameMetadata();
1063  })
1064  .def_property_readonly("tensor_items", [](RoiMetadata& self) {
1065  return generate_usermeta_iterator<RoiMetadata, NVDSINFER_TENSOR_OUTPUT_META>(self);
1066  })
1067  .def_property_readonly("classifier_items", [](RoiMetadata& self) {
1068  return generate_iterator<ClassifierMetadata, RoiMetadata, ClassifierMetadata::Iterator>(self);
1069  })
1070  .def_property_readonly("segmentation_items", [](RoiMetadata& self) {
1071  return generate_usermeta_iterator<RoiMetadata, NVDSINFER_SEGMENTATION_META>(self);
1072  })
1073  .def_property_readonly("object_meta", [](const RoiMetadata& self) {
1074  return self.objectMetadata();
1075  })
1076  .def("__repr__", [](RoiMetadata& self) {
1077  std::string object_meta_str = "null";
1078  auto object_meta = self.objectMetadata();
1079  if (object_meta) {
1080  object_meta_str = py::repr(py::cast(object_meta)).cast<std::string>();
1081  }
1082  return "RoiMetadata(roi=" + py::repr(py::cast(self.rectParams())).cast<std::string>() +
1083  ", frame_meta=" + py::repr(py::cast(self.frameMetadata())).cast<std::string>() +
1084  ", classifier_items=" + py::repr(generate_iterator<ClassifierMetadata, RoiMetadata, ClassifierMetadata::Iterator>(self)).cast<std::string>() +
1085  ", segmentation_items=" + py::repr(generate_usermeta_iterator<RoiMetadata, NVDSINFER_SEGMENTATION_META>(self)).cast<std::string>() +
1086  ", object_meta=" + object_meta_str + ")";
1087  });
1088  py::class_<PreprocessTensorMetadata>(m, "PreprocessTensorMetadata", pydeepstreamdoc::nvmeta::PreprocessTensorMetaDoc::descr)
1089  .def_property_readonly("name", [](PreprocessTensorMetadata& self) {
1090  return self.getName();
1091  })
1092  .def_property_readonly("meta_id", [](PreprocessTensorMetadata& self) {
1093  return self.getMetaId();
1094  })
1095  .def_property_readonly("tensor", [](PreprocessTensorMetadata& self) {
1096  return TensorWrapper(self.getTensor());
1097  })
1098  .def("__repr__", [](PreprocessTensorMetadata& self) {
1099  std::string tensor_str = "null";
1100  std::unique_ptr<Tensor> tensor_ptr(self.getTensor());
1101  if (tensor_ptr != nullptr) {
1102  TensorWrapper temp_wrapper(tensor_ptr.get());
1103  tensor_str = py::repr(py::cast(temp_wrapper, py::return_value_policy::reference)).cast<std::string>();
1104  temp_wrapper.release();
1105  }
1106  return "PreprocessTensorMetadata(name=" + self.getName() +
1107  ", meta_id=" + std::to_string(self.getMetaId()) +
1108  ", tensor=" + tensor_str + ")";
1109  });
1110  py::class_<PreprocessBatchUserMetadata, UserMetadata>(m, "PreprocessBatchUserMetadata", pydeepstreamdoc::nvmeta::PreprocessBatchUserMetaDoc::descr)
1111  .def_property_readonly("rois", [](PreprocessBatchUserMetadata& self) {
1112  return self.getRois();
1113  })
1114  .def_property_readonly("preprocess_tensor_meta", [](PreprocessBatchUserMetadata& self) {
1115  return self.getPreprocessTensorMetadata();
1116  })
1117  .def("set_preprocessed_tensor", [](PreprocessBatchUserMetadata& self, std::string name, unsigned int meta_id, unsigned int unique_id, TensorWrapper& tensor) {
1118  self.initPreprocessTensorMetadata(name, meta_id, unique_id, tensor.release());
1121  py::arg("max_items"))
1122  .def("__repr__", [](PreprocessBatchUserMetadata& self) {
1123  std::string preprocess_tensor_meta_str = "null";
1124  auto preprocess_tensor_meta = self.getPreprocessTensorMetadata();
1125  if (preprocess_tensor_meta) {
1126  preprocess_tensor_meta_str = py::repr(py::cast(preprocess_tensor_meta)).cast<std::string>();
1127  }
1128  return "PreprocessBatchUserMetadata(rois=" + py::repr(py::cast(self.getRois())).cast<std::string>() +
1129  ", preprocess_tensor_meta=" + preprocess_tensor_meta_str + ")";
1130  });
1131  py::class_<AnalyticsObjInfo, UserMetadata>(m, "AnalyticsObjInfo", pydeepstreamdoc::nvmeta::AnalyticsObjInfoDoc::descr)
1132  .def_property_readonly("roi_status", [](AnalyticsObjInfo& self) {
1133  return self.getRoiStatus();
1134  })
1135  .def_property_readonly("oc_status", [](AnalyticsObjInfo& self) {
1136  return self.getOcStatus();
1137  })
1138  .def_property_readonly("lc_status", [](AnalyticsObjInfo& self) {
1139  return self.getLcStatus();
1140  })
1141  .def_property_readonly("dir_status", [](AnalyticsObjInfo& self) {
1142  return self.getDirStatus();
1143  })
1144  .def_property_readonly("unique_id", [](AnalyticsObjInfo& self) {
1145  return self.getUniqueId();
1146  })
1147  .def_property_readonly("obj_status", [](AnalyticsObjInfo& self) {
1148  return self.getObjStatus();
1149  })
1150  .def("__repr__", [](AnalyticsObjInfo& self) {
1151  return "AnalyticsObjInfo(roi_status=" + py::repr(py::cast(self.getRoiStatus())).cast<std::string>() +
1152  ", oc_status=" + py::repr(py::cast(self.getOcStatus())).cast<std::string>() +
1153  ", lc_status=" + py::repr(py::cast(self.getLcStatus())).cast<std::string>() +
1154  ", dir_status=" + self.getDirStatus() +
1155  ", unique_id=" + std::to_string(self.getUniqueId()) +
1156  ", obj_status=" + self.getObjStatus() + ")";
1157  });
1158  py::class_<AnalyticsFrameMeta, UserMetadata>(m, "AnalyticsFrameMeta", pydeepstreamdoc::nvmeta::AnalyticsFrameMetaDoc::descr)
1159  .def_property_readonly("oc_status", [](AnalyticsFrameMeta& self) {
1160  return self.getOcStatus();
1161  })
1162  .def_property_readonly("obj_in_roi_cnt", [](AnalyticsFrameMeta& self) {
1163  return self.getObjInROIcnt();
1164  })
1165  .def_property_readonly("obj_lc_curr_cnt", [](AnalyticsFrameMeta& self) {
1166  return self.getObjLCCurrCnt();
1167  })
1168  .def_property_readonly("obj_lc_cum_cnt", [](AnalyticsFrameMeta& self) {
1169  return self.getObjLCCumCnt();
1170  })
1171  .def_property_readonly("unique_id", [](AnalyticsFrameMeta& self) {
1172  return self.getUniqueId();
1173  })
1174  .def_property_readonly("obj_cnt", [](AnalyticsFrameMeta& self) {
1175  return self.getObjCnt();
1176  })
1177  .def("__repr__", [](AnalyticsFrameMeta& self) {
1178  return "AnalyticsFrameMeta(oc_status=" + py::repr(py::cast(self.getOcStatus())).cast<std::string>() +
1179  ", obj_in_roi_cnt=" + py::repr(py::cast(self.getObjInROIcnt())).cast<std::string>() +
1180  ", obj_lc_curr_cnt=" + py::repr(py::cast(self.getObjLCCurrCnt())).cast<std::string>() +
1181  ", obj_lc_cum_cnt=" + py::repr(py::cast(self.getObjLCCumCnt())).cast<std::string>() +
1182  ", unique_id=" + std::to_string(self.getUniqueId()) +
1183  ", obj_cnt=" + py::repr(py::cast(self.getObjCnt())).cast<std::string>() + ")";
1184  });
1185  py::class_<ObjectVisibilityUserMetadata, UserMetadata>(m, "ObjectVisibilityUserMetadata")
1186  .def(py::init<const UserMetadata&>())
1187  .def_property_readonly("visibility", &ObjectVisibilityUserMetadata::getVisibility);
1188  py::class_<ObjectImageFootLocationUserMetadata, UserMetadata>(m, "ObjectImageFootLocationUserMetadata")
1189  .def(py::init<const UserMetadata&>())
1190  .def_property_readonly("image_foot_location", [](ObjectImageFootLocationUserMetadata& self) {
1191  auto loc = self.getImageFootLocation();
1192  py::dict d;
1193  d["x"] = loc.first;
1194  d["y"] = loc.second;
1195  return d;
1196  });
1197  py::class_<ObjectWorldFootLocationUserMetadata, UserMetadata>(m, "ObjectWorldFootLocationUserMetadata")
1198  .def(py::init<const UserMetadata&>())
1199  .def_property_readonly("world_foot_location", [](ObjectWorldFootLocationUserMetadata& self) {
1200  auto loc = self.getWorldFootLocation();
1201  py::dict d;
1202  d["x"] = loc.first;
1203  d["y"] = loc.second;
1204  return d;
1205  });
1206  py::class_<ObjectConvexHullUserMetadata, UserMetadata>(m, "ObjectConvexHullUserMetadata")
1207  .def(py::init<const UserMetadata&>())
1208  .def_property_readonly("convex_hull", [](ObjectConvexHullUserMetadata& self) {
1209  py::list points;
1210  for (auto& pt : self.getConvexHull()) {
1211  points.append(py::make_tuple(pt.first, pt.second));
1212  }
1213  return points;
1214  });
1215  py::class_<Object3DBBoxUserMetadata, UserMetadata>(m, "Object3DBBoxUserMetadata")
1216  .def(py::init<const UserMetadata&>())
1217  .def_property_readonly("bbox_3d", [](Object3DBBoxUserMetadata& self) {
1218  py::dict d;
1219  NvDsObj3DBbox* bbox = self.get3DBbox();
1220  if (!bbox) return d;
1221  d["x_centre"] = bbox->xCentre;
1222  d["y_centre"] = bbox->yCentre;
1223  d["z_centre"] = bbox->zCentre;
1224  d["x_len"] = bbox->xLen;
1225  d["y_len"] = bbox->yLen;
1226  d["z_len"] = bbox->zLen;
1227  d["x_rot"] = bbox->xRot;
1228  d["y_rot"] = bbox->yRot;
1229  d["z_rot"] = bbox->zRot;
1230  d["x_vel"] = bbox->xVel;
1231  d["y_vel"] = bbox->yVel;
1232  d["z_vel"] = bbox->zVel;
1233  return d;
1234  });
1235  py::class_<TrackerPastFrameUserMetadata, UserMetadata>(m, "TrackerPastFrameUserMetadata")
1236  .def(py::init<const UserMetadata&>())
1237  .def_property_readonly("past_frame_data", [](TrackerPastFrameUserMetadata& self) {
1238  py::list streams;
1239  NvDsTargetMiscDataBatch* batch = self.getTrackerMiscDataBatch();
1240  if (!batch) return streams;
1241  for (uint32_t si = 0; si < batch->numFilled; si++) {
1242  NvDsTargetMiscDataStream* s = batch->list + si;
1243  py::list objects;
1244  for (uint32_t li = 0; li < s->numFilled; li++) {
1245  NvDsTargetMiscDataObject* obj = s->list + li;
1246  py::list frames;
1247  for (uint32_t oi = 0; oi < obj->numObj; oi++) {
1248  NvDsTargetMiscDataFrame* f = obj->list + oi;
1249  py::dict bbox;
1250  bbox["left"] = f->tBbox.left;
1251  bbox["top"] = f->tBbox.top;
1252  bbox["width"] = f->tBbox.width;
1253  bbox["height"] = f->tBbox.height;
1254  py::dict fd;
1255  fd["frame_num"] = f->frameNum;
1256  fd["bbox"] = bbox;
1257  fd["confidence"] = f->confidence;
1258  fd["age"] = f->age;
1259  fd["tracker_state"] = static_cast<int>(f->trackerState);
1260  fd["visibility"] = f->visibility;
1261  fd["world_foot_location"] = py::make_tuple(f->ptWorldFeet[0], f->ptWorldFeet[1]);
1262  frames.append(fd);
1263  }
1264  py::dict od;
1265  od["unique_id"] = obj->uniqueId;
1266  od["label"] = std::string(obj->objLabel);
1267  od["frames"] = frames;
1268  objects.append(od);
1269  }
1270  py::dict sd;
1271  sd["stream_id"] = s->streamID;
1272  sd["objects"] = objects;
1273  streams.append(sd);
1274  }
1275  return streams;
1276  });
1277 
1278 }
_NvOSD_TextParams::display_text
char * display_text
Holds the text to be overlayed.
Definition: includes/nvll_osd_struct.h:121
pydeepstreamdoc::nvmeta::BatchMetaDoc::acquire_obj_reid_meta
constexpr const char * acquire_obj_reid_meta
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:49
_NvOSD_LineParams
Holds the box parameters of a line to be overlayed.
Definition: includes/nvll_osd_struct.h:188
IteratorWrapper::operator*
T & operator*() const
Definition: service-maker/sources/python/src/bindings/metadata.h:33
pydeepstreamdoc::nvmeta::TensorOutputUserMetaDoc::get_layers
constexpr const char * get_layers
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:312
_NvDsTargetMiscDataObject::numObj
uint32_t numObj
Number of frames this target appreared in the past.
Definition: includes/nvds_tracker_meta.h:81
_NvOSD_RectParams
Holds the box parameters of the box to be overlayed.
Definition: includes/nvll_osd_struct.h:145
_NvDsObj3DBbox::xLen
float xLen
Definition: includes/nvds_tracker_meta.h:184
pydeepstreamdoc::nvmeta::BatchMetaDoc::acquire_event_message_meta
constexpr const char * acquire_event_message_meta
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:44
_NvOSD_MaskParams
Holds the mask parameters of the segment to be overlayed.
Definition: includes/nvll_osd_struct.h:177
_NvDsObj3DBbox::zVel
float zVel
Definition: includes/nvds_tracker_meta.h:194
pydeepstreamdoc::nvmeta::BatchMetaDoc::acquire_user_meta
constexpr const char * acquire_user_meta
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:46
pydeepstreamdoc::nvmeta::DisplayMetaDoc::add_rect
constexpr const char * add_rect
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:224
width
JDIMENSION JDIMENSION * width
Definition: sources/libs/nvll_batch_jpeg_encode/oss/jpeglib.h:1001
_NvOSD_RectParams::width
float width
Holds the box's width in pixels.
Definition: includes/nvll_osd_struct.h:152
pydeepstreamdoc::nvmeta::ObjectReidUserMetaDoc::set_feature_vector
constexpr const char * set_feature_vector
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:276
_NvDsTargetMiscDataStream
All misc targets data for a given stream.
Definition: includes/nvds_tracker_meta.h:96
pydeepstreamdoc::nvmeta::FrameMetaDoc::user_meta_items
constexpr const char * user_meta_items
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:113
pydeepstreamdoc::nvmeta::AudioFrameMetaDoc::append
constexpr const char * append
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:145
pydeepstreamdoc::nvmeta::UserMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:232
_NvDsTargetMiscDataBatch::list
NvDsTargetMiscDataStream * list
Pointer to array of stream lists.
Definition: includes/nvds_tracker_meta.h:116
module_metadata_bind
void module_metadata_bind(py::module &m)
Definition: service-maker/sources/python/src/bindings/metadata.h:455
_NvBbox_Coords::height
float height
Holds the box's height in pixels.
Definition: includes/nvll_osd_struct.h:80
_NvDsTargetMiscDataStream::streamID
uint32_t streamID
Stream id the same as frame_meta->pad_index.
Definition: includes/nvds_tracker_meta.h:101
_NvOSD_CircleParams
Holds circle parameters to be overlayed.
Definition: includes/nvll_osd_struct.h:231
pydeepstreamdoc::nvmeta::FrameMetaDoc::append
constexpr const char * append
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:112
pydeepstreamdoc::nvmeta::UserMetaDoc::as_tensor_output
constexpr const char * as_tensor_output
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:255
pydeepstreamdoc::nvmeta::DisplayMetaDoc::add_arrow
constexpr const char * add_arrow
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:226
pydeepstreamdoc::nvmeta::AnalyticsFrameMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:410
_NvOSD_FontParams::font_size
unsigned int font_size
Holds the size of the font.
Definition: includes/nvll_osd_struct.h:111
release_cstring_user_data
static void release_cstring_user_data(void *data, void *user_data)
Release function for C string user data.
Definition: service-maker/sources/python/src/bindings/metadata.h:445
_NvOSD_FontParams::font_name
char * font_name
Holds a pointer to the string containing the font name.
Definition: includes/nvll_osd_struct.h:104
pydeepstreamdoc::nvmeta::PreprocessBatchUserMetaDoc::set_preprocessed_tensor
constexpr const char * set_preprocessed_tensor
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:362
_NvDsObj3DBbox::xCentre
float xCentre
Centroid of the 3D bbox.
Definition: includes/nvds_tracker_meta.h:180
json
nlohmann::json json
Definition: sources/gst-plugins/gst-nvdsvideotemplate/ds-sparse4d/preprocess/calibration_parser.h:32
pydeepstreamdoc::nvmeta::EventMessageUserMetaDoc::generate
constexpr const char * generate
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:286
pydeepstreamdoc::nvmeta::DisplayMetaDoc::add_circle
constexpr const char * add_circle
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:227
pydeepstreamdoc::nvmeta::ObjectReidUserMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:266
pydeepstreamdoc::nvmeta::BatchMetaDoc::acquire_display_meta
constexpr const char * acquire_display_meta
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:41
_NvDsTargetMiscDataFrame::tBbox
NvOSD_RectParams tBbox
Bounding box.
Definition: includes/nvds_tracker_meta.h:58
pydeepstreamdoc::nvmeta::TensorOutputUserMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:308
_NvBbox_Coords::left
float left
Holds the box's left coordinate in pixels.
Definition: includes/nvll_osd_struct.h:72
_NvDsTargetMiscDataStream::list
NvDsTargetMiscDataObject * list
Pointer to targets inside this stream.
Definition: includes/nvds_tracker_meta.h:99
generate_usermeta_iterator
py::iterable generate_usermeta_iterator(META_CLS &metadata)
Definition: service-maker/sources/python/src/bindings/metadata.h:71
_NvDsTargetMiscDataObject::objLabel
char objLabel[MAX_LABEL_SIZE]
An array of the string describing the target class.
Definition: includes/nvds_tracker_meta.h:89
pydeepstreamdoc::nvmeta::FrameMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:93
pydeepstreamdoc::nvmeta::SegmentationUserMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:317
_NvDsUserMeta::user_meta_data
void * user_meta_data
Holds a pointer to user data to be attached.
Definition: includes/nvdsmeta.h:500
pydeepstreamdoc::nvmeta::UserMetaDoc::as_obj_reid
constexpr const char * as_obj_reid
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:261
pydeepstreamdoc::nvmeta::UserMetaDoc::as_nvdsanalytics_obj
constexpr const char * as_nvdsanalytics_obj
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:258
pydeepstreamdoc::nvmeta::PreprocessTensorMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:346
pydeepstreamdoc::nvmeta::LabelInfoDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:189
pydeepstreamdoc::nvmeta::BatchMetaDoc::user_meta_items
constexpr const char * user_meta_items
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:55
TensorWrapper
Definition: service-maker/sources/python/src/bindings/tensor.h:43
_NvDsTargetMiscDataFrame::trackerState
TRACKER_STATE trackerState
Curret Tracker State.
Definition: includes/nvds_tracker_meta.h:64
_NvOSD_TextParams::y_offset
unsigned int y_offset
Holds the text's vertical offset from the top left pixel of the frame.
Definition: includes/nvll_osd_struct.h:125
pydeepstreamdoc::nvmeta::EventMessageUserMetaDoc::generate_audio
constexpr const char * generate_audio
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:294
_NvDsTargetMiscDataFrame::confidence
float confidence
Tracking confidence.
Definition: includes/nvds_tracker_meta.h:60
pydeepstreamdoc::nvmeta::BatchMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:26
BBox::h
float h
Definition: service-maker/sources/python/src/bindings/metadata.h:25
_NvDsObj3DBbox::yRot
float yRot
Definition: includes/nvds_tracker_meta.h:189
_NvOSD_ArrowParams
Holds arrow parameters to be overlaid.
Definition: includes/nvll_osd_struct.h:207
pydeepstreamdoc::nvmeta::UserMetaDoc::as_segmentation
constexpr const char * as_segmentation
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:256
_NvOSD_MaskParams::data
float * data
Definition: includes/nvll_osd_struct.h:178
generate_iterator
py::iterable generate_iterator(META_CLS &metadata)
Definition: service-maker/sources/python/src/bindings/metadata.h:57
IteratorWrapper::operator++
IteratorWrapper & operator++()
Definition: service-maker/sources/python/src/bindings/metadata.h:37
_NvDsUserMeta
Holds user metadata.
Definition: includes/nvdsmeta.h:496
_NvOSD_MaskParams::size
unsigned int size
Mask buffer.
Definition: includes/nvll_osd_struct.h:179
_NvDsTargetMiscDataObject::uniqueId
uint64_t uniqueId
Target tracking id.
Definition: includes/nvds_tracker_meta.h:85
copy_cstring_user_data
static void * copy_cstring_user_data(void *data, void *user_data)
Copy function for C string user data.
Definition: service-maker/sources/python/src/bindings/metadata.h:435
_NvDsTargetMiscDataFrame::age
uint32_t age
Tracking age.
Definition: includes/nvds_tracker_meta.h:62
_NvDsObj3DBbox::zLen
float zLen
Definition: includes/nvds_tracker_meta.h:186
_NvDsObj3DBbox::yVel
float yVel
Definition: includes/nvds_tracker_meta.h:193
NVDSINFER_SEGMENTATION_META
@ NVDSINFER_SEGMENTATION_META
Specifies metadata type for segmentation model output attached by Gst-nvinfer.
Definition: includes/nvdsmeta.h:134
_NvOSD_MaskParams::width
unsigned int width
Threshold for binarization.
Definition: includes/nvll_osd_struct.h:181
_NvDsObj3DBbox::xRot
float xRot
Definition: includes/nvds_tracker_meta.h:188
pydeepstreamdoc::nvmeta::ClassifierMetaDoc::get_label
constexpr const char * get_label
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:210
pydeepstreamdoc::nvmeta::AudioFrameMetaDoc::user_meta_items
constexpr const char * user_meta_items
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:146
_NvDsTargetMiscDataStream::numFilled
uint32_t numFilled
Number of objects in this frame.
Definition: includes/nvds_tracker_meta.h:107
pydeepstreamdoc::nvmeta::BatchMetaDoc::acquire_frame_meta
constexpr const char * acquire_frame_meta
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:42
_NvBbox_Coords::width
float width
Holds the box's width in pixels.
Definition: includes/nvll_osd_struct.h:78
absl::move
constexpr absl::OTABSL_OPTION_NAMESPACE_NAME::remove_reference_t< T > && move(T &&t) noexcept
Definition: includes/opentelemetry/nostd/internal/absl/utility/utility.h:199
_NvOSD_TextParams::text_bg_clr
NvOSD_ColorParams text_bg_clr
Holds the text's background color, if specified.
Definition: includes/nvll_osd_struct.h:132
pydeepstreamdoc::nvmeta::ClassifierMetaDoc::classifier_type
constexpr const char * classifier_type
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:208
_NvDsTargetMiscDataFrame::frameNum
uint32_t frameNum
Frame number.
Definition: includes/nvds_tracker_meta.h:56
pydeepstreamdoc::nvmeta::BatchMetaDoc::acquire_object_meta
constexpr const char * acquire_object_meta
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:43
batch_metadata_extract
py::list batch_metadata_extract(BatchMetadata &self, unsigned int max_items)
Definition: service-maker/sources/python/src/bindings/metadata.h:235
IteratorWrapper::get
ITERATOR & get()
Definition: service-maker/sources/python/src/bindings/metadata.h:50
Text
Carrier class to handle string transfer.
Definition: service-maker/sources/python/src/bindings/osd.h:28
_NvOSD_RectParams::left
float left
Holds the box's left coordinate in pixels.
Definition: includes/nvll_osd_struct.h:146
_NvDsTargetMiscDataFrame
A single frame of misc data for a given Target.
Definition: includes/nvds_tracker_meta.h:53
pydeepstreamdoc::nvmeta::PreprocessBatchUserMetaDoc::extract
constexpr const char * extract
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:371
IteratorWrapper::IteratorWrapper
IteratorWrapper()
Definition: service-maker/sources/python/src/bindings/metadata.h:31
_NvOSD_MaskParams::height
unsigned int height
Mask width.
Definition: includes/nvll_osd_struct.h:182
_NvDsTargetMiscDataFrame::ptWorldFeet
float ptWorldFeet[2]
Feet location of the object on the world ground.
Definition: includes/nvds_tracker_meta.h:68
IteratorWrapper
Definition: service-maker/sources/python/src/bindings/metadata.h:29
pydeepstreamdoc::tensor::TensorDoc::size
constexpr const char * size
Definition: service-maker/sources/python/src/bindings/docstrings/tensordoc.h:46
GValue
struct _GValue GValue
Definition: service-maker/includes/object.hpp:38
pydeepstreamdoc::nvmeta::ObjectMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:155
pydeepstreamdoc::nvmeta::AnalyticsObjInfoDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:396
_NvOSD_TextParams::x_offset
unsigned int x_offset
Holds the text's horizontal offset from the top left pixel of the frame.
Definition: includes/nvll_osd_struct.h:123
_NvOSD_TextParams::font_params
NvOSD_FontParams font_params
Holds the font parameters of the text to be overlaid.
Definition: includes/nvll_osd_struct.h:127
pydeepstreamdoc::nvmeta::UserMetaDoc::as_nvdsanalytics_frame
constexpr const char * as_nvdsanalytics_frame
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:259
pydeepstreamdoc::nvmeta::BatchMetaDoc::append
constexpr const char * append
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:63
pydeepstreamdoc::nvmeta::DisplayMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:215
retrieve_structure_usermeta
std::vector< deepstream::UserMetadata > retrieve_structure_usermeta(META_CLS &self, const std::string &type_name)
Definition: service-maker/sources/python/src/bindings/metadata.h:85
pydeepstreamdoc::nvmeta::AudioFrameMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:125
pydeepstreamdoc::nvmeta::ObjectMetaDoc::user_meta_items
constexpr const char * user_meta_items
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:177
preprocess_batch_metadata_extract
py::list preprocess_batch_metadata_extract(PreprocessBatchUserMetadata &self, unsigned int max_items)
Definition: service-maker/sources/python/src/bindings/metadata.h:101
_NvDsTargetMiscDataFrame::visibility
float visibility
bbox visibility with respect to the image border
Definition: includes/nvds_tracker_meta.h:66
pydeepstreamdoc::nvmeta::EventMessageUserMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:284
pydeepstreamdoc::nvmeta::ClassifierMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:201
pydeepstreamdoc::nvmeta::UserMetaDoc::set_user_data_json
constexpr const char * set_user_data_json
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:236
_NvDsTargetMiscDataObject::list
NvDsTargetMiscDataFrame * list
Pointer to a list per-frame information of the target.
Definition: includes/nvds_tracker_meta.h:79
_NvOSD_TextParams
Holds parameters of text to be overlayed.
Definition: includes/nvll_osd_struct.h:120
BBox::w
float w
Definition: service-maker/sources/python/src/bindings/metadata.h:24
pydeepstreamdoc::nvmeta::PreprocessBatchUserMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:356
_NvOSD_RectParams::height
float height
Holds the box's height in pixels.
Definition: includes/nvll_osd_struct.h:154
pydeepstreamdoc::nvmeta::ObjectMetaDoc::append
constexpr const char * append
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:176
_NvDsTargetMiscDataBatch
Batch of all streams of a given target misc output.
Definition: includes/nvds_tracker_meta.h:113
pydeepstreamdoc::nvmeta::RoiMetaDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:330
IteratorWrapper::operator==
bool operator==(const IteratorWrapper &other) const
Definition: service-maker/sources/python/src/bindings/metadata.h:46
_NvDsObj3DBbox
Holds 3D bbox information for an object.
Definition: includes/nvds_tracker_meta.h:177
pydeepstreamdoc::nvmeta::BatchMetaDoc::extract
constexpr const char * extract
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:64
BBox::y
float y
Definition: service-maker/sources/python/src/bindings/metadata.h:23
NVDS_START_USER_META
@ NVDS_START_USER_META
Start adding user specific meta types from here.
Definition: includes/nvdsmeta.h:197
pydeepstreamdoc::nvmeta::DisplayMetaDoc::add_line
constexpr const char * add_line
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:225
TensorWrapper::release
Tensor * release()
Definition: service-maker/sources/python/src/bindings/tensor.h:238
_NvDsObj3DBbox::zCentre
float zCentre
Definition: includes/nvds_tracker_meta.h:182
_NvDsObj3DBbox::yLen
float yLen
Definition: includes/nvds_tracker_meta.h:185
_NvDsObj3DBbox::xVel
float xVel
Definition: includes/nvds_tracker_meta.h:192
pydeepstreamdoc::nvmeta::UserMetaDoc::as_preprocess_batch
constexpr const char * as_preprocess_batch
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:257
data
JSAMPIMAGE data
Definition: sources/libs/nvll_batch_jpeg_encode/oss/jpeglib.h:967
pydeepstreamdoc::nvmeta::UserMetaDoc::get_user_data_json
constexpr const char * get_user_data_json
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:249
_NvDsObj3DBbox::zRot
float zRot
Definition: includes/nvds_tracker_meta.h:190
pydeepstreamdoc::nvmeta::DisplayMetaDoc::add_text
constexpr const char * add_text
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:223
_NvBbox_Coords::top
float top
Holds the box's top coordinate in pixels.
Definition: includes/nvll_osd_struct.h:75
BBox::x
float x
Definition: service-maker/sources/python/src/bindings/metadata.h:22
_NvOSD_RectParams::top
float top
Holds the box's top coordinate in pixels.
Definition: includes/nvll_osd_struct.h:149
pydeepstreamdoc::nvmeta::BatchMetaDoc::acquire_preprocess_batch_meta
constexpr const char * acquire_preprocess_batch_meta
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:45
IteratorWrapper::operator!=
bool operator!=(const IteratorWrapper &other) const
Definition: service-maker/sources/python/src/bindings/metadata.h:42
_NvBbox_Coords
Holds unclipped bounding box coordinates of the object.
Definition: includes/nvll_osd_struct.h:71
pydeepstreamdoc::nvmeta::ClassifierMetaDoc::get_label_info
constexpr const char * get_label_info
Definition: service-maker/sources/python/src/bindings/docstrings/metadatadoc.h:209
_NvDsTargetMiscDataBatch::numFilled
uint32_t numFilled
Number of filled blocks in the list.
Definition: includes/nvds_tracker_meta.h:120
IteratorWrapper::iterator_
ITERATOR iterator_
Definition: service-maker/sources/python/src/bindings/metadata.h:53
BBox
Holds the bounding box co-ordindates.
Definition: service-maker/sources/python/src/bindings/metadata.h:21
_NvDsTargetMiscDataObject
All misc data output for a single target.
Definition: includes/nvds_tracker_meta.h:76
pydeepstreamdoc::osd::ArrowHeadDoc::end
constexpr const char * end
Definition: service-maker/sources/python/src/bindings/docstrings/osddoc.h:34
audio_batch_metadata_extract
py::list audio_batch_metadata_extract(BatchMetadata &self, unsigned int max_items)
Definition: service-maker/sources/python/src/bindings/metadata.h:365
_NvDsObj3DBbox::yCentre
float yCentre
Definition: includes/nvds_tracker_meta.h:181