Unable to modify several rect params

Please provide complete information as applicable to your setup.

• Hardware Platform (Jetson / GPU)
• DeepStream Version
• JetPack Version (valid for Jetson only)
• TensorRT Version
• NVIDIA GPU Driver Version (valid for GPU only)
• Issue Type( questions, new requirements, bugs)
• How to reproduce the issue ? (This is for bugs. Including which sample app is using, the configuration files content, the command line used and other details for reproducing)
• Requirement details( This is for new requirement. Including the module name-for which plugin or for which sample application, the function description)

Hi guys,

I have to following probe for OSD plugin (see code below). I’m trying to modify several display params related with the bounding box metadata, but it doesn’t work:

-For box colour i’m using obj_meta.rect_params.border_color.set (0.0, 0.0, 0.0, 1.0) and when I use it the box dissappears.
-For border width I’m using obj_meta.rect_params.border_width = X, but nothing happens when I change the value.
-For background color I’m using obj_meta.rect_params.has_bg_color = 1 and obj_meta.rect_params.bg_color.set(1.0, 1.0, 0.0, 0.4) but nothing happens.
-And finally I would also like to change the box tag font size, but I didn’t find the way yet.

Thanks in advance.

Code:

def osd_sink_pad_helmets_buffer_probe(pad,info,u_data):
frame_number=0
#Intiallizing object counter with 0.
obj_counter = {
    PGIE_CLASS_ID_HEAD:0,
    PGIE_CLASS_ID_HELMET:0,
    PGIE_CLASS_ID_PERSON:0,
}
num_rects=0

gst_buffer = info.get_buffer()
if not gst_buffer:
    print("Unable to get GstBuffer ")
    return

# Retrieve batch metadata from the gst_buffer
# Note that pyds.gst_buffer_get_nvds_batch_meta() expects the
# C address of gst_buffer as input, which is obtained with hash(gst_buffer)
batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(gst_buffer))
l_frame = batch_meta.frame_meta_list
while l_frame is not None:
    try:
        # Note that l_frame.data needs a cast to pyds.NvDsFrameMeta
        # The casting is done by pyds.glist_get_nvds_frame_meta()
        # The casting also keeps ownership of the underlying memory
        # in the C code, so the Python garbage collector will leave
        # it alone.
        frame_meta = pyds.glist_get_nvds_frame_meta(l_frame.data)
    except StopIteration:
        break

    frame_number=frame_meta.frame_num
    num_rects = frame_meta.num_obj_meta
    l_obj=frame_meta.obj_meta_list
    while l_obj is not None:
        try:

            # Casting l_obj.data to pyds.NvDsObjectMeta
            obj_meta=pyds.glist_get_nvds_object_meta(l_obj.data)
        except StopIteration:
            break
        obj_counter[obj_meta.class_id] += 1
        
        obj_meta.rect_params.border_width=30
        obj_meta.rect_params.border_color.set(0.0, 0.0, 0.0, 1.0)
        obj_meta.rect_params.has_bg_color = 1
        obj_meta.rect_params.bg_color.set(1.0, 1.0, 0.0, 0.4)

        try: 
            l_obj=l_obj.next
        except StopIteration:
            break

    # Acquiring a display meta object. The memory ownership remains in
    # the C code so downstream plugins can still access it. Otherwise
    # the garbage collector will claim it when this probe function exits.
    display_meta=pyds.nvds_acquire_display_meta_from_pool(batch_meta)
    display_meta.num_labels = 3
    py_nvosd_text_params = display_meta.text_params[0]
    # Setting display text to be shown on screen
    # Note that the pyds module allocates a buffer for the string, and the
    # memory will not be claimed by the garbage collector.
    # Reading the display_text field here will return the C address of the
    # allocated string. Use pyds.get_string() to get the string content.
    py_nvosd_text_params.display_text = "Frame Number={} Number of Objects={} Head counter={} Helmet counter={} People counter={}".format(frame_number, num_rects, obj_counter[PGIE_CLASS_ID_HEAD], obj_counter[PGIE_CLASS_ID_HELMET], obj_counter[PGIE_CLASS_ID_PERSON])

    # Now set the offsets where the string should appear
    py_nvosd_text_params.x_offset = 10
    py_nvosd_text_params.y_offset = 12

    # Font , font-color and font-size
    py_nvosd_text_params.font_params.font_name = "Serif"
    py_nvosd_text_params.font_params.font_size = 25
    # set(red, green, blue, alpha); set to White
    py_nvosd_text_params.font_params.font_color.set(1.0, 1.0, 1.0, 1.0)

    # Text background color
    py_nvosd_text_params.set_bg_clr = 1
    # set(red, green, blue, alpha); set to Black
    py_nvosd_text_params.text_bg_clr.set(0.0, 0.0, 0.0, 1.0)
    
    
    
    # Using pyds.get_string() to get display_text as string
    print(pyds.get_string(py_nvosd_text_params.display_text))
    pyds.nvds_add_display_meta_to_frame(frame_meta, display_meta)
    try:
        l_frame=l_frame.next
    except StopIteration:
        break
        
return Gst.PadProbeReturn.OK

Hey, sorry for the late, it should work, have you checked the sample deepstream_python_apps/deepstream_test_1.py at master · NVIDIA-AI-IOT/deepstream_python_apps · GitHub and try to change the color params and see if it can work?