社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

NVIDIA企业开发者社区 • 2 年前 • 430 次点击  


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

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

事实上 DeepStream 5.0 提供了大约 20 个 C/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 那么容易上手,因此 NVIDIA 在 github 上发布 DeepStream 的 Python 范例代码,在https://github.com/NVIDIA-AI-IOT/deepstream_python_apps可供自由下载使用,现在我们就在 Jetson Nano 2GB 上下载 DeepStream 的 python 范例,并且执行看看效果如何!


安装 DeepStream 的 Python 开发环境 


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

cd /opt/nvidia/deepstream/deepstream-5.0/lib
sudo   python3 setup.py install

执行后会在目录下生成“pyds.so”库文件,后面的 Python 代码中只要加入“import pyds”,就能导入 DeepStream 的 Python 模块开始使用,至于 DeepStream 的 Python 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_64 和 Jetson 平台。



安装的步骤可以在 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


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


 下载 DeepStream 的 Python 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 网页上打开这些文件。



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


1. README.md:这里的内容就是这个项目的总指引,包括前面的架构图等等。需要强调一点,里面虽然表示“支持 SDK 5.1版本”,但实际测试之后其实也支持 5.0 版本,因此已经安装 DeepStream 5.0 版本的人,就不用急着升级。

2. HOWTO.md:这里面处理前面安装“Gst Python”的步骤之外,下面所提到的技术原理也是非常重要的,对于进一步了解 DeepStream 的工作流是有帮助的,另外关于“元数据存取”的部分,最好也能先行浏览一下。

3. FAQ.md:这个文件整理了很多问题集,是非常有价值的部分,后面执行过程中遇到的一些问题,就先到这里来看看是否有对应的解决办法。


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


 DeepStream 的 Python 范例内容 


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

deepstream-test1:4 类物件检测功能,输入源为视频文件做


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

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


 执行第一个 Python 范例


既然以及安装好 Python 开发环境,我就来执行个最简单得到范例。前面所列范例中的 deepstream-test1 到 deepstream-test4 的功能,与 DeepStream 开发包预安装 C/C++ 版本的 deepstream-test1 到 deepstream-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

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



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



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/124184
 
430 次点击