Generating NvDsEventMsgMeta with Graph Composer

Please provide complete information as applicable to your setup.

• Hardware Platform (Jetson / GPU) dGPU
• DeepStream Version 6.0
• JetPack Version (valid for Jetson only)
• TensorRT Version 8.0
• NVIDIA GPU Driver Version (valid for GPU only) 470
• Issue Type( questions, new requirements, bugs) Question

Reading the documentation my understanding about sending messages to the cloud is the following:

Some class that implements INvDsInPlaceDataHandler generates metadata from buffer events. After the metadata gets attached to the buffer a downstream MsgConverter converts the metadata to a schema/payload, which if present, gets sent by a MsgBroker?

Right now, I’m using graph composer as a no-code tool, because it speeds-up the development of a pipeline signifitcantly.

Right now, if I just add an MsgConverter + MsgBroker (or just an MsgConvBroker, which seems to be the two components integrated together) to my pipeline, no events are getting sent to my broker.

My understanding is that this is because there is no metadata attached to the buffer coming from upstream, because nothing generates it.

The only way I was able to generate events is by using NvDsSampleProbeMessageMetaCreation and then implementing a custom msg2p-lib.

My end goal would be to gather all the bounding box, object, tracking and analytics related data, filter them and then send them to my broker. Seems to me that there are 2 ways to do that with the SDK:

  1. Get a probe attached to a pad that has all of these in the buffer and generate meta payload for only the ones that I’m interested in, then the MsgConverter will convert all of the generated events indiscriminately and then my broker would send all the generated json payloads.

  2. Get a probe attached to a pad, generate a meta message for all events happening upstream of that pad, then in my custom msg2p-lib implementation only generate a json schema/payload for events that I’m interested in. The broker would then send out these generated payloads.

Both of these involve coding, which I’m fine with, but it seems to me that the better approach would be No. 1, but for that I need to code a custom probe implementing INvDsInPlaceDataHandler, create a component, register it and then using it in my pipeline with graph composer. Pros: I don’t generate unnecessary stuff, Cons: a lot more coding than approach No.2.

For approach No. 2 I can use NvDsSampleProbeMessageMetaCreation to generate metadata for all buffer events (is that correct, from here it looks like it’s not really filtering stuff that I wouldn’t be anyway, i.e.: bounding box info, tracking data, direction and other NvDsAnalytics related data would be all generated. Then after the NvDsSampleProbeMessageMetaCreation generates the metadata I can filter them down in my custom msg2p-lib implementation. Pros: I only have to a custom msg2p-lib implementation, which is a lot less coding. Cons: I generate unnecessary metadata with NvDsSampleProbeMessageMetaCreation further upstream that I’d have to filter out in my msg2p-lib implementation.

Could you verify that I’m understanding everything correctly?

Thanks in advance!

NvDsSampleProbeMessageMetaCreation extension is just a encapsulation of the generate_event_msg_meta() function in /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-test5/deepstream_test5_app_main.c. So you can not use it if your customized message meta is different to the message meta of deepstream-test5.

For the customized case, you need to develop your own extensions. currently, it is hard to develop a deepstream(non gstreamer) extension. Development Workflow — DeepStream 6.3 Release documentation

Thanks @Fiona.Chen , I’ll make it work with what we have.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.