Okay. My goal is to add tracker to the deepstream-ssd-parser refer to the deepstream-nvanalytics. Additionally, I want to change the input to rstp stream and then display the output on the screen.
For deepstream-ssd-parser, I removed the source, h264parser, decoder elements and created source bin refered to deepstream-nvanalytics.
# Create nvstreammux instance to form batches from one or more sources.
streammux = Gst.ElementFactory.make("nvstreammux", "Stream-muxer")
if not streammux:
sys.stderr.write(" Unable to create NvStreamMux \n")
pipeline.add(streammux)
for i in range(number_sources):
print("Creating source_bin ", i, " \n ")
uri_name = args[i + 1]
if uri_name.find("rtsp://") == 0:
is_live = True
source_bin = create_source_bin(i, uri_name)
if not source_bin:
sys.stderr.write("Unable to create source bin \n")
pipeline.add(source_bin)
padname = "sink_%u" % i
sinkpad = streammux.get_request_pad(padname)
if not sinkpad:
sys.stderr.write("Unable to create sink pad bin \n")
srcpad = source_bin.get_static_pad("src")
if not srcpad:
sys.stderr.write("Unable to create src pad bin \n")
srcpad.link(sinkpad)
Next, I maintained the pige of deepstream-ssd-parser.
pgie = make_elm_or_print_err("nvinferserver", "primary-inference", "Nvinferserver")
pgie.set_property("config-file-path", "dstest_ssd_nopostprocess.txt")
I used the tracker of deepstream-nvanalytics:
tracker = Gst.ElementFactory.make("nvtracker", "tracker")
# Set properties of tracker
config = configparser.ConfigParser()
config.read('dsnvanalytics_tracker_config.txt')
config.sections()
for key in config['tracker']:
if key == 'tracker-width':
tracker_width = config.getint('tracker', key)
tracker.set_property('tracker-width', tracker_width)
if key == 'tracker-height':
tracker_height = config.getint('tracker', key)
tracker.set_property('tracker-height', tracker_height)
if key == 'gpu-id':
tracker_gpu_id = config.getint('tracker', key)
tracker.set_property('gpu_id', tracker_gpu_id)
if key == 'll-lib-file':
tracker_ll_lib_file = config.get('tracker', key)
tracker.set_property('ll-lib-file', tracker_ll_lib_file)
if key == 'll-config-file':
tracker_ll_config_file = config.get('tracker', key)
tracker.set_property('ll-config-file', tracker_ll_config_file)
if key == 'enable-batch-process':
tracker_enable_batch_process = config.getint('tracker', key)
tracker.set_property('enable_batch_process', tracker_enable_batch_process)
if key == 'enable-past-frame':
tracker_enable_past_frame = config.getint('tracker', key)
tracker.set_property('enable_past_frame', tracker_enable_past_frame)
Then, I added nvanalytics and nvosd of deepstream-nvanalytics. Finally, I linked the sink element to the pipeline:
sink = Gst.ElementFactory.make("nveglglessink", "nvvideo-renderer")
sink.set_property("qos",0)
Eventually, my pipeline is: streammux → pgie → tracker → nvanalytics → nvosd → sink. Everytime I add a new element, I run the pipeline. And everything work successfully until I add sink element. Futher, when I change the sink to “filesink”, the pipeline works.
Is everything clear ? Please let me know if you have any confusion. Thank you very much.