带有多个摄像头的gstreamer:如何根据摄像头标识符拆分管道?

时间:2018-03-14 22:08:45

标签: gstreamer gstreamer-1.0

我正在尝试构建一个GStreamer管道,该管道将来自多个摄像机的图像交织成单个数据流,该数据流可以通过神经网络传输,然后分成单独的分支进行下沉。我成功使用appsrc插件和Basler Pylon 5 - USB 3.0 API来创建交错式Feed。但是,在我完成编写神经网络GStreamer元素的工作之前,我想让分裂工作。

目前,我正在考虑使用" ID"标记图像。表明它来自哪个相机。然后我想我可以使用这个标签分割数据流。但是,我无法找到任何涉及此问题的主题。我已经看到你可以使用tee插件来分支管道,但我还没有看到它曾经基于标签进行拆分。是否可以使用tee来执行此操作?

我看到有人使用tee根据来源拆分Feed,如下所示:

gst-launch-1.0 -vvv \
    tee name=splitter \
    $VSOURCE \
    ! $VIDEO_DECODE \
    ! $VIDEO_SINK splitter. \
    $VSOURCE1 \
    ! $VIDEO_DECODE \
    ! $VIDEO_SINK splitter.

但是,这不允许我通过神经网络元素有一条路径。

如果它有帮助,这是我设想的管道的diagaram:

cam1 ---\                                  /---> udpsink/appsink                              
         \                                / 
          appsrc-->neural_network-->tee---
         /                                \
cam2 ---/                                  \---> udpsink/appsink

2 个答案:

答案 0 :(得分:2)

tee元素只是将相同的数据转发到两个分支。您应该编写另一个获取输入的元素,并仅输出您感兴趣的流的数据。

您还应该在每个分支后面放置一个队列元素,为每个分支提供单独的线程。我调用元素来拆分流camfilter,它具有属性id

cam1 ---\                                  /---> queue --> camfilter id=1 --> udpsink/appsink                              
         \                                / 
          appsrc-->neural_network-->tee---
         /                                \
cam2 ---/                                  \---> queue --> camfilter id=2 --> udpsink/appsink

答案 1 :(得分:0)

询问此问题时不可用。但是,自2018年夏季以来,如果要减少通过appsrc和相机帧处理实现自己的“合并”代码的工作量,可以使用nnstreamer。这也使您可以更轻松地替换神经网络。

最近增加了支持gstreamer插件的神经网络“ nnstreamer”(https://github.com/nnsuite/nnstreamer),您可以在中间没有appsrc的情况下做到这一点,从而减少了实现工作量:

cam1 (gst src) ---> videoconvert,scale,... --> tensor_converter --\
                                                                   \
                                                                    tensor_merge (or tensor_mux depending on the input dimensions) --> tensor_filter (framework=tf_lite, model=abc.tflite) --> tee --> (same from here)
                                                                   /
cam2 (gst src) ---> videoconvert,scale,... --> tensor_converter --/

请注意,它还支持pytorch,caffe2,tf等。