How to extract classification results in gst-dsexample?

Please provide complete information as applicable to your setup.

• Hardware Platform (Jetson)Orin64B
• DeepStream Version7.0
• JetPack Version (valid for Jetson only) → 6.0+b87
• TensorRT Version → 8.6.2.3
• NVIDIA GPU Driver Version (valid for GPU only)12.2
i am using deepstream-app with gstds-example plugin.
The primary gie and secondary gie are all working.
Now i like to extract classification result inside gstdsexample.cpp file.
Inside the function, implemented in the following

static GstFlowReturn
gst_dsexample_transform_ip (GstBaseTransform * btrans, GstBuffer * inbuf)
{
      for (l_frame = batch_meta->frame_meta_list; l_frame != NULL;
      l_frame = l_frame->next)
    {
      frame_meta = (NvDsFrameMeta *) (l_frame->data);
      NvOSD_RectParams rect_params;
      for (l_obj = frame_meta->obj_meta_list; l_obj != NULL; l_obj = l_obj->next) {
         obj_meta = (NvDsObjectMeta *) (l_obj->data);
         for (NvDsMetaList *l_class = obj_meta->classifier_meta_list; l_class != NULL; l_class = l_class->next) {
             NvDsClassifierMeta *classifier_meta = (NvDsClassifierMeta *)l_class->data;
	     if (classifier_meta->num_classes > 0) {
		 NvDsLabelInfo *label_info = &classifier_meta->label_info[0];
		 snprintf(display_text + strlen(display_text), sizeof(display_text) - strlen(display_text),
		             " | %s %.2f", label_info->result_label, label_info->result_prob);
	     }
         
         }
     }
}

But i have some build errors.
How to extract classification results from detected object?

Please refer to pgie_src_pad_buffer_probe in /opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-preprocess-test/deepstream_preprocess_test.cpp for how to access NvDsClassifierMeta.

Thanks I have added into for (l_frame = batch_meta->frame_meta_list; l_frame != NULL; l_frame = l_frame->next) loop. as below.

for (l_frame = batch_meta->frame_meta_list; l_frame != NULL;
      l_frame = l_frame->next)
    {
      frame_meta = (NvDsFrameMeta *) (l_frame->data);
      NvOSD_RectParams rect_params;
      for (l_obj = frame_meta->obj_meta_list; l_obj != NULL; l_obj = l_obj->next) {
         obj_meta = (NvDsObjectMeta *) (l_obj->data);
         NvDsMetaList *l_classifier = NULL;
         std::cout << "before " << std::endl;
         for (l_classifier = obj_meta->classifier_meta_list; l_classifier != NULL; l_classifier = l_classifier->next)
         {
             std::cout << "inside " << std::endl;
	     NvDsClassifierMeta *classifier_meta = (NvDsClassifierMeta *)(l_classifier->data);
	     NvDsLabelInfoList *l_label;
	     for (l_label = classifier_meta->label_info_list; l_label != NULL; l_label = l_classifier->next)
	     {
		  NvDsLabelInfo *label_info = (NvDsLabelInfo *)l_label->data;
                  std::cout << "label_info->result_label "<< label_info->result_label<< std::endl;
		  
             }
         }
}
}

“before” is printed. But it doesn’t print “inside”.
That means it doesn’t go inside the loop

for (l_classifier = obj_meta->classifier_meta_list; l_classifier != NULL; l_classifier = l_classifier->next)
         {}

I add into gstdsexample.cpp’s

gst_dsexample_transform_ip (GstBaseTransform * btrans, GstBuffer * inbuf)
{} function.

The config files are
config_infer_secondary_standrew.txt (2.9 KB)
main.txt (7.2 KB)

Why label_info is not printed?

could you check if g_list_length(obj_meta->classifier_meta_list) is 0? is the second model abscondment a classificaton model? can the classificaton be printed on the video?

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