DeepStream5.0系列之Python SDK介绍

点击查看系列文章目录

0 背景

deepstream 的 sdk 是以 c 语言为主,但在开发过程中,会遇到用 python 快速验证功能的需求,因此本文对 python 使用 deepstream 的方式进行介绍。

官网已经开源了相关的示例代码,我们以官方代码为例

https://github.com/NVIDIA-AI-IOT/deepstream_python_apps

测试环境:deepstream sdk 5.0.1,ubuntu18.04, T4

python API:https://docs.nvidia.com/metropolis/deepstream/python-api/index.html

从上图可以看到,Python 版的 deepstream 是基于 gst-python 开发的,这是 python 版本的 gstreamer 框架。为了获得 metadata,以编译好的模块的形式来提供各项功能,这些模块是通过 pybind11 生成的。 

1 安装

安装相关依赖

$ sudo apt-get install python-gi-dev
$ export GST_LIBS="-lgstreamer-1.0 -lgobject-2.0 -lglib-2.0"
$ export GST_CFLAGS="-pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include"
$ git clone https://github.com/GStreamer/gst-python.git
$ cd gst-python
$ git checkout 1a8f48a
$ ./autogen.sh PYTHON=python3
$ ./configure PYTHON=python3
$ make
$ sudo make install

下载 sdk

cd /opt/nvidia/deepstream/deepstream-5.0/sources
git clone https://github.com/NVIDIA-AI-IOT/deepstream_python_apps

下载好之后进入 apps 目录,里边提供了各种示例

├── common
├── deepstream-imagedata-multistream
├── deepstream-nvdsanalytics
├── deepstream-opticalflow
├── deepstream-segmentation
├── deepstream-ssd-parser
├── deepstream-test1
├── deepstream-test1-rtsp-out
├── deepstream-test1-usbcam
├── deepstream-test2
├── deepstream-test3
├── deepstream-test4
└── README

2 示例介绍

2.1 deepstream-test1

基础 pipeline,实现一个 4 类别的目标检测,h264 文件输入,解码,推理,格式转换,渲染,输出,结构如下

filesrc --> h264parse --> nvv4l2decoder --> nvstreammux --> nvinfer --> nvvideoconvert --> nvdsosd --> nvegltransform --> nveglglessink

2.2 deepstream-test1-usbcam

功能与上边 test1 的基本相同,只是把输入由 filesrc 改为 v4l2src,支持 usb 相机输入,结构如下

v4l2src --> capsfilter--> videoconvert--> nvvideoconvert--> capsfilter --> nvstreammux --> nvinfer --> nvvideoconvert --> nvdsosd --> nvegltransform --> nveglglessink

2.3 deepstream-test1-rtsp-out

在 test1 的基础上,修改输出为 rtsp 输出,结构如下

filesrc --> h264parse --> nvv4l2decoder --> nvstreammux --> nvinfer --> nvvideoconvert --> nvdsosd --> capsfilter --> nvegltransform -->nvv4l2h264enc/nvv4l2h265enc --> rtph264pay/rtph265pay --> udpsink

2.4 deepstream-test2

使用 3 个 second gie,即 sgie1, sgie2, sgie3,作为次级推理,使用 nvtracker 做跟踪,结构如下

filesrc --> h264parse --> nvv4l2decoder --> nvstreammux --> nvinfer(pgie) --> nvtracker --> nvinfer(sgie1) --> nvinfer(sgie2) --> nvinfer(sgie3) --> nvvideoconvert --> nvdsosd --> nvegltransform --> nveglglessink

2.5 deepstream-test3

在 test1 的基础上,修改输入为 uridecodebin,支持不同类型的格式输入(rtsp/file),同时设置支持多路输入,在 streammux 中设置 batch 来一起推理

uridecodebin --> nvstreammux --> queue1 --> nvinfer(pgie) --> queue2 --> tiler --> queue3 --> nvvideoconvert --> queue4 --> nvdsosd --> queue5 --> nveglglessink

2.6 deepstream-test4

在 test1 的基础上,增加 nvmsgconv 和 nvmsgbroker 插件,将检测结果发送到云端,支持 Azure(mqtt) IOThub, kafka and AMQP broker(rabbitmq) 多种形式,使用 tee 插件,支持多路输出,结构如下

filesrc --> h264parse --> nvv4l2decoder --> nvstreammux --> nvinfer --> nvvideoconvert --> nvdsosd --> nvmsgconv --> nvmsgbroker --> tee --> queue --> fakesink ( tee --> queue --> nveglglessink)

注意上边标红的 tee 之后的输出是并列关系

2.7 deepstream-imagedata-multistream

在 test3 的基础上,加入 opencv 功能,在回调函数中获得图像数据进行拷贝,使用 opencv 绘制检测框并进行保存,结构如下

uridecodebin --> nvstreammux -->  nvinfer --> nvvideoconvert --> filter1 -->  tiler --> nvvideoconvert  --> nvdsosd --> nveglglessink

其中,opencv 的相关功能在 tiler_sink_pad_buffer_probe 回调函数中

2.8 deepstream-ssd-parser

将 nvinfer 替换成 nvinferserver 插件,在 nvidia Triton Inference Server 中部署 SSD 目标检测网络,deepstream 获得检测结果后进行后处理,包括 NMS 操作,添加相关信息到 metadata 中,然后编码保存成 mp4 文件,结构如下

filesrc --> h264parse --> nvv4l2decoder --> nvstreammux --> nvinferserver--> nvvideoconvert --> nvdsosd --> queue --> nvvideoconvert --> capsfilter --> encoder --> mpeg4videoparse--> qtmux--> filesink

2.9 deepstream-opticalflow

介绍了 nvof 和 nvofvisual 插件的使用,光流可视化(具体是什么东西还不太懂)

2.10 deepstream-segmentation

介绍了 nvsegvidsual 语义分割可视化插件的使用方法,使用 opencv 和 numpy 来处理,生成分割后的掩码图片

filesrc --> jpegparse--> nvv4l2decoder --> nvstreammux --> nvinfer --> nvsegvisual --> nvegltransform --> nveglglessink

2.11 deepstream-nvdsanalytics

在 test3 的基础上,新增了 nvdsanalytics 插件的使用,用来判断越线等行为,结构如下

uridecodebin --> nvstreammux --> queue1 --> nvinfer(pgie) --> queue2 --> tracker --> queue3 --> nvanalytics --> queue4 --> tiler --> queue5 --> nvvideoconvert --> queue6 --> nvdsosd --> queue7 --> nveglglessink

关于代码中具体函数的功能分析,有时间了再介绍一下

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页