引言
NVIDIA Deepstream SDK是一个通用的Steaming分析框架,可以让你从各个传感器中构建你自己的应用。它实际上是一个建立在GStreamer之上的SDK,GStreamer是一个开源的多媒体分析框架。NVIDIA将Deepstream作为SDK,旨在加速流视频分析所需的完整堆栈。它是一个模块化的SDK,允许开发人员为智能视频分析(IVA)构建一个高效的管道。您在这里看到的是一个典型的IVA管道,由Deepstream插件构建,它支持插件使用的底层硬件、管道的每个功能,并利用硬件体系结构移动数据,而无需任何内存拷贝。
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、AMQP 和 Azure IoT。可以创建自定义代理适配器。
deepstream安装过程
deepstream部署的方式与openvino差不多,它也提供了镜像,但需要前置条件,需要安装nvidia-docker,安装参考:docker学习笔记(9):nvidia-docker安装、部署与使用 下面从宿主机与docker两种方式介绍:
宿主机环境
输入以下命令以安装必备软件包:
$ sudo apt install \
libssl1.1 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstrtspserver-1.0-0 \
libjansson4 \
libyaml-cpp-dev
然后安装 librdkafka(为消息代理启用 Kafka 协议适配器,不知道是否是可选参数,但应该没有额外标示,还是需要安装的):
"""1. 从 GitHub克隆librdkafka存储库:"""
$ git clone https://github.com/edenhill/librdkafka.git
"""2. 配置和构建库:"""
$ cd librdkafka
# $ git reset --hard 7101c2310341ab3f4675fc565f64f0967e135a6a # 可选可不选,我安装并没有进行回退,没有啥问题,而且kafka主要存在deepstream-test5的例程
./configure
$ make
$ sudo make install
"""将生成的库复制到deepstream目录:"""
$ sudo mkdir -p /opt/nvidia/deepstream/deepstream-6.1/lib
$ sudo cp /usr/local/lib/librdkafka* /opt/nvidia/deepstream/deepstream-6.1/lib
安装完必要依赖后,可以直接从官网中下载Deepstream SDK包:https://developer.nvidia.com/deepstream-getting-started
方便定义过程说明阿亮完全不同过程定义的部分结果说明,当前是
$ sudo tar -xvf deepstream_sdk_v6.1.0_jetson.tbz2 -C /
$ cd /opt/nvidia/deepstream/deepstream-6.1
$ sudo ./install.sh
$ sudo ldconfig
docker镜像
这里如果装了nvidia-docker的话,直接一句命令就能省略上述所有步骤,直接从nvidia仓库中拉取相关版本的镜像,如下表:
Container |
Container 拉取命令 |
---|---|
base docker (仅包含运行时库和GStreamer插件。可以用作为DeepStream应用程序构建自定义Docker的基础) |
|
devel docker (包含整个SDK以及用于构建DeepStream应用程序和graph composer的开发环境) |
|
Triton推理服务器docker与Triton推理服务器和依赖项一起安装,以及用于构建DeepStream应用程序的开发环境 |
|
安装了DeepStream-test5-app并删除了所有其他参考应用程序的DeepStream IoT docker |