NVIDIA DeepStream SDK API Reference

8.0 Release
add_message_meta_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 <iostream>
14 #include <string>
15 #include <memory>
16 #include <vector>
17 #include <fstream>
18 #include <algorithm> // for std::transform
19 #include <cctype> // for std::tolower
20 
21 #include "buffer_probe.hpp"
22 #include "source_config.hpp"
23 
24 namespace deepstream {
25 
26  static std::vector<std::string> parse_labels(const std::string& filename) {
27  std::ifstream file(filename); // Open the file
28  std::vector<std::string> lines; // Vector to store lines
29 
30  if (file.is_open()) { // Check if the file is open
31  std::string line;
32  while (std::getline(file, line)) { // Read each line
33  std::string result=line;
34  std::transform(line.begin(), line.end(), result.begin(), [](unsigned char c){ return std::tolower(c); });
35  lines.push_back(result); // Store the line in the vector
36  }
37  file.close(); // Close the file
38  } else {
39  std::cerr << "Unable to open file: " << filename << std::endl;
40  }
41 
42  return lines;
43  }
44 
46 public:
48  virtual ~MsgMetaGenerator() {}
49 
51  // Initialize only once
52  if (!initialized_) {
53  probe.getProperty("frame-interval", frame_interval);
54  std::string source_config;
55  probe.getProperty("source-config", source_config);
56  std::string label_file;
57  probe.getProperty("label-file", label_file);
58 
59  if (!source_config.empty()) {
60  SourceConfig source_config_obj(source_config);
61  for (size_t i = 0; i < source_config_obj.nSources(); i++) {
62  // multiple sources added
63  std::string src_name = "src_";
64  src_name += std::to_string(i);
65  std::string uri = source_config_obj.getSensorInfo(i).uri;
66  std::string sensor_id = source_config_obj.getSensorInfo(i).sensor_id;
67  sensor_map_[i] = SensorInfo{uri, sensor_id, src_name};
68  }
69  }
70 
71  if (!label_file.empty()) {
72  labels_ = parse_labels(label_file);
73  }
74 
75  initialized_ = true;
76  }
77 
78  FrameMetadata::Iterator frame_itr;
79  for (data.initiateIterator(frame_itr); !frame_itr->done(); frame_itr->next())
80  {
82  for ((*frame_itr)->initiateIterator(obj_itr); !obj_itr->done(); obj_itr->next()) {
83  if (frames_ % frame_interval == 0)
84  {
85  EventMessageUserMetadata event_user_meta;
86  if (data.acquire(event_user_meta)) {
87  if(sensor_map_.empty()) {
88  event_user_meta.generate(**obj_itr, **frame_itr, "N/A", "N/A", labels_);
89  (*frame_itr)->append(event_user_meta);
90  } else {
91  auto source_id = (*frame_itr)->sourceId();
92  auto itr = sensor_map_.find(source_id);
93  if (itr != sensor_map_.end()) {
94  const std::string sensor = itr->second.sensor_id;
95  const std::string uri = itr->second.uri;
96  event_user_meta.generate(**obj_itr, **frame_itr, sensor, uri, labels_);
97  (*frame_itr)->append(event_user_meta);
98  }
99  }
100  }
101  }
102  }
103  frames_++;
104  }
105 
106  return probeReturn::Probe_Ok;
107  }
108 
109  protected:
110  int frames_ = 0;
111  int frame_interval = 1;
112  std::map<uint32_t, SensorInfo> sensor_map_;
113  std::vector<std::string> labels_;
115 };
116 
117 }
buffer_probe.hpp
deepstream::probeReturn::Probe_Ok
@ Probe_Ok
Nothing abnormal, the buffer will be treated as usual.
deepstream::MsgMetaGenerator::sensor_map_
std::map< uint32_t, SensorInfo > sensor_map_
Definition: add_message_meta_probe.hpp:112
deepstream::MsgMetaGenerator
Definition: add_message_meta_probe.hpp:45
deepstream::ObjectMetadata::Iterator
std::unique_ptr< AbstractIterator< ObjectMetadata > > Iterator
Definition: metadata.hpp:157
deepstream::SensorInfo::uri
std::string uri
Definition: source_config.hpp:31
deepstream::SourceConfig::getSensorInfo
SensorInfo getSensorInfo(uint32_t index) const
Get sensor information for a specific source.
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
deepstream::MsgMetaGenerator::~MsgMetaGenerator
virtual ~MsgMetaGenerator()
Definition: add_message_meta_probe.hpp:48
deepstream::MsgMetaGenerator::frames_
int frames_
Definition: add_message_meta_probe.hpp:110
deepstream::MsgMetaGenerator::frame_interval
int frame_interval
Definition: add_message_meta_probe.hpp:111
deepstream::parse_labels
static std::vector< std::string > parse_labels(const std::string &filename)
Definition: add_message_meta_probe.hpp:26
deepstream::EventMessageUserMetadata
User metadata for event message.
Definition: metadata.hpp:222
deepstream::probeReturn
probeReturn
Return values from user implemented probe interfaces.
Definition: buffer_probe.hpp:42
deepstream::MsgMetaGenerator::MsgMetaGenerator
MsgMetaGenerator()
Definition: add_message_meta_probe.hpp:47
deepstream::MsgMetaGenerator::handleData
virtual probeReturn handleData(BufferProbe &probe, BatchMetadata &data)
Definition: add_message_meta_probe.hpp:50
deepstream
Definition: buffer.hpp:33
deepstream::BatchMetadata::initiateIterator
void initiateIterator(FrameMetadata::Iterator &) const
Get the iterator for frame metadata within it.
deepstream::MsgMetaGenerator::labels_
std::vector< std::string > labels_
Definition: add_message_meta_probe.hpp:113
deepstream::BatchMetadata
Holds information about a formed batch containingframes from different sources.
Definition: metadata.hpp:652
deepstream::MsgMetaGenerator::initialized_
bool initialized_
Definition: add_message_meta_probe.hpp:114
deepstream::SourceConfig::nSources
uint32_t nSources() const
Get the number of the sources.
deepstream::FrameMetadata::Iterator
std::unique_ptr< AbstractIterator< FrameMetadata > > Iterator
Definition: metadata.hpp:419
deepstream::SensorInfo::sensor_id
std::string sensor_id
Definition: source_config.hpp:32
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::SensorInfo
Definition: source_config.hpp:29
source_config.hpp
deepstream::SourceConfig
Definition: source_config.hpp:56
deepstream::BatchMetadata::acquire
bool acquire(DisplayMetadata &)
Initialize an empty display metadata.
deepstream::Object::getProperty
Object & getProperty(const std::string &name, T &value, Args &... args)
Template for getting multiple properties.
Definition: object.hpp:171