deepstream车牌识别加属性分类

deepstream的车牌识别在lpr,而属性分类是在test2,故对比学习两个代码。
代码用pipeline贯通:

pipeline = gst_pipeline_new ("pipeline"); 

然后往pipeline中加数据,方法一(先添加streammux,再添加source和解码等):

gst_bin_add (GST_BIN(pipeline), streammux);
gst_bin_add_many (GST_BIN (pipeline), source[src_cnt], mp4demux[src_cnt],
        h264parser[src_cnt], parsequeue[src_cnt], decoder[src_cnt], NULL);

往pipeline中加数据,方法二(先添加source和解码,再添加streammux等):

gst_bin_add_many (GST_BIN (pipeline), source, h264parser, decoder, streammux, pgie, nvtracker, sgie1, sgie2, sgie3,
    nvvidconv, nvosd, transform, sink, NULL);

往pipeline中加模型:

	gst_bin_add_many (GST_BIN (pipeline), primary_detector, secondary_detector,
      tracker, nvdsanalytics, queue1, queue2, queue3, queue4, queue5, queue6,
      queue7, queue8, secondary_classifier, nvvidconv, nvosd, nvtile, sink, NULL);

如果需要报错模型,往pipeline中加:

	gst_bin_add_many (GST_BIN (pipeline), nvvidconv1, nvh264enc, capfilt, 
        queue9, queue10, NULL);

运行之前给pipeline传参GST_STATE_PLAYING:

	gst_element_set_state (pipeline, GST_STATE_PLAYING);

运行:

g_main_loop_run (loop);   

运行完之后给pipeline传参GST_STATE_NULL并释放:

gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (GST_OBJECT (pipeline));

模型对比

lpr中:两个检测模型(一个是4类,机动车,两轮车,人,交通标志;另一个是1类),一个字符识别ctc模型(车牌识别)

 //定义两个检测模型*primary_detector, *secondary_detector,一个字符识别模型*secondary_classifier
  GstElement *pipeline = NULL,*streammux = NULL, *sink = NULL, 
             *primary_detector = NULL, *secondary_detector = NULL,
             *nvvidconv = NULL, *nvosd = NULL, *nvvidconv1 = NULL,
             *nvh264enc = NULL, *capfilt = NULL,
             *secondary_classifier = NULL, *nvtile=NULL;
  GstElement *tracker = NULL, *nvdsanalytics = NULL;
  GstElement *queue1 = NULL, *queue2 = NULL, *queue3 = NULL, *queue4 = NULL,
             *queue5 = NULL, *queue6 = NULL, *queue7 = NULL, *queue8 = NULL,
             *queue9 = NULL, *queue10 = NULL;
  GstElement *h264parser[128], *source[128], *decoder[128], *mp4demux[128],
             *parsequeue[128];

test2中:一个检测模型(4类,机动车,两轮车,人,交通标志),3个属性分类模型(车辆的颜色,。。)

//定义一个检测模型*pgie,三个分类模型*sgie1, *sgie2, *sgie3 
GstElement *pipeline = NULL, *source = NULL, *h264parser = NULL,
      *decoder = NULL, *streammux = NULL, *sink = NULL, *pgie = NULL, *nvvidconv = NULL,
      *nvosd = NULL, *sgie1 = NULL, *sgie2 = NULL, *sgie3 = NULL, *nvtracker = NULL;

lpr中第一个检测模型:

	GstElement *primary_detector = NULL;
	primary_detector = gst_element_factory_make ("nvinfer", "primary-infer-engine1");
	g_object_set (G_OBJECT (primary_detector), "config-file-path","trafficamnet_config.txt", "unique-id", PRIMARY_DETECTOR_UID, NULL);
	gst_bin_add_many (GST_BIN (pipeline), primary_detector, secondary_detector,
      tracker, nvdsanalytics, queue1, queue2, queue3, queue4, queue5, queue6,
      queue7, queue8, secondary_classifier, nvvidconv, nvosd, nvtile, sink, NULL);

test2中第一个检测模型:

	GstElement *pgie = NULL;
	pgie = gst_element_factory_make ("nvinfer", "primary-nvinference-engine");
	g_object_set (G_OBJECT (pgie), "config-file-path", PGIE_CONFIG_FILE, NULL);
	gst_bin_add_many (GST_BIN (pipeline),
        source, h264parser, decoder, streammux, pgie, nvtracker, sgie1, sgie2, sgie3,
        nvvidconv, nvosd, transform, sink, NULL);

lpr中第二个检测模型:

	GstElement *secondary_detector = NULL;
	secondary_detector = gst_element_factory_make ("nvinfer", "secondary-infer-engine1");
	g_object_set (G_OBJECT (secondary_detector), "config-file-path", "lpd_us_config.txt", "unique-id", SECONDARY_DETECTOR_UID, "process-mode", 2, NULL);
	gst_bin_add_many (GST_BIN (pipeline), primary_detector, secondary_detector,
      tracker, nvdsanalytics, queue1, queue2, queue3, queue4, queue5, queue6,
      queue7, queue8, secondary_classifier, nvvidconv, nvosd, nvtile, sink, NULL);

test2中第二个模型:

	GstElement *sgie1 = NULL; 
	sgie1 = gst_element_factory_make ("nvinfer", "secondary1-nvinference-engine");
	g_object_set (G_OBJECT (sgie1), "config-file-path", SGIE1_CONFIG_FILE, NULL);
	gst_bin_add_many (GST_BIN (pipeline),
        source, h264parser, decoder, streammux, pgie, nvtracker, sgie1, sgie2, sgie3,
        nvvidconv, nvosd, transform, sink, NULL);

剩下的模型类似。总结出:每个模型都是这样的应用。

数据流对比

lpr中的数据流:

	GstElement *pipeline = NULL;
	pipeline = gst_pipeline_new ("pipeline"); 
	gst_bin_add (GST_BIN(pipeline), streammux);  //多一个add
	gst_bin_add_many (GST_BIN (pipeline), source[src_cnt], mp4demux[src_cnt],
        h264parser[src_cnt], parsequeue[src_cnt], decoder[src_cnt], NULL);
	bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
	gst_bin_add_many (GST_BIN (pipeline), primary_detector, secondary_detector,
      tracker, nvdsanalytics, queue1, queue2, queue3, queue4, queue5, queue6,
      queue7, queue8, secondary_classifier, nvvidconv, nvosd, nvtile, sink,
      NULL);
   
	if (atoi(argv[2]) == 1) {
    	g_object_set (G_OBJECT (sink), "location", argv[argc-1],NULL);
    	gst_bin_add_many (GST_BIN (pipeline), nvvidconv1, nvh264enc, capfilt, 
        queue9, queue10, NULL);
	gst_element_set_state (pipeline, GST_STATE_PLAYING);
	gst_element_set_state (pipeline, GST_STATE_NULL);
	g_print ("Deleting pipeline\n");
	gst_object_unref (GST_OBJECT (pipeline));

test2中的数据流

    GstElement *pipeline = NULL;
    pipeline = gst_pipeline_new ("dstest2-pipeline");
    bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
    gst_bin_add_many (GST_BIN (pipeline),
        source, h264parser, decoder, streammux, pgie, nvtracker, sgie1, sgie2, sgie3,
        nvvidconv, nvosd, transform, sink, NULL);
    gst_element_set_state (pipeline, GST_STATE_PLAYING);
    gst_element_set_state (pipeline, GST_STATE_NULL);
    g_print ("Deleting pipeline\n");
    gst_object_unref (GST_OBJECT (pipeline));

lpr中的streammux:

  GstElement *streammux = NULL;
  streammux = gst_element_factory_make ("nvstreammux", "stream-muxer");
  gst_bin_add (GST_BIN(pipeline), streammux);  //这里的add对应test2中的add_many
  sinkpad = gst_element_get_request_pad (streammux, pad_name_sink);
  g_object_set (G_OBJECT (streammux), "width", MUXER_OUTPUT_WIDTH, "height",
      MUXER_OUTPUT_HEIGHT, "batch-size", src_cnt, "batched-push-timeout", MUXER_BATCH_TIMEOUT_USEC, NULL);
  gst_element_link_many (streammux, queue1, primary_detector, queue2,
          tracker, queue3, secondary_detector, queue5,
          secondary_classifier, queue6, nvtile, queue7, nvvidconv, queue8,
          nvosd, NULL)

test2中的streammux:

	GstElement *streammux = NULL;
	streammux = gst_element_factory_make ("nvstreammux", "stream-muxer");
	g_object_set (G_OBJECT (streammux), "batch-size", 1, NULL);
	g_object_set (G_OBJECT (streammux), "width", MUXER_OUTPUT_WIDTH, "height",
      MUXER_OUTPUT_HEIGHT, "batched-push-timeout", MUXER_BATCH_TIMEOUT_USEC, NULL);
	gst_bin_add_many (GST_BIN (pipeline),
        source, h264parser, decoder, streammux, pgie, nvtracker, sgie1, sgie2, sgie3,
        nvvidconv, nvosd, transform, sink, NULL);  //这里的add_many对应lpr中的add
	sinkpad = gst_element_get_request_pad (streammux, pad_name_sink);
	gst_element_link_many (streammux, pgie, nvtracker, sgie1,
        sgie2, sgie3, nvvidconv, nvosd, transform, sink, NULL)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值