NVIDIA DeepStream SDK API Reference

8.0 Release
kitti_dump_probe.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: LicenseRef-NvidiaProprietary
4  *
5  * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
6  * property and proprietary rights in and to this material, related
7  * documentation and any modifications thereto. Any use, reproduction,
8  * disclosure or distribution of this material and related documentation
9  * without an express license agreement from NVIDIA CORPORATION or
10  * its affiliates is strictly prohibited.
11  */
12 
13 #include <string>
14 #include <sys/stat.h>
15 #include <fstream>
16 
17 #include "buffer_probe.hpp"
18 
19 #define UNTRACKED_OBJECT_ID 0xFFFFFFFFFFFFFFFF
20 
21 #define NVDS_OBJ_VISIBILITY 20
22 #define NVDS_OBJ_IMAGE_FOOT_LOCATION 21
23 #define NVDS_TRACKER_PAST_FRAME_META 15
24 
25 namespace deepstream {
27  public:
28  void generateInferenceKittiDump(BatchMetadata& data, std::string output_dir) {
29  char bbox_file[1024] = {0};
30  FILE *bbox_params_dump_file = NULL;
31  FrameMetadata::Iterator frame_itr;
32  for (data.initiateIterator(frame_itr); !frame_itr->done(); frame_itr->next()) {
33  uint stream_id = (*frame_itr)->padIndex();
34  snprintf(bbox_file, sizeof(bbox_file) - 1, "%s/%03u_%06lu.txt",
35  output_dir.c_str(), stream_id,
36  (ulong)(*frame_itr)->frameNum());
37  bbox_params_dump_file = fopen(bbox_file, "w");
38  if (!bbox_params_dump_file) continue;
39 
40  FrameMetadata& frame_meta = frame_itr->get();
42 
43  for (frame_meta.initiateIterator(obj_itr); !obj_itr->done(); obj_itr->next()) {
44  ObjectMetadata& object_meta = obj_itr->get();
45  float confidence = object_meta.confidence();
46  float left = object_meta.rectParams().left;
47  float top = object_meta.rectParams().top;
48  float right = left + object_meta.rectParams().width;
49  float bottom = top + object_meta.rectParams().height;
50 
51  if (object_meta.objectId() == UNTRACKED_OBJECT_ID) {
52  fprintf(bbox_params_dump_file,
53  "%s 0.0 0 0.0 %f %f %f %f 0.0 0.0 0.0 0.0 0.0 0.0 0.0 %f\n",
54  object_meta.label().c_str(), left, top, right, bottom, confidence);
55  } else {
56  fprintf(bbox_params_dump_file,
57  "%s %lu 0.0 0 0.0 %f %f %f %f 0.0 0.0 0.0 0.0 0.0 0.0 0.0 %f\n",
58  object_meta.label().c_str(), object_meta.objectId(), left, top, right, bottom,
59  confidence);
60  }
61  }
62  fclose(bbox_params_dump_file);
63  }
64  }
65 
66  void generateTrackerKittiDump(BatchMetadata& data, std::string output_dir) {
67  char bbox_file[1024] = {0};
68  FILE *bbox_params_dump_file = NULL;
69  FrameMetadata::Iterator frame_itr;
70  for (data.initiateIterator(frame_itr); !frame_itr->done(); frame_itr->next()) {
71  uint stream_id = (*frame_itr)->padIndex();
72  snprintf(bbox_file, sizeof(bbox_file) - 1, "%s/%03u_%06lu.txt",
73  output_dir.c_str(), stream_id,
74  (ulong)(*frame_itr)->frameNum());
75  bbox_params_dump_file = fopen(bbox_file, "w");
76  if (!bbox_params_dump_file) continue;
77 
78  FrameMetadata& frame_meta = frame_itr->get();
80 
81  for (frame_meta.initiateIterator(obj_itr); !obj_itr->done(); obj_itr->next()) {
82  ObjectMetadata& object_meta = obj_itr->get();
83  float confidence = object_meta.trackerConfidence();
84  uint64_t id = object_meta.objectId();
85  bool write_proj_info = false;
86  float visibility = -1.0, x_img_foot = -1.0, y_img_foot = -1.0;
87 
88  float left = object_meta.nvBboxInfo().left;
89  float top = object_meta.nvBboxInfo().top;
90  float right = left + object_meta.nvBboxInfo().width;
91  float bottom = top + object_meta.nvBboxInfo().height;
92 
93  object_meta.iterate([&visibility, &write_proj_info](const UserMetadata& user_meta) {
94  ObjectVisibilityUserMetadata visibility_meta(user_meta);
95  visibility = visibility_meta.getVisibility();
96  write_proj_info = true;
98 
99  object_meta.iterate([&x_img_foot, &y_img_foot, &write_proj_info](const UserMetadata& user_meta) {
100  ObjectImageFootLocationUserMetadata foot_meta(user_meta);
101  x_img_foot = foot_meta.getImageFootLocation().first;
102  y_img_foot = foot_meta.getImageFootLocation().second;
103  write_proj_info = true;
105 
106 
107  if (write_proj_info)
108  {
109  fprintf (bbox_params_dump_file,
110  "%s %lu 0.0 0 0.0 %f %f %f %f 0.0 0.0 0.0 0.0 0.0 0.0 0.0 %f %f %f %f\n",
111  object_meta.label().c_str(), id, left, top, right, bottom, confidence, visibility, x_img_foot, y_img_foot);
112  }
113  else
114  {
115  fprintf (bbox_params_dump_file,
116  "%s %lu 0.0 0 0.0 %f %f %f %f 0.0 0.0 0.0 0.0 0.0 0.0 0.0 %f\n",
117  object_meta.label().c_str(), id, left, top, right, bottom, confidence);
118  }
119  }
120  fclose(bbox_params_dump_file);
121  }
122  }
123 
124  void generateTrackerPastKittiDump(BatchMetadata& data, std::string output_dir) {
125  data.iterate([&output_dir](const UserMetadata &user_meta) {
126  TrackerPastFrameUserMetadata past_frame_meta(user_meta);
127  NvDsTargetMiscDataBatch* pPastFrameObjBatch = past_frame_meta.getTrackerMiscDataBatch();
128 
129  if (!pPastFrameObjBatch) {
130  return; // Skip if batch is null
131  }
132 
133  for (uint si = 0; si < pPastFrameObjBatch->numFilled; si++) {
134  NvDsTargetMiscDataStream *objStream = (pPastFrameObjBatch->list) + si;
135  uint stream_id = (uint) (objStream->streamID);
136  for (uint li = 0; li < objStream->numFilled; li++) {
137  NvDsTargetMiscDataObject *objList = (objStream->list) + li;
138  for (uint oi = 0; oi < objList->numObj; oi++) {
139  NvDsTargetMiscDataFrame *obj = (objList->list) + oi;
140 
141  char bbox_file[1024] = { 0 };
142  snprintf(bbox_file, sizeof(bbox_file) - 1, "%s/%03u_%06lu.txt",
143  output_dir.c_str(), stream_id, (ulong)obj->frameNum);
144 
145  float left = obj->tBbox.left;
146  float right = left + obj->tBbox.width;
147  float top = obj->tBbox.top;
148  float bottom = top + obj->tBbox.height;
149  // Past frame object confidence given by tracker
150  float confidence = obj->confidence;
151 
152  FILE *bbox_params_dump_file = fopen(bbox_file, "a");
153  if (!bbox_params_dump_file) {
154  continue; // Skip this iteration if file open fails
155  }
156 
157  fprintf(bbox_params_dump_file,
158  "%s %lu 0.0 0 0.0 %f %f %f %f 0.0 0.0 0.0 0.0 0.0 0.0 0.0 %f\n",
159  objList->objLabel, objList->uniqueId, left, top, right, bottom,
160  confidence);
161  fclose(bbox_params_dump_file);
162  }
163  }
164  }
166  }
167 
170  std::string output_dir = "/tmp/kitti/";
171  probe.getProperty("kitti-dir", output_dir);
172 
173  bool tracker_kitti_output = false;
174  probe.getProperty("tracker-kitti-output", tracker_kitti_output);
175 
176  if (tracker_kitti_output) {
177  generateTrackerKittiDump(data, output_dir);
178  generateTrackerPastKittiDump(data, output_dir);
179  } else {
180  generateInferenceKittiDump(data, output_dir);
181  }
182 
183  return probeReturn::Probe_Ok;
184  }
185  };
186 
187 }
188 
buffer_probe.hpp
deepstream::probeReturn::Probe_Ok
@ Probe_Ok
Nothing abnormal, the buffer will be treated as usual.
deepstream::NvDsKittiDump::generateTrackerPastKittiDump
void generateTrackerPastKittiDump(BatchMetadata &data, std::string output_dir)
Definition: kitti_dump_probe.hpp:124
_NvDsTargetMiscDataObject::objLabel
char objLabel[MAX_LABEL_SIZE]
An array of the string describing the target class.
Definition: nvds_tracker_meta.h:81
_NvDsTargetMiscDataObject::numObj
uint32_t numObj
Number of frames this target appreared in the past.
Definition: nvds_tracker_meta.h:73
deepstream::ObjectMetadata::iterate
unsigned int iterate(const std::function< void(const ClassifierMetadata &)> &func) const
Iterate the classifier metadata within it.
NVDS_OBJ_VISIBILITY
#define NVDS_OBJ_VISIBILITY
Definition: kitti_dump_probe.hpp:21
deepstream::ObjectMetadata::Iterator
std::unique_ptr< AbstractIterator< ObjectMetadata > > Iterator
Definition: metadata.hpp:157
_NvOSD_RectParams::width
float width
Holds the box's width in pixels.
Definition: nvll_osd_struct.h:147
_NvDsTargetMiscDataStream
All misc targets data for a given stream.
Definition: nvds_tracker_meta.h:88
deepstream::ObjectVisibilityUserMetadata::getVisibility
float getVisibility() const
Get the visibility of the object.
UNTRACKED_OBJECT_ID
#define UNTRACKED_OBJECT_ID
Definition: kitti_dump_probe.hpp:19
deepstream::ObjectMetadata::objectId
unsigned long int objectId() const
Number to identify the object which is tracked in the scene.
_NvBbox_Coords::height
float height
Holds the box's height in pixels.
Definition: nvll_osd_struct.h:75
NVDS_TRACKER_PAST_FRAME_META
#define NVDS_TRACKER_PAST_FRAME_META
Definition: kitti_dump_probe.hpp:23
_NvDsTargetMiscDataStream::streamID
uint32_t streamID
Stream id the same as frame_meta->pad_index.
Definition: nvds_tracker_meta.h:93
deepstream::BufferProbe
Represent a custom object for the purpose of probing output buffers.
Definition: buffer_probe.hpp:58
deepstream::BufferProbe::IBatchMetadataOperator
Read/write interface for handling batch metadata.
Definition: buffer_probe.hpp:111
NVDS_OBJ_IMAGE_FOOT_LOCATION
#define NVDS_OBJ_IMAGE_FOOT_LOCATION
Definition: kitti_dump_probe.hpp:22
_NvDsTargetMiscDataFrame::tBbox
NvOSD_RectParams tBbox
Bounding box.
Definition: nvds_tracker_meta.h:52
_NvBbox_Coords::left
float left
Holds the box's left coordinate in pixels.
Definition: nvll_osd_struct.h:67
deepstream::NvDsKittiDump::generateTrackerKittiDump
void generateTrackerKittiDump(BatchMetadata &data, std::string output_dir)
Definition: kitti_dump_probe.hpp:66
_NvDsTargetMiscDataBatch::list
NvDsTargetMiscDataStream * list
Pointer to array of stream lists.
Definition: nvds_tracker_meta.h:108
_NvDsTargetMiscDataFrame::confidence
float confidence
Tracking confidence.
Definition: nvds_tracker_meta.h:54
deepstream::BatchMetadata::iterate
unsigned int iterate(const std::function< void(const FrameMetadata &)> &func) const
Iterate the frame metadata within it.
deepstream::ObjectMetadata::nvBboxInfo
NvBbox_Coords & nvBboxInfo() const
Bounding box of the object.
deepstream::NvDsKittiDump::generateInferenceKittiDump
void generateInferenceKittiDump(BatchMetadata &data, std::string output_dir)
Definition: kitti_dump_probe.hpp:28
deepstream::FrameMetadata::initiateIterator
void initiateIterator(ObjectMetadata::Iterator &) const
Get the iterator for object metadata within it.
deepstream::ObjectImageFootLocationUserMetadata
Definition: metadata.hpp:541
_NvDsTargetMiscDataObject::uniqueId
uint64_t uniqueId
Target tracking id.
Definition: nvds_tracker_meta.h:77
deepstream::NvDsKittiDump
Definition: kitti_dump_probe.hpp:26
deepstream::ObjectMetadata
Object metadata.
Definition: metadata.hpp:155
deepstream::probeReturn
probeReturn
Return values from user implemented probe interfaces.
Definition: buffer_probe.hpp:42
deepstream
Definition: buffer.hpp:33
_NvDsTargetMiscDataStream::numFilled
uint32_t numFilled
Number of objects in this frame.
Definition: nvds_tracker_meta.h:99
deepstream::TrackerPastFrameUserMetadata
Definition: metadata.hpp:559
deepstream::BatchMetadata::initiateIterator
void initiateIterator(FrameMetadata::Iterator &) const
Get the iterator for frame metadata within it.
_NvBbox_Coords::width
float width
Holds the box's width in pixels.
Definition: nvll_osd_struct.h:73
_NvDsTargetMiscDataFrame::frameNum
uint32_t frameNum
Frame number.
Definition: nvds_tracker_meta.h:50
_NvDsTargetMiscDataStream::list
NvDsTargetMiscDataObject * list
Pointer to targets inside this stream.
Definition: nvds_tracker_meta.h:91
deepstream::BatchMetadata
Holds information about a formed batch containingframes from different sources.
Definition: metadata.hpp:652
_NvOSD_RectParams::left
float left
Holds the box's left coordinate in pixels.
Definition: nvll_osd_struct.h:141
_NvDsTargetMiscDataFrame
A single frame of misc data for a given Target.
Definition: nvds_tracker_meta.h:47
deepstream::NvDsKittiDump::NvDsKittiDump
NvDsKittiDump()
Definition: kitti_dump_probe.hpp:168
deepstream::FrameMetadata::Iterator
std::unique_ptr< AbstractIterator< FrameMetadata > > Iterator
Definition: metadata.hpp:419
deepstream::UserMetadata
Base class of user defined metadata.
Definition: metadata.hpp:101
deepstream::ObjectMetadata::label
std::string label() const
A string to describe the object class.
deepstream::ObjectImageFootLocationUserMetadata::getImageFootLocation
std::pair< float, float > getImageFootLocation() const
Get the image foot location of the object.
deepstream::NvDsKittiDump::handleData
virtual probeReturn handleData(BufferProbe &probe, BatchMetadata &data)
Definition: kitti_dump_probe.hpp:169
_NvOSD_RectParams::height
float height
Holds the box's height in pixels.
Definition: nvll_osd_struct.h:149
_NvDsTargetMiscDataObject::list
NvDsTargetMiscDataFrame * list
Pointer to a list per-frame information of the target.
Definition: nvds_tracker_meta.h:71
deepstream::ObjectVisibilityUserMetadata
Definition: metadata.hpp:531
_NvDsTargetMiscDataBatch
Batch of all streams of a given target misc output.
Definition: nvds_tracker_meta.h:105
deepstream::TrackerPastFrameUserMetadata::getTrackerMiscDataBatch
NvDsTargetMiscDataBatch * getTrackerMiscDataBatch() const
deepstream::ObjectMetadata::trackerConfidence
float trackerConfidence() const
Confidence level from tracker.
_NvBbox_Coords::top
float top
Holds the box's top coordinate in pixels.
Definition: nvll_osd_struct.h:70
_NvOSD_RectParams::top
float top
Holds the box's top coordinate in pixels.
Definition: nvll_osd_struct.h:144
deepstream::ObjectMetadata::confidence
float confidence() const
Confidence level.
deepstream::ObjectMetadata::rectParams
NvOSD_RectParams & rectParams() const
Bounding box of the object.
deepstream::Object::getProperty
Object & getProperty(const std::string &name, T &value, Args &... args)
Template for getting multiple properties.
Definition: object.hpp:171
_NvDsTargetMiscDataBatch::numFilled
uint32_t numFilled
Number of filled blocks in the list.
Definition: nvds_tracker_meta.h:112
deepstream::FrameMetadata
Holds information for a single frame.
Definition: metadata.hpp:417
_NvDsTargetMiscDataObject
All misc data output for a single target.
Definition: nvds_tracker_meta.h:68