最后更新:2022-07-20 15:00:28 手机定位技术交流文章
NVIDIA Deepstream SDK是一个通用的Steaming分析框架,你可以从各种传感器中建立自己的应用程序。它实际上是一个基于GStreamer的SDK,GStreamer是一个开放源代码的多媒体分析框架。NVIDIA开发了 Deepstream作为SDK,一个完整的堆栈加速流视频分析.这是一个模块化SDK,允许开发者建立一个高效的视频分析(IVA)管道。你在这里看到的是一个典型的IVA管道,由 Deepstream插件构建,它支持该插件所使用的硬件和管道的每个功能,并使用硬件架构来移动数据,而且不需要任何记忆复制。
DeepStream 以 GStreamer 插件的形式提供构建块,可用于构建高效的视频分析管道。有超过 20 个插件为各种任务进行了硬件加速。
- 流数据可以通过RTSP通过网络或从本地文件系统或直接从相机传输。使用CPU捕获流程。一旦帧进入内存,然后它们被发送以使用NVDEC加速器解码。用于解码的插件称为 Gst-nvvideo4linux2 。
- 解码后,有一个可选的图像预处理步骤,输入图像可以在推理之前预处理.预处理可以是图像变形或颜色空间转换。 Gst-nvdewarper 插件可以对鱼眼或 360 度相机的图像进行反扭曲。gst- nvvideoconvert 这个插件可以将帧转换成彩色格式。这些插件使用GPU或VIC(视觉图像合成器)。
- 下一步是批量帧,以获得最佳推理功率。 批量处理是使用Gst-nvstreammux插件完成。
- 对帧进行批处理后,把它寄去作为扣减。在运行NVIDIA推理加速器时,TensorRT可以执行推理,也可以使用 Triton 推理服务器在 TensorFlow 或PyTorch等本机框架中完成。使用了实际的TensorRT推理 Gst-nvinfer 由插件实现,使用Triton的原因是使用 Gst-nvinferserver 插件已完成。推理可以为 Jetson AGX Xavier 和 Xavier NX 使用 GPU 或 DLA(深度学习加速器)。
- 在推理之后,下一步可能涉及跟踪对象。SDK 中有几个内置的参考跟踪器,从高性能到高精度。使用 Gst-nvtracker 插件执行对象跟踪。
- 为了创建可视化工件,例如边界框、分割掩码、标签,有一个名为 Gst-nvdsosd 的可视化插件。
- 最后,为了输出结果,DeepStream提供多种选项:使用屏幕上的边框显示输出,将输出保存到本地磁盘,通过RTSP流传输,或仅发送元数据到云上。为了向云上发送元数据,DeepStream使用Gst-nvmsgconv和Gst-nvmsgbroker插件。Gst-nvmsgconv将元数据转换为有效负载模式,Gst-nvmsgbroker建立连接到云上并发送遥感数据。有几个内部代理协议,例如 Kafka 、 MQTT 、 AMXP 和 Azure IoT 。您可以创建自定义代理适配器.
深流的部署方式类似于openvino,它也提供了镜像,但需要前置条件,你需要安装nvidia-docker,安装参考: docker学习说明(9):安装、部署和使用nvidia-docker 下面从宿主机与docker两种方式介绍:
输入下列命令安装所需的软件包:
然后安装librdkafka(打开Kafka协议适配器用于消息代理,不确定是否是一个选项参数,但不应该有额外的标签或需要安装):
Deepstream SDK包可以直接从网站下载: https://developer.nvidia.com/deepstream-getting-started
方便定义过程说明阿亮完全不同过程定义的部分结果说明,当前是
这里,如果安装了nvidia-docker,一个直接命令可以跳过上面的所有步骤,从相应的版本直接从nvidia仓库中提取镜子,如下面所示:
|
Container |
容器拉动命令 |
|---|---|
基础多克(只包含运行时间库和GStreamer插件)。它可以用于构建自定义的多克作为 DeepStream应用程序) |
|
devel docker (包含整个SDK以及用于构建DeepStream应用程序和graph composer的开发环境) |
|
Triton推理服务器与Triton推理服务器和依赖,以及构建 DeepStream应用程序的开发环境都安装了 |
|
安装了 DeepStream-test5-app,并从 DeepStream IoT 端口中删除所有其他参考应用程序 |
|
DeepStream samples docker (包含运行时库、GStreamer插件、参考应用程序和样本流、模型和配置) |
|
如果您需要超过六种。你可以在nvidia仓库找到,地址:https://catalog.ngc.nvidia.com/orgs/nvidia/containers/deepstream/tags
与一般的nvidia镜像一样,您可以看到链接描述,它不再在这里描述。 上面的环境是Cpp环境和Python预先条件环境,可以直接使用源代码测试。
deepstream-sdk通常测试所有源代码,用于c语言的 deepstream-app,所以你不需要再安装,另外,如果您要验证前一个环境是否正确安装,请在此,您可以输入以下命令查看,在安装通用sdk时, deepstream-app命令已经将预编译的可执行文件映射到文件夹中,所以可以全局使用:
如果没有问题,则将输出相关的依赖版本:
这里,如果你选择像我一样的深流镜子,进入容器后,初始目录是/opt/nvidia/deepstream/deepstream-6.1当前目录包含四个文件夹,除了脚本和一些注释文件夹(可执行文件的预编译目录),lib(依赖地址),样品(地址如配置文件和测试资源(视频)),sources(deepstream sdk开源的源码所在目录)那么去源目录。
这里的文件夹叙述部分参考 英伟达DeepStream学习笔记2——deepstream_sdk文件夹解析 :
源目录结构如下:
这里面tracker_DeepSORT、SONYCAudioClassifier是deepstream 6.1新加入的适配源码包,虽然目前我还没用上,所以这里只提一下。deepstream主要的源码都在apps/sample_apps中,目录结构为:
更详细的描述可以在本目录文件的官方描述中找到:
C/C++ Sample Apps Source Details
. 我们进入deepstream-test1文件夹,这里需要区分一件事,我开始了,因为,主机本身使用服务器,是没有桌面的,所以也没有x11,那个人也没进来了。这里要将
"nveglglessink"改为fakesink,原因是nveglglessink插件将在显示上显示结果。如果您不想显示结果,您可以使用fakesink插件(PS:我一开始不知道问题,我仍然想知道为什么该程序可以运行,但运行了几帧后,我到nvidia网站并提到了两个问题..我只能说该文件还没有仔细检查)。
如果你有一个桌面或不需要修改,你可以直接修改Makefile,添加当前的库达版本编译数:
在没有问题的情况下,您可以在sdk样本中选择下列h264文件测试:
输出日志为:
以上为c语言环境,它也是Python的一些预定义环境,如果没有安装相应的依赖库, python 编译不兼容.如下图所示,官方并没有说他们重新设计了Python接口,相反,它通过 pyBindings映射。python通过 pybindings访问深流C库,pybindings使用的第三方库是 pybind11。

DeepStream Python应用程序使用Gst-Python API操作构建管道,并使用检测函数访问管道中的数据。数据类型是主机C,它们需要通过PyBindings或NumPy填充层来从Python应用程序中访问。密度数据是从计算中导出的原始密度输出。如果你试图检测一个物体,然后在处理后,必须分析和分类数据。创建在检测对象周围的边界框。要开始使用Python,请参阅本指南中的Python实例应用程序源细节,以及 DeepStream Python API指南中的“DeepStream Python”。
因此,我们主要安装了 DeepStream python 绑定环境。
官方的dockerfile不发布Python环境的相应的版本,因此不管主机或镜子需要一步步部署,首先安装依赖性:
然后进入到deepstream sdk中的sources源代码路径下,拉下来python的编译源码:
确保我们将新证书添加到当前使用的gst-python git服务器上:
配置和安装gst-python:
没有问题的情况下,就能进行cmake了。Python bindings 是使用 CMake 编译的。它的主要参数为:
| 变量 | 默认值 | 目的 | 可用值 |
|---|---|---|---|
| DS_VERSION | 6.1 | 用于确定默认的 deepstream 库路径 | 必须与计算机上安装的深流版本相匹配 |
| PYTHON_MAJOR_VERSION | 3 | 要设置绑定的 python 版本 | 3 |
| PYTHON_MINOR_VERSION | 8 | 要设置绑定的 python 版本 | 6、8 |
| PIP_PLATFORM | linux_x86_64 | 为选择目标架构编译绑定 | linux_x86_64, linux_aarch64 |
| DS_PATH | /opt/nvidia/deepstream/deepstream-${DS_VERSION} | 在深流库中可用的路径 | 应该与现有的 deepstream 库文件夹匹配 |
因为我现在的路径与默认值路径基本一致,宿主机与容器也是在x86下面,所使用的deepstream版本为6.1,所以可以选择快速构建,或者加个指定版本:
在编译完成后,在当前的构建路径下不会发生问题pyds.so与pyds-1.1.3-py3-none-linux_x86_64.whl.然后使用Python下载离线包:
因此, Python环境的安装已经完成。
这里同样环境需要更改一下,如果没有桌面的话,需要将sink的配置改为fakesink:
本文由 在线网速测试 整理编辑,转载请注明出处。