Check landmarks metadata in gstdsexample probe
This commit is contained in:
parent
8dc2fad1fe
commit
431806eea4
@ -1,5 +1,10 @@
|
||||
#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 PGIE_CLASS_ID_PERSON 0
|
||||
|
||||
@ -67,6 +72,28 @@ GstPadProbeReturn GstdsExampleManager::gstds_example_src_pad_buffer_probe(
|
||||
<< " Object ID: " << obj_meta->object_id
|
||||
<< 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);
|
||||
NvOSD_TextParams *txt_params = &display_meta->text_params[0];
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
#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 PGIE_CLASS_ID_PERSON 0
|
||||
#define PGIE_DETECTED_CLASS_NUM 1
|
||||
@ -230,6 +235,7 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
|
||||
(void)stream_height;
|
||||
(void)stream_width;
|
||||
|
||||
float source_id = (float)frame_meta->source_id;
|
||||
/* Iterate user metadata in frames to search PGIE's tensor metadata */
|
||||
for (NvDsMetaList *l_user = frame_meta->frame_user_meta_list;
|
||||
l_user != NULL; l_user = l_user->next) {
|
||||
@ -308,7 +314,7 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
|
||||
<< " w = " << data[jkl * 57 + 2]
|
||||
<< " h = " << data[jkl * 57 + 3]
|
||||
<< " 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];
|
||||
(void)value;
|
||||
// std::cout << "data[" << jkl << "][" << mno
|
||||
@ -362,15 +368,17 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
|
||||
text_params.font_params.font_color =
|
||||
NvOSD_ColorParams{1, 1, 1, 1};
|
||||
// adding landmarks to obj_meta as user_meta
|
||||
// NvDsUserMeta* um1 =
|
||||
// nvds_acquire_user_meta_from_pool(batch_meta);
|
||||
// um1->user_meta_data = set_metadata_ptr(&(res[i].landmark[0]),
|
||||
// source_id ); //Add landmarks here um1->base_meta.meta_type =
|
||||
// NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID;
|
||||
// um1->base_meta.copy_func = (NvDsMetaCopyFunc)copy_user_meta;
|
||||
// um1->base_meta.release_func =
|
||||
// (NvDsMetaReleaseFunc)release_user_meta;
|
||||
// nvds_add_user_meta_to_obj(obj_meta, um1);
|
||||
NvDsUserMeta *um1 =
|
||||
nvds_acquire_user_meta_from_pool(batch_meta);
|
||||
um1->user_meta_data =
|
||||
set_metadata_ptr(&(data[index * 57 + 6]),
|
||||
source_id); // Add landmarks here
|
||||
um1->base_meta.meta_type =
|
||||
NVDS_USER_OBJECT_META_LANDMARKS_AND_SOURCE_ID;
|
||||
um1->base_meta.copy_func = (NvDsMetaCopyFunc)copy_user_meta;
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -378,3 +386,39 @@ GstPadProbeReturn NvInferServerManager::pgie_pad_buffer_probe(
|
||||
// use_device_mem = 1 - use_device_mem;
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -35,4 +35,7 @@ class NvInferServerManager {
|
||||
// static GstPadProbeReturn osd_sink_pad_buffer_probe_new(GstPad *,
|
||||
// GstPadProbeInfo
|
||||
// *, gpointer);
|
||||
static void *set_metadata_ptr(float *, float);
|
||||
static gpointer copy_user_meta(gpointer, gpointer);
|
||||
static void release_user_meta(gpointer, gpointer);
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user