Hi, I can run the deepstream app and get the output file as out.mp4, but there are only bboxs shown, I cannot figure out how to show the tracking id.
the config file is
source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8_gpu1.txt
I enable this sink only
[sink1]
enable=1
type=3
#1=mp4 2=mkv
container=1
#1=h264 2=h265
codec=3
sync=0
bitrate=2000000
output-file=out.mp4
source-id=0
gpu-id=0
and the osd is
[osd]
enable=1
gpu-id=0
border-width=1
text-size=15
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=1
clock-x-offset=800
clock-y-offset=820
clock-text-size=12
clock-color=1;0;0;0
nvbuf-memory-type=0
How to display the tracking id?
Can someone help me?
And also, when I enable the sink blow
[sink0]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File
type=2
sync=1
source-id=0
gpu-id=0
nvbuf-memory-type=0
I get a black window with this error:
(deepstream-app:868): GLib-GObject-WARNING **: 09:59:34.062: g_object_set_is_valid_property: object class 'avenc_mpeg4' has no property named 'iframeinterval'
(deepstream-app:868): GLib-GObject-WARNING **: 09:59:34.062: g_object_set_is_valid_property: object class 'avenc_mpeg4' has no property named 'bufapi-version'
libEGL warning: DRI3: failed to query the version
libEGL warning: DRI2: failed to authenticate
Creating LL OSD context new
gstnvtracker: Loading low-level lib at /opt/nvidia/deepstream/deepstream-4.0/lib/libnvds_mot_klt.so
gstnvtracker: Optional NvMOT_RemoveStreams not implemented
gstnvtracker: Batch processing is OFF
Runtime commands:
h: Print this help
q: Quit
p: Pause
r: Resume
NOTE: To expand a source in the 2D tiled display and view object details, left-click on the source.
To go back to the tiled display, right-click anywhere on the window.
** INFO: <bus_callback:163>: Pipeline ready
**PERF: FPS 0 (Avg) FPS 1 (Avg) FPS 2 (Avg) FPS 3 (Avg)
**PERF: 0.00 (0.00) 0.00 (0.00) 0.00 (0.00) 0.00 (0.00)
Creating LL OSD context new
cuGraphicsGLRegisterBuffer failed with error(219) gst_eglglessink_cuda_init texture = 1
** INFO: <bus_callback:149>: Pipeline running
KLT Tracker Init
KLT Tracker Init
KLT Tracker Init
KLT Tracker Init
**PERF: 20.75 (20.75) 20.75 (20.75) 17.77 (17.77) 17.77 (17.77)
**PERF: 0.00 (20.75) 0.00 (20.75) 0.00 (17.77) 0.00 (17.77)
**PERF: 0.00 (20.75) 0.00 (20.75) 0.00 (17.77) 0.00 (17.77)
**PERF: 0.00 (20.75) 0.00 (20.75) 0.00 (17.77) 0.00 (17.77)
**PERF: 0.00 (20.75) 0.00 (20.75) 0.00 (17.77) 0.00 (17.77)
ERROR from secondary_gie_bin_queue: Internal data stream error.
Debug info: gstqueue.c(988): gst_queue_handle_sink_event (): /GstPipeline:pipeline/GstBin:secondary_gie_bin/GstQueue:secondary_gie_bin_queue:
streaming stopped, reason not-negotiated (-4)
Quitting
ERROR from sink_bin_queue: Internal data stream error.
Debug info: gstqueue.c(988): gst_queue_handle_sink_event (): /GstPipeline:pipeline/GstBin:processing_bin_0/GstBin:sink_bin/GstQueue:sink_bin_queue:
streaming stopped, reason not-negotiated (-4)
App run failed
Can you try deepstream-test2 ? Modify the code in function “osd_sink_pad_buffer_probe()”
Add “NvDsObjectMeta->object_id” to “txt_params->display_text”
Thank you for your reply. I can do it in deepstream-app now.
Thank you yuanyue1168 and ChrisDing for raising this question and I am glad you got the solution.
Can some one help me with adding “NvDsObjectMeta->object_id” to “txt_params->display_text” in deepstream-test2?..
static GstPadProbeReturn
osd_sink_pad_buffer_probe (GstPad * pad, GstPadProbeInfo * info,
gpointer u_data)
{
GstBuffer *buf = (GstBuffer *) info->data;
guint num_rects = 0;
NvDsObjectMeta *obj_meta = NULL;
guint vehicle_count = 0;
guint person_count = 0;
NvDsMetaList * l_frame = NULL;
NvDsMetaList * l_obj = NULL;
NvDsDisplayMeta *display_meta = NULL;
NvDsBatchMeta *batch_meta = gst_buffer_get_nvds_batch_meta (buf);
for (l_frame = batch_meta->frame_meta_list; l_frame != NULL;
l_frame = l_frame->next) {
NvDsFrameMeta *frame_meta = (NvDsFrameMeta *) (l_frame->data);
int offset = 0;
for (l_obj = frame_meta->obj_meta_list; l_obj != NULL;
l_obj = l_obj->next) {
obj_meta = (NvDsObjectMeta *) (l_obj->data);
if (obj_meta->class_id == PGIE_CLASS_ID_VEHICLE) {
vehicle_count++;
num_rects++;
}
if (obj_meta->class_id == PGIE_CLASS_ID_PERSON) {
person_count++;
num_rects++;
}
}
display_meta = nvds_acquire_display_meta_from_pool(batch_meta);
NvOSD_TextParams *txt_params = &display_meta->text_params[0];
display_meta->num_labels = 1;
txt_params->display_text = g_malloc0 (MAX_DISPLAY_LEN);
//Add “NvDsObjectMeta->object_id” to “txt_params->display_text”
offset = snprintf(txt_params->display_text, MAX_DISPLAY_LEN, "Person = %d ", person_count);
offset = snprintf(txt_params->display_text + offset , MAX_DISPLAY_LEN, "Vehicle = %d ", vehicle_count);
/* Now set the offsets where the string should appear */
txt_params->x_offset = 10;
txt_params->y_offset = 12;
/* Font , font-color and font-size */
txt_params->font_params.font_name = "Serif";
txt_params->font_params.font_size = 10;
txt_params->font_params.font_color.red = 1.0;
txt_params->font_params.font_color.green = 1.0;
txt_params->font_params.font_color.blue = 1.0;
txt_params->font_params.font_color.alpha = 1.0;
/* Text background color */
txt_params->set_bg_clr = 1;
txt_params->text_bg_clr.red = 0.0;
txt_params->text_bg_clr.green = 0.0;
txt_params->text_bg_clr.blue = 0.0;
txt_params->text_bg_clr.alpha = 1.0;
nvds_add_display_meta_to_frame(frame_meta, display_meta);
}
g_print ("Frame Number = %d Number of objects = %d "
"Vehicle Count = %d Person Count = %d\n",
frame_number, num_rects, vehicle_count, person_count);
frame_number++;
return GST_PAD_PROBE_OK;
}
For anyone who came searching for this…
go to main
Replace osd_sink_pad = gst_element_get_static_pad (nvosd, “sink”);
by osd_sink_pad = gst_element_get_static_pad (nvtracker, “src”); in DStest2 file
and you should get Tracking ID in output with object label…
This is explained by @NvCJR with source code…
https://devtalk.nvidia.com/default/topic/1062677/whats-means-in-nvtracker-/?offset=2
thank you
1 Like
Hello I am kind of new with this and what i understand is you want to display the IDs but in my case I need to get them so that i can apply them to my algorithm. How can I get the “List of Id with their coordinates”
I try to debug the when the code enters the pipe is hard to debug so i just print debug but couldn’t find the the Ids and coordinates (x, y).
Could you please address me to a document or a function call?