Create nvmsgconv

This commit is contained in:
Barzan Hayati 2025-09-07 18:47:46 +00:00
parent 47ce8c5fa8
commit 056676b3d8
7 changed files with 110 additions and 2 deletions

View File

@ -81,6 +81,7 @@ include_directories(${PROJECT_SOURCE_DIR}/nv_tracker_manager.hpp)
include_directories(${PROJECT_SOURCE_DIR}/face_candid_trace.hpp) include_directories(${PROJECT_SOURCE_DIR}/face_candid_trace.hpp)
include_directories(${PROJECT_SOURCE_DIR}/face_nv_infer_server_manager.hpp) include_directories(${PROJECT_SOURCE_DIR}/face_nv_infer_server_manager.hpp)
include_directories(${PROJECT_SOURCE_DIR}/face_nv_infer_server_manager.hpp) include_directories(${PROJECT_SOURCE_DIR}/face_nv_infer_server_manager.hpp)
include_directories(${PROJECT_SOURCE_DIR}/nv_messgae_converter.hpp)
set(SOURCES src/main.cpp src/camera_manager.cpp src/pipeline_manager.cpp src/streammux_manager.cpp set(SOURCES src/main.cpp src/camera_manager.cpp src/pipeline_manager.cpp src/streammux_manager.cpp
@ -91,7 +92,8 @@ set(SOURCES src/main.cpp src/camera_manager.cpp src/pipeline_manager.cpp src/st
# src/metrics_manager.cpp # src/metrics_manager.cpp
src/config_manager.cpp src/config_manager.cpp
src/nv_infer_server_manager.cpp src/nv_tracker_manager.cpp src/face_candid_trace.cpp src/nv_infer_server_manager.cpp src/nv_tracker_manager.cpp src/face_candid_trace.cpp
src/face_nv_infer_server_manager.cpp src/face_nv_infer_server_manager.cpp) src/face_nv_infer_server_manager.cpp src/face_nv_infer_server_manager.cpp
src/nv_messgae_converter.cpp)
# missing initializer for member 'NvDsInferDims::d' [-Werror=missing-field-initializers] NvDsInferDims dims = {0}; # missing initializer for member 'NvDsInferDims::d' [-Werror=missing-field-initializers] NvDsInferDims dims = {0};

View File

@ -53,5 +53,7 @@
"max-latency": 1000000, "max-latency": 1000000,
"num-extra-surfaces": 1, "num-extra-surfaces": 1,
"num-surfaces-per-frame": 0 "num-surfaces-per-frame": 0
} },
"msgconv_config_file": "../data/nvmsgconv_configs/msgconv_config.txt",
"msgconv_frame_interval": 30
} }

View File

@ -0,0 +1,30 @@
[schema]
version=1
message.schema=1.0
message.type=object
[message]
#payload-type=1
msg2p-newapi=0
topic=face_topic
type=object
[sensor0]
enable=1
type=Camera
id=CAMERA_ID
location=45.29;-75.83;48.15
description=Entrance camera
[place0]
enable=1
id=main_lobby
name=Lobby Entrance
type=building
location=45.29;-75.83;48.15
[analytics0]
enable=1
id=analytics_face
description=Face detection
source=fr_module

View File

@ -0,0 +1,53 @@
#include "nv_messgae_converter.hpp"
#define SET_GPU_ID(object, gpu_id) \
g_object_set(G_OBJECT(object), "gpu-id", gpu_id, NULL);
#define GPU_ID 0
NvMessageConverter::NvMessageConverter() {
const auto& config = ConfigManager::get_instance().get_config();
msgconv_config_file = config["msgconv_config_file"];
frame_interval = config["msgconv_frame_interval"];
}
bool NvMessageConverter::create_message_converter() {
msgconv = gst_element_factory_make("nvmsgconv", "nvmsg-converter");
g_object_set(G_OBJECT(msgconv), "config", msgconv_config_file, NULL);
g_object_set(G_OBJECT(msgconv), "payload-type", 0,
NULL); // 0 = DeepStream schema, 1 = minimal schema
g_object_set(G_OBJECT(msgconv), "msg2p-newapi", 0,
NULL); // use new API; If you want to send images, please set
// the "payload-type: 1" and "msg2p-newapi: 1"
// msg2p-newapi: TRUE for DeepStream 6.x+ (recommended).
g_object_set(G_OBJECT(msgconv), "frame-interval", frame_interval, NULL);
SET_GPU_ID(msgconv, GPU_ID);
// g_object_set(G_OBJECT(msgconv),
// "config", "dstest5_msgconv.cfg", // message schema config
// file "payload-type", 0, "msg2p-newapi", TRUE, //
// use new API NULL);
// g_object_set (G_OBJECT (msgconv), "config", "dstest4_msgconv_config.yml",
// NULL); RETURN_ON_PARSER_ERROR(nvds_parse_msgconv (msgconv, argv[1],
// "msgconv")); msg2p_meta = ds_test4_parse_meta_type(argv[1], "msgconv");
// g_print("msg2p_meta = %d\n", msg2p_meta);
// Set up the pipeline we add all elements into the pipeline
// gst_bin_add_many (GST_BIN (pipeline),
// source, h264parser, decoder, nvstreammux, pgie,
// nvvidconv, nvosd, tee, queue1, queue2, msgconv, msgbroker, sink,
// NULL);
// /* we link the elements together */
// /* file-source -> h264-parser -> nvh264-decoder -> nvstreammux ->
// * pgie -> nvvidconv -> nvosd -> tee -> video-renderer
// * |
// * |-> msgconv -> msgbroker */
if (!msgconv) {
g_printerr("Unable to create msgconv.Exiting.");
return false;
}
return true;
}

View File

@ -0,0 +1,17 @@
#include <gst/gst.h>
#include <fstream>
#include <iostream>
#include "config_manager.hpp"
class NvMessageConverter {
private:
public:
gint frame_interval;
GstElement *msgconv = NULL;
std::string msgconv_config_file;
NvMessageConverter();
bool create_message_converter();
~NvMessageConverter();
};

View File

@ -434,6 +434,8 @@ bool PipelineManager::create_pipeline_elements(int num_sources,
nv_video_convert_manager->create_nv_video_convert(); nv_video_convert_manager->create_nv_video_convert();
nv_osd_manager->create_nv_osd(); nv_osd_manager->create_nv_osd();
nv_messgae_converter_manager->create_message_converter();
/* Add queue elements between every two elements */ /* Add queue elements between every two elements */
const char* base = "queue"; const char* base = "queue";
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {

View File

@ -11,6 +11,7 @@
#include "message_handling.hpp" #include "message_handling.hpp"
#include "nv_ds_logger_manager.hpp" #include "nv_ds_logger_manager.hpp"
#include "nv_infer_server_manager.hpp" #include "nv_infer_server_manager.hpp"
#include "nv_messgae_converter.hpp"
#include "nv_osd_manager.hpp" #include "nv_osd_manager.hpp"
#include "nv_tracker_manager.hpp" #include "nv_tracker_manager.hpp"
#include "nv_video_convert_manager.hpp" #include "nv_video_convert_manager.hpp"
@ -41,6 +42,7 @@ class PipelineManager {
NvTrackerManager *nv_tracker_manager = new NvTrackerManager(); NvTrackerManager *nv_tracker_manager = new NvTrackerManager();
FaceNvInferServerManager *face_nv_infer_server_manager = FaceNvInferServerManager *face_nv_infer_server_manager =
new FaceNvInferServerManager(); new FaceNvInferServerManager();
NvMessageConverter *nv_messgae_converter_manager = new NvMessageConverter();
static double fps_buffer_probe; static double fps_buffer_probe;
static double fps_probe; static double fps_probe;
static double fps_osd; static double fps_osd;