NVIDIA Jetson Nano 2GB 系列文章(34):DeepStream 安装Python开发环境

大部分我们在网上看到的DeepStream示范,都是用开发包里提供的deepstream-app这个应用,然后透过“-c”去指定配置文件,来实现很多DeepStream的各种用法,包括同时导入多个输入源、结合多个检测器等等,让我们很轻松地体验到DeepStream的强大与易用。

大部分我们在网上看到的DeepStream示范,都是用开发包里提供的deepstream-app这个应用,然后透过“-c”去指定配置文件,来实现很多DeepStream的各种用法,包括同时导入多个输入源、结合多个检测器等等,让我们很轻松地体验到DeepStream的强大与易用。

但是deepstream-app这个范例为了展现完整的功能,反而不适合开发人员去修改成自己想要的专属应用,当然不是说做不到,而是你必须花费更多时间去解读deepstream_app_main.cdeepstream_app_config_parser.cdeepstream_app.c这三支代码的所有内容,总计超过2,200行,如果能了解透彻绝对有助于驾驭DeepStream的绝大部分功能,不过这对初学者来说就太过艰辛了。

事实上DeepStream 5.0提供了大约20C/C++所写成的范例代码,存放的位置在/opt/nvidia/deepstream/deepstream-5.0/sources/apps/sample_apps里,deepstream-app是其中一个。如果要循序渐进的话,最好参考DeepStream开发手册对这些范例的介绍与使用说明,

https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_C_Sample_Apps.html

NVID-AIOTgithub仓里有非常多基于DeepStream框架所开发的应用,几乎都是以deepstream-test系列的C/C++代码为基础进行修改,例如“redaction_with_deepstream”遮脸应用、“deepstream_pose_estimation”姿势识别、“deepstream_lpr_app”车牌识别、“Deepstream-Dewarper-App”鱼眼镜头还原应用、“deepstream-occupancy-analytics”人流分析。。。等等。

但是C/C++毕竟不像Python那么容易上手,因此NVIDIAgithub上发布DeepStreamPython范例代码,在https://github.com/NVIDIA-AI-IOT/deepstream_python_apps 可供自由下载使用,现在我们就在Jetson Nano 2GB上下载DeepStreampython范例,并且执行看看效果如!

  • 安装DeepStreamPython开发环境

Python接口的安装对DeepStream而言是个“可选项”,因此安装DeepStream的过程并不会自动安装Python接口,这部分需要手动处理,请执行以下指令进行安装:

cd /opt/nvidia/deepstream/deepstream-5.0/lib

sudo python3 setup.py install

执行后会在目录下生成“pyds.so”库文件,后面的Python代码中只要加入“import pyds”,就能导入DeepStreamPython模块开始使用,至于DeepStreamPython API接口定义细节,请自行参考

https://docs.nvidia.com/metropolis/deepstream/python-api/index.html里详细的说明。

  • 安装Gst Python这个绑定(binding)元件

根据下图DeepStream Python应用的执行工作流所示,这个开发环境还需要安装“Gst Python”元件进行“Python Bindings”任务,这样才能执行管道建构(Pipeline Construction)、访问元数据(MetaData Access)与图像数据访问(Image Data Access)等功能。

DeepStream元数据包含推断结果和分析中使用的其他信息,元数据附加到每个管道组件接收的Gst缓冲区,SDK元数据库是用C/C++开发的,Python绑定提供了对Python应用程序元数据的访问,绑定在编译模块中提供,可用于x86_64Jetson平台。

NVIDIA Jetson Nano 2GB 系列文章(34):DeepStream 安装Python开发环境

安装的步骤可以在DeepStream开发手册“Python Sample Apps Source Detail”中找到(https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_Python_Sample_Apps.html),我们也将安装步骤列在下面:

sudo apt-get install -y 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

好了,到这里就完成DeepStreamPython开发环境的配置,现在就可以开始用Python语言调用DeepStream接口去开发应用了。不过相信绝大部分的读者是不会有耐性,去从零开始学习DeepStreamPython开发,最简单的方式就是用NVIDIA提供的Python范例来进行测试与修改。

  • 下载DeepStreamPython App范例

这部分内容并不包含在DeepStream安装包里面,需要从NVIDIA提供的开源仓下载,网址在 https://github.com/NVIDIA-AI-IOT/deepstream_python_apps,直接下载就能使用。不过由于这套范例的设定文件,都已做好相关环境的路径配置,因此最好下载到指定的位置(/opt/nvidia/deepstream/deempstream/sources)就可以节省很多路径调整的时间。

请执行以下指令下载deepstream_python_apps到本地:

cd /opt/nvidia/deepstream/deempstream/sources

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

sudo chmod 777 -R deepstream_python_apps

最后一个步骤,是为了让上我们具备足够的权限去修改这个目录下的文件。

  • 阅读重要文件

在开始进入范例执行之前,建议大家先看一下里面的几个重要文件,您可以直接进入deepstream_python_app目录,用自己惯用的编辑器去打开,也可以直接在前面的github网页上打开这些文件。

NVIDIA Jetson Nano 2GB 系列文章(34):DeepStream 安装Python开发环境

由于文件都是Markdown格式(.md),因此在网页上打开阅读会比较方便。这里主要有三个文件,对我们的使用会有很大的帮助:

  1. README.md:这里的内容就是这个项目的总指引,包括前面的架构图等等。需要强调一点,里面虽然表示“支持SDK 5.1版本”,但实际测试之后其实也支持5.0版本,因此已经安装DeepStream 5.0版本的人,就不用急着升级。
  2. HOWTO.md:这里面处理前面安装“Gst Python”的步骤之外,下面所提到的技术原理也是非常重要的,对于进一步了解DeepStream的工作流是有帮助的,另外关于“元数据存取”的部分,最好也能先行浏览一下。
  3. FAQ.md:这个文件整理了很多问题集,是非常有价值的部分,后面执行过程中遇到的一些问题,就先到这里来看看是否有对应的解决办法。

NVIDIA的使用手册一向都撰写的非常详细,因此先耐心地阅读这些文件,会得到很多助益。接下来看看想范例的内容有哪些?

  • DeepStreamPython范例内容:

目前这里提供12Python范例,每个范例存放在对应的目录之下,其目录名称与简单功能描述如下列表(名称以目录名为主):

  • deepstream-test14类物件检测功能,输入源为视频文件做
  • deepstream-test1-usbcam:用USB摄像头作为deepstream-test1的输入源
  • deepstream-test1-rtsp-out:用RTSP视频流作为deepstream-test1输出
  • deepstream-test24类物件检测+目标追踪+物件属性分类的管道
  • deepstream-test3:同时执行多视频流输入源的4类物件检测
  • deepstream-test4:透过msgbroker将分析结果发送到云端指定地址
  • deepstream-imagedata-multistream:结合“图像缓冲区访问”功能的多视频流处理
  • deepstream- ssd-parser:通过Triton执行ssd推理,在Python进行输出解析
  • deepstream-opticalflow:以NumPy阵列返回流矢量的光流和可视化管道
  • deepstream-segmentationNumPy数组中返回分割掩码的分割与可视化流水线
  • deepstream-nvdsanalytics:具有分析插件的多流管道
  • runtime_source_add_delete:在运行时添加/删除源流

以上范例,从最粗浅的单检测器调用/单流输入(视频或USB摄像头)/单流输出(显示器或RTSP),到进阶的多检测器叠加与追踪功能,还有透过msgbroker将分析数据上传到云端服务器的范例,以及结合NVIDIA Triton推理服务器的资源应用等等,内容相当丰富而且实用,在后面的文章中我们将挑选5~6个范例,带着大家去实现并且进行简单的代码说明。

  • 执行第一个Python范例:

既然以及安装好Python开发环境,我就来执行个最简单得到范例。前面所列范例中的deepstream-test1deepstream-test4的功能,与DeepStream开发包预安装C/C++版本的deepstream-test1deepstream-test4是一样的功能,只是用不同语言去调用而已。

由于C/C++版本的范例执行文件已经都事先编译好,因此我们可以直接在任何路径中进行调用,接下去就执行以下指令,感受以下两种范例的功能是否一致:

cd <路径>/deepstream_python_apps/apps/deepstream-test1

# 这个目录下有个 dstest1_pgie_config.txt

# 执行 deepstream_test_1.py,会以这个目录下的 dstest1_pgie_config.txt 为配置

python3 deepstream_test_1.py ../../../../samples/streams/sample_720p.h264

# 执行 deepstream-test1-app,会以这个目录下的 dstest1_pgie_config.txt 为配置

deepstream-test1-app ../../../../samples/streams/sample_720p.h264

看看二者所执行的结果是否完全一样(如下截图)?

 

NVIDIA Jetson Nano 2GB 系列文章(34):DeepStream 安装Python开发环境

好了,现在是否清楚这几个Python范例与C/C++范例之间的关系!后面将再以其他几个实用范例带着大家一起使用Python去实现DeepStream的功能。【完】

来源:业界供稿

0赞

好文章,需要你的鼓励

2021

09/30

15:34

分享

点赞

邮件订阅