deepstream学习笔记(一):C与python环境部署与测试

      最后更新: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
      在这里插入图片描述

      方便定义过程说明阿亮完全不同过程定义的部分结果说明,当前是

      docker镜像

      这里,如果安装了nvidia-docker,一个直接命令可以跳过上面的所有步骤,从相应的版本直接从nvidia仓库中提取镜子,如下面所示:

      Docker Containers for dGPU

      Container

      容器拉动命令

      基础多克(只包含运行时间库和GStreamer插件)。它可以用于构建自定义的多克作为 DeepStream应用程序)

      docker pull nvcr.io/nvidia/deepstream:6.1-base

      devel docker (包含整个SDK以及用于构建DeepStream应用程序和graph composer的开发环境)

      docker pull nvcr.io/nvidia/deepstream:6.1-devel

      Triton推理服务器与Triton推理服务器和依赖,以及构建 DeepStream应用程序的开发环境都安装了

      docker pull nvcr.io/nvidia/deepstream:6.1-triton

      安装了 DeepStream-test5-app,并从 DeepStream IoT 端口中删除所有其他参考应用程序

      docker pull nvcr.io/nvidia/deepstream:6.1-iot

      DeepStream samples docker (包含运行时库、GStreamer插件、参考应用程序和样本流、模型和配置)

      docker pull nvcr.io/nvidia/deepstream:6.1-samples

      如果您需要超过六种。你可以在nvidia仓库找到,地址:https://catalog.ngc.nvidia.com/orgs/nvidia/containers/deepstream/tags

      与一般的nvidia镜像一样,您可以看到链接描述,它不再在这里描述。 上面的环境是Cpp环境和Python预先条件环境,可以直接使用源代码测试。

      Deepstream-app C环境测试

      deepstream-sdk通常测试所有源代码,用于c语言的 deepstream-app,所以你不需要再安装,另外,如果您要验证前一个环境是否正确安装,请在此,您可以输入以下命令查看,在安装通用sdk时, deepstream-app命令已经将预编译的可执行文件映射到文件夹中,所以可以全局使用:

      如果没有问题,则将输出相关的依赖版本:

      这里,如果你选择像我一样的深流镜子,进入容器后,初始目录是/opt/nvidia/deepstream/deepstream-6.1当前目录包含四个文件夹,除了脚本和一些注释文件夹(可执行文件的预编译目录)lib(依赖地址)样品(地址如配置文件和测试资源(视频))sources(deepstream sdk开源的源码所在目录)那么去源目录。

      这里的文件夹叙述部分参考 英伟达DeepStream学习笔记2——deepstream_sdk文件夹解析 :

      源目录结构如下:

      这里面tracker_DeepSORTSONYCAudioClassifier是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文件测试:

      输出日志为:

      Deepstream-app python环境测试

      以上为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 绑定环境。

      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.sopyds-1.1.3-py3-none-linux_x86_64.whl.然后使用Python下载离线包:

      因此, Python环境的安装已经完成。

      deepstream-test1测试

      这里同样环境需要更改一下,如果没有桌面的话,需要将sink的配置改为fakesink:
      在这里插入图片描述

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/30137.html

          热门文章

          文章分类