大部分我们在网上看到的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-AIOT的github仓里有非常多基于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范例,并且执行看看效果如!
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里详细的说明。
根据下图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安装包里面,需要从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),因此在网页上打开阅读会比较方便。这里主要有三个文件,对我们的使用会有很大的帮助:
NVIDIA的使用手册一向都撰写的非常详细,因此先耐心地阅读这些文件,会得到很多助益。接下来看看想范例的内容有哪些?
目前这里提供12个Python范例,每个范例存放在对应的目录之下,其目录名称与简单功能描述如下列表(名称以目录名为主):
以上范例,从最粗浅的单检测器调用/单流输入(视频或USB摄像头)/单流输出(显示器或RTSP),到进阶的多检测器叠加与追踪功能,还有透过msgbroker将分析数据上传到云端服务器的范例,以及结合NVIDIA Triton推理服务器的资源应用等等,内容相当丰富而且实用,在后面的文章中我们将挑选5~6个范例,带着大家去实现并且进行简单的代码说明。
既然以及安装好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的功能。【完】
好文章,需要你的鼓励
临近年底,苹果公布了2024年App Store热门应用和游戏榜单,Temu再次成为美国下载量最多的免费应用。
云基础设施市场现在已经非常庞大,很难再有大的变化。但是,因为人们可以轻松地关闭服务器、存储和网络——就像开启它们那样,预测全球云基础设施开支可能非常困难。