> 文档中心 > 4.NVIDIA Deepstream开发指南中文版--C和C++示例应用程序源详细信息

4.NVIDIA Deepstream开发指南中文版--C和C++示例应用程序源详细信息


NVIDIA Deepstream C和C++示例应用程序源详细信息

在这里插入图片描述

DeepStream SDK 包包括包含插件、库、应用程序和源代码的档案。 对于 Debian 安装(在 Jetson 或 dGPU 上)和 SDK Manager 安装,源目录位于 /opt/nvidia/deepstream/deepstream-6.1/sources。 对于 tar 包,源文件位于提取的 deepstream 包中。 DeepStream Python 绑定和示例应用程序可作为单独的包提供。 有关更多信息,请参阅 https://github.com/NVIDIA-AI-IOT/deepstream_python_apps。

使用 Graph Composer 创建的 DeepStream 图列在参考图部分下。 有关详细信息,请参阅 Graph Composer 简介。

Sample source details

参考测试应用

源目录中的路径

描述

Sample test application 1

apps/sample_apps/deepstream-test1

如何将 DeepStream 元素用于单个 H.264 流的示例:filesrc → decode → nvstreammux → nvinfer(primary detector) → nvdsosd → renderer。 这个应用程序使用 resnet10.caffemodel 进行检测。

Sample test application 2

apps/sample_apps/deepstream-test2

如何将 DeepStream 元素用于单个 H.264 流的示例: filesrc → decode → nvstreammux → nvinfer (primary detector) → nvtracker → nvinfer (secondary classifier) → nvdsosd → renderer. 这个应用程序使用 resnet10.caffemodel 进行检测和 3 个分类器模型(即 Car Color、Make 和 Model).

Sample test application 3

apps/sample_apps/deepstream-test3

基于 deepstream-test1(简单测试应用程序 1)构建,演示如何:

  • 在流程中使用多个来源。

  • 使用 uridecodebin 接受任何类型的输入(例如 RTSP/文件)、任何 GStreamer 支持的容器格式和任何编解码器。

  • 配置 Gst-nvstreammux 以生成一批帧并对其进行推断以更好地利用资源。

  • 提取流元数据,其中包含有关批处理缓冲区中帧的有用信息。

这个应用程序使用 resnet10.caffemodel 进行检测。

Sample test application 4

apps/sample_apps/­deepstream-test4

基于 deepstream-test1 构建单个 H.264 流:filesrc、decode、nvstreammux、nvinfer、nvdsosd、renderer 以演示如何:

  • 在流程中使用 Gst-nvmsgconv 和 Gst-nvmsgbroker 插件。

  • 创建 NVDS_META_EVENT_MSG 类型元数据并将其附加到缓冲区。

  • 将 NVDS_META_EVENT_MSG 用于不同类型的对象,例如 车辆和人。

  • 如果元数据通过 extMsg 字段扩展,则实现“复制”和“释放”功能以供使用。

这个应用程序使用 resnet10.caffemodel 进行检测。

Sample test application 5

apps/sample_apps/­deepstream-test5

构建在 deepstream-app 之上。 证明:

  • 在多流流程中使用 Gst-nvmsgconv 和 Gst-nvmsgbroker 插件。

  • 如何将配置文件中的 Gst-nvmsgbroker 插件配置为接收器插件(用于 KAFKA、Azure 等)。

  • 如何处理来自 RTSP 服务器或摄像头的 RTCP 发送方报告,并将 Gst Buffer PTS 转换为 UTC 时间戳。

有关详细信息,请参阅 deepstream_test5_app_main.c 中的 RTCP Sender Report 回调函数 test5_rtcp_sender_report_callback() 注册和使用。 使用 rtpmanager 元素的“handle-sync”信号注册 GStreamer 回调记录在 apps-common/src/deepstream_source_bin.c 中。

这个应用程序使用 resnet10.caffemodel 进行检测。

AMQP protocol test application

libs/amqp_­protocol_adaptor

用于测试 AMQP 协议的应用程序。 这个应用程序使用 resnet10.caffemodel 进行检测。

Azure MQTT test application

libs/azure_protocol_adaptor

测试应用程序以使用 MQTT 显示 Azure IoT device2edge 消息传递和 device2cloud 消息传递。 这个应用程序使用 resnet10.caffemodel 进行检测。

DeepStream reference application

apps/sample_apps/­deepstream-app

DeepStream 参考应用程序的源代码。 这个应用程序使用 resnet10.caffemodel 进行检测和 3 个分类器模型(即 Car Color、Make 和 Model)。

UFF SSD detector

sources/objectDetector_SSD

SSD 检测器模型的配置文件和自定义库实现。

Faster RCNN detector

sources/objectDetector_FasterRCNN

FasterRCNN 模型的配置文件和自定义库实现。

Yolo detector

sources/objectDetector_Yolo

Yolo 模型的配置文件和自定义库实现,目前是 Yolo v2、v2 tiny、v3 和 v3 tiny。

Dewarper example

apps/sample_apps/deepstream-dewarper-test

演示单个或多个 360 度摄像机流的 dewarper 功能。 从 CSV 文件中读取相机校准参数,并在显示屏上渲染通道和光斑表面。

Optical flow example

apps/sample_apps/deepstream-nvof-test

演示单个或多个流的光流功能。 此示例使用两个 GStreamer 插件(Gst-nvof 和 Gst-nvofvisual)。 Gst-nvof 元素生成 MV(运动矢量)数据并将其作为用户元数据附加。 Gst-nvofvisual 元素使用预定义的色轮矩阵可视化 MV 数据。

Custom meta data example

apps/sample_apps/deepstream-user-metadata-test

演示如何将自定义或用户特定的元数据添加到 DeepStream 的任何组件。 测试代码将一个填充了用户数据的 16 字节数组附加到所选组件。 数据在另一个组件中检索。 这个应用程序使用 resnet10.caffemodel 进行检测。

MJPEG and JPEG decoder and inferencing example

apps/sample_apps/deepstream-image-decode-test

建立在 deepstream-test3 上,以演示图像解码而不是视频。 此示例使用自定义解码箱,因此 MJPEG 编解码器可用作输入。 这个应用程序使用 resnet10.caffemodel 进行检测。

Image/Video segmentation example

apps/sample_apps/deepstream-segmentation-test

演示使用语义或工业神经网络对多流视频或图像进行分割并将输出渲染到显示器。 此应用程序将 unet_output_graph.uff 用于工业用例,将 unetres18_v4_pruned0.65_800_data.uff 用于语义用例。

Handling metadata before Gst-nvstreammux

apps/sample_apps/deepstream-gst-metadata-test

演示如何在 DeepStream 流程中的 Gst-nvstreammux 插件之前设置元数据,以及如何在 Gst-nvstreammux 之后访问它。 这个应用程序使用 resnet10.caffemodel 进行检测。

Gst-nvinfer tensor meta flow example

apps/sample_apps/deepstream-infer-tensor-meta-app

演示如何将 nvinfer 张量输出作为元数据进行流动和访问。 注意:由于 OpenCV 已弃用,此二进制文件未打包。 此应用程序需要由用户编译。 这个应用程序使用 resnet10.caffemodel 进行检测和 3 个分类器模型(即 Car Color、Make 和 Model)。

Preprocess example

apps/sample_apps/deepstream-preprocess-test

演示对为流配置的预处理 ROI 的推断。 这个应用程序使用 resnet10.caffemodel 进行检测。

3D action recognition Reference app

apps/sample_apps/deepstream-3d-action-recognition

演示用于动作识别的基于序列批处理的 3D 或 2D 模型推理流程。 它还包括一个用于 NCSHW 时间批处理的基于序列的预处理自定义库。 在运行应用程序之前,请参阅 README 中的先决条件。 此应用程序使用 resnet18_2d_rgb_hmdb5_32.etlt 进行 2D 和 resnet18_3d_rgb_hmdb5_32.etlt 进行 3D 动作识别。

Analytics example

apps/sample_apps/deepstream-nvdsanalytics-test

演示批量分析,如 ROI 过滤、线交叉、方向检测和过度拥挤。 这个应用程序使用 resnet10.caffemodel 进行检测。

OpenCV example

apps/sample_apps/deepstream-opencv-test

演示在 dsexample 插件中使用 OpenCV。 需要使用 WITH_OPENCV=1 标志编译 dsexample。 这个应用程序使用 resnet10.caffemodel 进行检测。

Image as Metadata example

Apps/sample_apps / deepstream-image-meta-test

演示如何将编码图像附加为元数据并将图像保存为 jpeg 格式。 这个应用程序使用 resnet10.caffemodel 进行检测。

Appsrc and Appsink example

apps/sample_apps/deepstream-appsrc-test

演示 AppSrc 和 AppSink 分别用于使用和提供来自非 DeepStream 代码的数据。 这个应用程序使用 resnet10.caffemodel 进行检测。

Transfer learning example

apps/sample_apps/ deepstream-transfer-learning-app

演示了一种机制,可以为置信度较低的对象保存图像,并且可以将其用于进一步训练。 这个应用程序使用 resnet10.caffemodel 进行检测。

Mask-RCNN example

apps/sample_apps/ deepstream-mrcnn-test

使用 Mask-RCNN 模型演示实例分割。 注意:由于 OpenCV 已弃用,此二进制文件未打包。 此应用程序需要由用户编译。

DeepStream Audio Reference Application

apps/sample_apps/deepstream-audio

演示音频分析流程的 DeepStream 参考应用程序的源代码。 这个应用程序使用 SONYC 音频模型对标签进行分类。

Smart Record example

apps/sample_apps/deepstream-testsr

演示基于事件的智能记录功能。 这个应用程序使用 resnet10.caffemodel 进行检测。

Automatic Speech Recognition

apps/audio_apps/deepstream-asr-app

演示自动语音识别功能。 注意:此应用程序需要 Riva ASR 服务可用。 在运行应用程序之前,请参阅 README 中的先决条件。 此应用程序的默认模型是 Jasper,其他选项是 CitriNet 和 QuartzNet。

Text To Speech Conversion (Alpha)

apps/audio_apps/deepstream-asr-tts-app

演示文本到语音的转换功能以及自动语音识别。 注意:此应用程序需要 Riva TTS 和 ASR 服务可用。 在运行应用程序之前,请参阅自述文件中的先决条件。 此应用程序使用 CitriNet 模型进行 ASR 和 FastPitch,HiFi-GAN 模型用于 TTS。

Audio+video+Text Synchronization (Alpha)

apps/sample_apps/deepstream-avsync-app

演示 DeepStream 流程中来自 nvdsasr 的音频、视频和文本输出的同步。 注意:此应用程序需要 Riva ASR 服务可用。 在运行应用程序之前,请参阅自述文件中的先决条件。 这个应用程序使用 Jasper 模型进行语音识别。

DeepStream NMOS Application

apps/sample_apps/deepstream-nmos

此应用程序演示了如何将 DeepStream 应用程序创建为 NMOS 节点。 它使用一个库 (NvDsNmos),该库提供 API 来创建、销毁和内部管理 NMOS 节点。 NMOS 节点可以使用 AMWA IS-04 注册 API 自动发现和注册网络上的 NMOS 注册。 它还展示了如何创建各种视频和音频流程,同时运行它们并根据 NMOS 事件(例如来自 NMOS 控制器的 AMWA IS-05 连接 API 请求)重新配置它们。

DeepStream UCX test 1

apps/sample_apps/deepstream-ucx-test1

演示如何使用通信插件 gst-nvdsucx 通过 RDMA 发送和接收视频数据,无需任何特殊元数据。

DeepStream UCX test 2

apps/sample_apps/deepstream-ucx-test2

演示如何使用通信插件 gst-nvdsucx 通过 RDMA 发送和接收视频/元数据数据,以及通过 libnvds_video_metadata_serialization.so 库进行自定义序列化和反序列化。

DeepStream UCX test 3

apps/sample_apps/deepstream-ucx-test3

演示如何使用通信插件 gst-nvdsucx 通过 libnvds_audio_metadata_serialization.so 库使用自定义音频序列化和反序列化通过 RDMA 发送和接收音频/元数据数据。

DeepStream 3D Depth Camera Reference App

apps/sample_apps/deepstream-3d-depth-camera

演示如何通过 DS3D 接口和 ds3d::dataloader、ds3d::datafilter 和 ds3d::datarender 的自定义库设置深度捕获、深度渲染、3D 点云处理和 3D 点渲染流程。 在 DeepStream 3D Depth Camera App中查看更多详细信息

注意 写入输出文件的应用程序(例如:deepstream-image-meta-test、deepstream-testsr、deepstream-transfer-learning-app)应在 sudo 权限下运行。

组件和库细节¶

下表描述了除参考测试应用程序之外的源目录的内容:

插件和库详细信息

插件或库

源目录中的路径

描述

DsExample GStreamer plugin

gst-plugins/gst-dsexample

用于将自定义算法集成到 DeepStream SDK 图形中的模板插件。

GStreamer Gst-nvmsgconv plugin

gst-plugins/gst-nvmsgconv

GStreamer Gst-nvmsgconv 插件的源代码,用于将元数据转换为模式格式。

GStreamer Gst-nvmsgbroker plugin

gst-plugins/gst-nvmsgbroker

GStreamer Gst-nvmsgbroker 插件的源代码,用于向服务器发送数据。

GStreamer Gst-nvdspreprocess plugin

gst-plugins/gst-nvdspreprocess

GStreamer Gst-nvdspreprocess 插件的源代码,用于对预定义的 ROI 进行预处理。

GStreamer Gst-nvinfer plugin

gst-plugins/gst-nvinfer

用于推理的 GStreamer Gst-nvinfer 插件的源代码。

GStreamer Gst-nvdsosd plugin

gst-plugins/gst-nvdsosd

GStreamer Gst-nvdsosd 插件的源代码,用于绘制 bbox、文本和其他对象。

NvDsInfer library

libs/nvdsinfer

NvDsInfer 库的源代码,由 Gst-nvinfer GStreamer 插件使用。

NvDsNmos library

libs/nvdsnmos

NvDsNmos 库的源代码,由 DeepStream NMOS 应用程序演示。

NvMsgConv library

libs/nvmsgsconv

Gst-nvmsgconv GStreamer 插件所需的 NvMsgConv 库的源代码。

Kafka protocol adapter

libs/kafka_protocol_adapter

Kafka 协议适配器。

nvdsinfer_customparser

libs/nvdsinfer_customparser

检测器和分类器的自定义模型输出解析示例。

Gst-v4l2

See the note below 1

v4l2 编解码器的源代码。

Gstreamer gst-nvdsvideotemplate plugin

gst-plugins/gst-nvdsvideotemplate

用于实现视频自定义算法的模板插件源代码(非基于 Gstreamer)

NvDsVideoTemplate custom library

gst-plugins/gst-nvdsvideotemplate/customlib_impl

自定义库源码实现视频自定义算法

Gstreamer gst-nvdsaudiotemplate plugin

gst-plugins/gst-nvdsaudiotemplate

模板插件 tp 的源代码实现音频自定义算法(非基于 Gstreamer)

NvDsVideoTemplate custom library

gst-plugins/gst-nvdsaudiotemplate/customlib_impl

自定义库实现音频自定义算法的源代码

Gstreamer gst-nvdsmetautils

gst-plugins/gst-nvdsmetautils

Gstreamer Gst-nvdsmetainsert 和 Gst-nvdsmetaextract 插件处理元数据的源代码

NvDsMetaUtils SEI serialization library

gst-plugins/gst-nvdsmetautils/sei_serialization

Gst-nvdsmetautils 插件所需的自定义元反序列化源代码以作为 SEI 数据嵌入到编码比特流中

NvDsMetaUtils Audio serialization library

gst-plugins/gst-nvdsmetautils/audio_metadata_serialization

音频 NvDsFrameMeta 反序列化的源代码,Gst-nvdsmetautils 插件需要

NvDsMetaUtils Video serialization library

gst-plugins/gst-nvdsmetautils/video_metadata_serialization

Video NvDsFrameMeta & 的源代码 Gst-nvdsmetautils 插件需要的 NvDsObjectMeta 反序列化/序列化