1.NVIDIA Deepstream开发指南中文版--欢迎使用 DeepStream 文档

欢迎使用 DeepStream 文档

在开始之前,请确保您了解如何将 DeepStream 6.0 自定义模型迁移到 DeepStream 6.1。 详细信息可在本文档的自述文件第一部分中找到。

DeepStream 6.1 是支持 NVIDIA® Jetson™ Xavier、NVIDIA® Jetson™ NX 和 NVIDIA® Jetson™ Orin 的新功能的版本。 它是支持 Ubuntu 20.04 LTS 的版本。

DS 6.1 仅可用于 x86 上的生产环境。 适用于 Jetson 的 DS 6.1 基于 JP 5.0.1 DP,仅供开发人员预览。

NVIDIA DeepStream 概述

DeepStream 是一个流式分析工具包,用于构建人工智能驱动的应用程序。 它将流数据作为输入——来自 USB/CSI 摄像头、文件中的视频或 RTSP 上的流,并使用 AI 和计算机视觉从像素中生成内容理解,以更好地了解环境。 DeepStream SDK 可以成为许多视频分析解决方案的基础层,例如了解智慧城市中的交通和行人、医院中的健康和安全监控、零售中的自助结账和分析、检测制造设施中的组件缺陷等。 在此处阅读有关 DeepStream 的更多信息。

在这里插入图片描述

DeepStream 通过 Python 绑定支持使用 C/C++ 和 Python 进行应用程序开发。为了更容易上手,DeepStream 附带了几个 C/C++ 和 Python 的参考应用程序。请参阅 C/C++ 示例应用程序源详细信息Python 示例应用程序和绑定源详细信息部分以了解有关可用应用程序的更多信息。有关一些示例 DeepStream 参考应用程序,请参阅 NVIDIA-AI-IOT GitHub 页面

核心 SDK 由几个硬件加速器插件组成,这些插件使用 VIC、GPU、DLA、NVDEC 和 NVENC 等加速器。通过在专用加速器中执行所有计算繁重的操作,DeepStream 可以为视频分析应用程序实现最高性能。 DeepStream 的关键功能之一是边缘和云之间的安全双向通信。 DeepStream 附带了几个开箱即用的安全协议,例如使用用户名/密码的 SASL/Plain 身份验证和 2-way TLS 身份验证。要了解有关这些安全功能的更多信息,请阅读 IoT 章节。要了解有关双向功能的更多信息,请参阅本指南中的双向消息部分。

DeepStream 构建在 CUDA-X 堆栈中的几个 NVIDIA 库之上,例如 CUDA、TensorRT、NVIDIA® Triton™ 推理服务器和多媒体库。 TensorRT 在 NVIDIA GPU 上加速 AI 推理。 DeepStream 在 DeepStream 插件中抽象了这些库,使开发人员可以轻松构建视频分析流程,而无需学习所有单独的库。

DeepStream 针对 NVIDIA GPU 进行了优化; 该应用程序可以部署在运行 Jetson 平台的嵌入式边缘设备上,也可以部署在 T4 等更大的边缘或数据中心 GPU 上。 DeepStream 应用程序可以使用 NVIDIA 容器运行时部署在容器中。 这些容器在 NGC、NVIDIA GPU 云注册表上可用。 要了解有关使用 docker 部署的更多信息,请参阅 Docker 容器一章。 DeepStream 应用程序可以在边缘使用 GPU 上的 Kubernetes 进行编排。 NGC 上提供了用于部署 DeepStream 应用程序的 Helm 图表示例

DeepStream 图架构

DeepStream 是使用开源 GStreamer 框架构建的优化图架构。 下图显示了从输入视频到输出见解的典型视频分析应用程序。 所有单独的块都是使用的各种插件。 底部是在整个应用程序中使用的不同硬件引擎。 优化内存管理,插件之间的零内存复制和各种加速器的使用确保了最高性能。

在这里插入图片描述

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-nvmsgconvGst-nvmsgbroker 插件。 Gst-nvmsgconv 将元数据转换为模式有效负载,Gst-nvmsgbroker 建立与云的连接并发送遥测数据。 有几种内置的代理协议,例如 Kafka、MQTT、AMQP 和 Azure IoT。 可以创建自定义代理适配器。

DeepStream 参考应用

首先,开发人员可以使用提供的参考应用程序。 还包括这些应用程序的源代码。 端到端应用程序称为 deepstream-app。 这个应用程序是完全可配置的 - 它允许用户配置任何类型和数量的源。 用户还可以选择要运行推理的网络类型。 它预先构建了一个推理插件来进行对象检测,并由推理插件级联以进行图像分类。 有一个配置跟踪器的选项。 对于输出,用户可以在屏幕上渲染、保存输出文件或通过 RTSP 流式传输视频之间进行选择。

在这里插入图片描述

这是开始学习 DeepStream 功能的一个很好的参考应用程序。 此应用程序在 DeepStream 参考应用程序 - deepstream-app 一章中有更详细的介绍。 此应用程序的源代码位于 /opt/nvidia/deepstream/deepstream-6.1/sources/apps/sample_apps/deepstream-app。 此应用程序适用于所有 AI 模型,并在各个自述文件中提供了详细说明。 性能基准测试也使用此应用程序运行。

开始构建应用程序

对于希望构建自定义应用程序的开发人员来说,deepstream-app 在开始开发时可能会有点不知所措。 SDK 附带几个简单的应用程序,开发人员可以在其中了解 DeepStream 的基本概念,构建简单的流程,然后继续构建更复杂的应用程序。

在这里插入图片描述

开发人员可以从 deepstream-test1 开始,它几乎就像一个 DeepStream hello world。 在这个应用程序中,开发人员将学习如何使用各种 DeepStream 插件构建 GStreamer 流程。 他们将从文件中获取视频、解码、批处理,然后进行对象检测,最后在屏幕上渲染这些框。 deepstream-test2 从 test1 开始,将辅助网络级联到主网络。 deepstream-test3 展示了如何添加多个视频源,最后 test4 将展示如何使用消息代理插件来实现 IoT 服务。 这 4 个入门应用程序在本机 C/C++ 和 Python 中都可用。 要详细了解 DeepStream 中的这些应用程序和其他示例应用程序,请参阅 C/C++ 示例应用程序源详细信息Python 示例应用程序和绑定源详细信息

使用 Graph Composer 无需编码即可创建 DeepStream 应用程序。 有关详细信息,请参阅 Graph Composer 介绍

DeepStream in Python

在创建 AI 模型时,Python 易于使用并被数据科学家和深度学习专家广泛采用。 NVIDIA 引入了 Python 绑定来帮助您使用 Python 构建高性能 AI 应用程序。 DeepStream 流程可以使用 Gst-Python(GStreamer 框架的 Python 绑定)构建。

在这里插入图片描述

DeepStream Python 应用程序使用 Gst-Python API 操作来构建流程并使用探测函数访问流程中各个点的数据。 数据类型都在本机 C 中,需要通过 PyBindings 或 NumPy 的 shim 层才能从 Python 应用程序访问它们。 张量数据是推理后得到的原始张量输出。 如果您尝试检测对象,则需要通过解析和聚类算法对该张量数据进行后处理,以在检测到的对象周围创建边界框。 要开始使用 Python,请参阅本指南中的 Python 示例应用程序和绑定源详细信息以及 DeepStream Python API 指南中的“DeepStream Python”。

  • 40
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 要在 DeepStream C 中进行推流,您需要使用一个合适的 GStreamer 元素。以下是一些可以使用的元素: 1. `nvstreammux`: 用于将多个输入流合并成一个输出流。 2. `nvdsosd`: 用于在视频中叠加边框和标签等信息。 3. `nvv4l2h264enc` 或 `nvv4l2h265enc`: 用于将视频编码为 H.264 或 H.265 格式。 4. `rtph264pay` 或 `rtph265pay`: 用于将编码的视频流打包成 RTP 数据包。 5. `udpsink`: 用于将 RTP 数据包通过 UDP 协议发送到网络上的接收方。 以下是使用这些元素进行推流的示例 GStreamer 管道: ``` gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=1920,height=1080,framerate=30/1,format=NV12' ! nvvidconv ! 'video/x-raw(memory:NVMM),width=640,height=480' ! nvstreammux name=mux ! nvinfer config-file-path=infer_config.txt ! nvdsosd ! nvv4l2h264enc ! h264parse ! rtph264pay ! udpsink host=<IP address> port=<port number> ``` 此管道从 Argus 相机捕获视频流,将其转换为指定格式,然后使用 `nvstreammux` 元素将其合并为单个流。随后,`nvinfer` 元素会在视频流上运行推理模型并生成边框和标签。`nvdsosd` 元素将这些信息叠加在视频上,然后使用 `nvv4l2h264enc` 元素将视频编码为 H.264 格式。`h264parse` 元素用于解析 H.264 流,`rtph264pay` 元素将其打包为 RTP 数据包,并使用 `udpsink` 元素通过 UDP 协议将数据包发送到指定的 IP 地址和端口号。 请注意,上述管道仅提供了一个示例,并且可能需要根据您的实际需求进行修改。您需要根据自己的场景和设备进行适当的调整和配置。 ### 回答2: DeepStream是一款由英伟达推出的高性能AI边缘计算平台。DeepStream C是DeepStream平台的C版本,用于实现视频流处理功能。在DeepStream C中,推流即是将处理过的视频数据流送往下一级处理或存储,以供后续使用。 在DeepStream C中,推流通常分为两个步骤:捕获和处理。 首先,需要通过视频源(例如摄像头或网络摄像头)捕获视频流。DeepStream C提供了相应的API和工具,可以方便地实现视频流的捕获。捕获到的视频流可以是实时的,也可以是保存在本地或远程服务器中的文件。 接下来,需要对捕获到的视频流进行处理。DeepStream C提供了多种功能和算法,如目标检测、人脸识别、行为分析等,可以根据具体需求进行选择和配置。处理过程中,可以对视频进行实时分析,提取感兴趣的特征或事件,并进行相应的响应和处理。 处理完成后,DeepStream C可以通过各种协议(如RTSP、HLS、RTP等)将处理后的视频流推送到其他设备或系统中。这样,其他设备或系统就可以及时获取到处理过的视频数据,进行进一步的应用,如视频监控、智能分析等。 总之,DeepStream C版本提供了一系列的功能和接口,方便用户进行视频流的捕获和处理,并能够将处理后的视频数据流推送到其他设备或系统,以满足更多的应用需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扫地的小何尚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值