Thank you for the response.
After modifying the pipeline, it is much better to make the message.
print("Adding elements to the Pipeline")
pipeline.add(pgie)
pipeline.add(nvvidconv1)
pipeline.add(filter1)
pipeline.add(tiler)
pipeline.add(nvvidconv)
pipeline.add(nvosd)
pipeline.add(tee)
pipeline.add(queue1)
pipeline.add(queue2)
# message element pipeline
pipeline.add(msgconv)
pipeline.add(msgbroker)
pipeline.add(sink)
print("Linking elements in the Pipeline")
streammux.link(pgie)
pgie.link(nvvidconv1)
nvvidconv1.link(filter1)
filter1.link(tee) # split the pipeline
# Message Branch
tee_msg_pad = tee.request_pad_simple('src_%u')
sink_pad = queue1.get_static_pad("sink")
tee_msg_pad.link(sink_pad)
queue1.link(msgconv)
msgconv.link(msgbroker)
# Movie Branch
queue2.link(tiler)
tiler.link(nvvidconv)
nvvidconv.link(nvosd)
nvosd.link(sink)
tee_render_pad = tee.request_pad_simple("src_%u")
sink_pad = queue2.get_static_pad("sink")
tee_render_pad.link(sink_pad)
tiler_sink_pad = tiler.get_static_pad("sink")
if not tiler_sink_pad:
sys.stderr.write(" Unable to get src pad \n")
else:
tiler_sink_pad.add_probe(Gst.PadProbeType.BUFFER, tiler_sink_pad_buffer_probe, 0)
I use “tiler_sink_pad_buffer_probe” function with “pyds.nvds_add_user_meta_to_frame(frame_meta, user_event_meta)”.
How should I make the message like this with my code? (how to modifying the payload)
{
"source_id" : 0,
"frame_num" : 120,
"counter" : {
"up" : 1, "down" : 2
}
}
{
"source_id" : 1,
"frame_num" : 120,
"counter" : {
"up" : 0, "down" : 1
}
}
This is my a part of code in tiler_sink_pad_buffer_probe funcion :
# for test
n_frame = pyds.get_nvds_buf_surface(hash(gst_buffer), frame_meta.batch_id)
BOUNDARY = {0 : [[650, 880], [450, 650], [900, 1130], [450, 650]]}
# down stream (ex, l t 650 600, w 350 h 200)
cv2.rectangle(n_frame, (BOUNDARY[camera_source_id][0][0], BOUNDARY[camera_source_id][1][0]), (BOUNDARY[camera_source_id][0][1], BOUNDARY[camera_source_id][1][1]), (0, 255, 0), 2) # 좌상, 우하
# up stream (ex, l t 1050 600, w 500 h 200)
cv2.rectangle(n_frame, (BOUNDARY[camera_source_id][2][0], BOUNDARY[camera_source_id][3][0]), (BOUNDARY[camera_source_id][2][1], BOUNDARY[camera_source_id][3][1]), (0, 0, 255), 2) # 좌상, 우하
# pgie object list
l_obj = frame_meta.obj_meta_list
while l_obj is not None:
try:
obj_meta = pyds.NvDsObjectMeta.cast(l_obj.data)
except StopIteration:
continue
if obj_meta.class_id == 0: # 차량만 탐지
# 2. object center calculate
obj_center_x = int(obj_meta.rect_params.left + obj_meta.rect_params.width // 2)
obj_center_y = int(obj_meta.rect_params.top + obj_meta.rect_params.height // 2)
if BOUNDARY[camera_source_id][0][0] <= obj_center_x <= BOUNDARY[camera_source_id][0][1] and BOUNDARY[camera_source_id][1][0] <= obj_center_y <= BOUNDARY[camera_source_id][1][1]:
object_counter[camera_source_id]["object_counter_down"] += 1
elif BOUNDARY[camera_source_id][2][0] <= obj_center_x <= BOUNDARY[camera_source_id][2][1] and BOUNDARY[camera_source_id][3][0] <= obj_center_y <= BOUNDARY[camera_source_id][3][1]:
object_counter[camera_source_id]["object_counter_up"] += 1
try:
l_obj = l_obj.next
except StopIteration:
break
# 30 frame; message produce
if PRODUCE_A_MESSAGE and (frame_number % 30) == 0:
user_event_meta = pyds.nvds_acquire_user_meta_from_pool(batch_meta)
if user_event_meta:
msg_meta = pyds.alloc_nvds_event_msg_meta(user_event_meta)
msg_meta.frameId = frame_number
msg_meta.sensorId = camera_source_id
meta = pyds.NvDsEventMsgMeta.cast(msg_meta)
meta.ts = pyds.alloc_buffer(MAX_TIME_STAMP_LEN + 1)
pyds.generate_ts_rfc3339(meta.ts, MAX_TIME_STAMP_LEN)
# JSON making
counter_data = {
"source_id": int(camera_source_id),
"frame_num": int(frame_meta.frame_num),
"counter": {
"up": object_counter[camera_source_id]["object_counter_up"],
"down": object_counter[camera_source_id]["object_counter_down"]
}
}
obj = pyds.NvDsVehicleObject.cast(pyds.alloc_nvds_vehicle_object())
# obj.type = object_counter[camera_source_id]["object_counter_up"]
# meta.extMsg = obj
# meta.extMsgSize = sys.getsizeof(obj)
user_event_meta.user_meta_data = msg_meta
user_event_meta.base_meta.meta_type = pyds.NvDsMetaType.NVDS_EVENT_MSG_META
pyds.nvds_add_user_meta_to_frame(frame_meta, user_event_meta)
I’m sorry to bother you with the understanding difficult for me.
However, I want to solve this problem as hard as I can.
Thank you for helping me again.
Regards,
Daring_park