Check landmarks metadata in gstdsexample probe

This commit is contained in:
Barzan Hayati 2025-07-28 21:45:24 +00:00
parent 8dc2fad1fe
commit 431806eea4
3 changed files with 84 additions and 10 deletions

View File

@ -1,5 +1,10 @@
#include "gstds_example_manager.hpp" #include "gstds_example_manager.hpp"
// #define NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID
// (nvds_get_user_meta_type("NVIDIA.NVINFER.USER_META"))
#define NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID \
(nvds_get_user_meta_type(const_cast<gchar *>("NVIDIA.NVINFER.USER_META")))
#define MAX_DISPLAY_LEN 64 #define MAX_DISPLAY_LEN 64
#define PGIE_CLASS_ID_PERSON 0 #define PGIE_CLASS_ID_PERSON 0
@ -67,6 +72,28 @@ GstPadProbeReturn GstdsExampleManager::gstds_example_src_pad_buffer_probe(
<< " Object ID: " << obj_meta->object_id << " Object ID: " << obj_meta->object_id
<< std::endl; << std::endl;
} }
NvDsUserMeta *user_meta = NULL;
NvDsMetaList *l_user_meta = NULL;
float *user_meta_data = NULL;
for (l_user_meta = obj_meta->obj_user_meta_list;
l_user_meta != NULL; l_user_meta = l_user_meta->next) {
user_meta = (NvDsUserMeta *)(l_user_meta->data);
user_meta_data = (float *)user_meta->user_meta_data;
// user_meta->base_meta.meta_type == 7 means it is user-defined
// metadata (NVDS_USER_META).
// This is typically used when you attach custom metadata
// (like your float* user_meta_data) to an object
// (NvDsObjectMeta) using DeepStream APIs.
if (user_meta->base_meta.meta_type ==
NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID) {
for (int jkl = 0; jkl < 52; jkl++)
std::cout << user_meta_data[jkl] << std::endl;
}
}
} }
display_meta = nvds_acquire_display_meta_from_pool(batch_meta); display_meta = nvds_acquire_display_meta_from_pool(batch_meta);
NvOSD_TextParams *txt_params = &display_meta->text_params[0]; NvOSD_TextParams *txt_params = &display_meta->text_params[0];

View File

@ -1,5 +1,10 @@
#include "nv_infer_server_manager.hpp" #include "nv_infer_server_manager.hpp"
// #define NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID
// (nvds_get_user_meta_type("NVIDIA.NVINFER.USER_META"))
#define NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID \
(nvds_get_user_meta_type(const_cast<gchar *>("NVIDIA.NVINFER.USER_META")))
#define MAX_DISPLAY_LEN 64 #define MAX_DISPLAY_LEN 64
#define PGIE_CLASS_ID_PERSON 0 #define PGIE_CLASS_ID_PERSON 0
#define PGIE_DETECTED_CLASS_NUM 1 #define PGIE_DETECTED_CLASS_NUM 1
@ -230,6 +235,7 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
(void)stream_height; (void)stream_height;
(void)stream_width; (void)stream_width;
float source_id = (float)frame_meta->source_id;
/* Iterate user metadata in frames to search PGIE's tensor metadata */ /* Iterate user metadata in frames to search PGIE's tensor metadata */
for (NvDsMetaList *l_user = frame_meta->frame_user_meta_list; for (NvDsMetaList *l_user = frame_meta->frame_user_meta_list;
l_user != NULL; l_user = l_user->next) { l_user != NULL; l_user = l_user->next) {
@ -308,7 +314,7 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
<< " w = " << data[jkl * 57 + 2] << " w = " << data[jkl * 57 + 2]
<< " h = " << data[jkl * 57 + 3] << " h = " << data[jkl * 57 + 3]
<< " score = " << data[jkl * 57 + 4] << std::endl; << " score = " << data[jkl * 57 + 4] << std::endl;
for (unsigned int mno = 0; mno < 5; ++mno) { for (unsigned int mno = 0; mno < 57; ++mno) {
float value = data[jkl * 57 + mno]; float value = data[jkl * 57 + mno];
(void)value; (void)value;
// std::cout << "data[" << jkl << "][" << mno // std::cout << "data[" << jkl << "][" << mno
@ -362,19 +368,57 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
text_params.font_params.font_color = text_params.font_params.font_color =
NvOSD_ColorParams{1, 1, 1, 1}; NvOSD_ColorParams{1, 1, 1, 1};
// adding landmarks to obj_meta as user_meta // adding landmarks to obj_meta as user_meta
// NvDsUserMeta* um1 = NvDsUserMeta *um1 =
// nvds_acquire_user_meta_from_pool(batch_meta); nvds_acquire_user_meta_from_pool(batch_meta);
// um1->user_meta_data = set_metadata_ptr(&(res[i].landmark[0]), um1->user_meta_data =
// source_id ); //Add landmarks here um1->base_meta.meta_type = set_metadata_ptr(&(data[index * 57 + 6]),
// NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID; source_id); // Add landmarks here
// um1->base_meta.copy_func = (NvDsMetaCopyFunc)copy_user_meta; um1->base_meta.meta_type =
// um1->base_meta.release_func = NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID;
// (NvDsMetaReleaseFunc)release_user_meta; um1->base_meta.copy_func = (NvDsMetaCopyFunc)copy_user_meta;
// nvds_add_user_meta_to_obj(obj_meta, um1); um1->base_meta.release_func =
(NvDsMetaReleaseFunc)release_user_meta;
nvds_add_user_meta_to_obj(obj_meta, um1);
nvds_add_obj_meta_to_frame(frame_meta, obj_meta, NULL); nvds_add_obj_meta_to_frame(frame_meta, obj_meta, NULL);
} }
} }
} }
// use_device_mem = 1 - use_device_mem; // use_device_mem = 1 - use_device_mem;
return GST_PAD_PROBE_OK; return GST_PAD_PROBE_OK;
}
// add custom infromation to metadata by: set_metadata_ptr, copy_user_meta,
// release_user_meta
void *NvInferServerManager::set_metadata_ptr(float *arr, float source_id) {
int i = 0;
float *user_metadata =
(float *)g_malloc0(17 * 3 * sizeof(float) + 1 * sizeof(float));
for (i = 0; i < 51; i++) {
user_metadata[i] = arr[i];
}
user_metadata[51] = source_id;
return (void *)user_metadata;
}
gpointer NvInferServerManager::copy_user_meta(gpointer data,
gpointer user_data) {
(void)user_data;
NvDsUserMeta *user_meta = (NvDsUserMeta *)data;
gfloat *src_user_metadata = (gfloat *)user_meta->user_meta_data;
gfloat *dst_user_metadata =
(gfloat *)g_malloc0(17 * 3 * sizeof(gfloat) + 1 * sizeof(gfloat));
memcpy(dst_user_metadata, src_user_metadata,
17 * 3 * sizeof(gfloat) + 1 * sizeof(gfloat));
return (gpointer)dst_user_metadata;
}
void NvInferServerManager::release_user_meta(gpointer data,
gpointer user_data) {
(void)user_data;
NvDsUserMeta *user_meta = (NvDsUserMeta *)data;
if (user_meta->user_meta_data) {
g_free(user_meta->user_meta_data);
user_meta->user_meta_data = NULL;
}
} }

View File

@ -35,4 +35,7 @@ class NvInferServerManager {
// static GstPadProbeReturn osd_sink_pad_buffer_probe_new(GstPad *, // static GstPadProbeReturn osd_sink_pad_buffer_probe_new(GstPad *,
// GstPadProbeInfo // GstPadProbeInfo
// *, gpointer); // *, gpointer);
static void *set_metadata_ptr(float *, float);
static gpointer copy_user_meta(gpointer, gpointer);
static void release_user_meta(gpointer, gpointer);
}; };