C/C++ 示例应用源代码详情#
DeepStream SDK 包包含插件、库、应用程序和源代码的存档。对于 Debian 安装(在 Jetson 或 dGPU 上)和 SDK Manager 安装,源目录位于 /opt/nvidia/deepstream/deepstream/sources
。对于 tar 包,源文件位于解压后的 deepstream 包中。DeepStream Python 绑定和示例应用程序作为单独的包提供。有关更多信息,请参阅 NVIDIA-AI-IOT/deepstream_python_apps。
使用 Graph Composer 创建的 DeepStream 图列在参考图部分下。有关更多信息,请参阅 Graph Composer 简介。
示例源代码详情# 参考测试应用程序
sources 目录内的路径
描述
示例测试应用程序 1
apps/sample_apps/deepstream-test1
如何为单个 H.264 流使用 DeepStream 元素的示例:filesrc → decode → nvstreammux → nvinfer 或 nvinferserver(主要检测器)→ nvdsosd → renderer。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
示例测试应用程序 2
apps/sample_apps/deepstream-test2
如何为单个 H.264 流使用 DeepStream 元素的示例:filesrc → decode → nvstreammux → nvinfer 或 nvinferserver(主要检测器)→ nvtracker → nvinfer 或 nvinferserver(二级分类器)→ nvdsosd → renderer。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测和 2 个分类器模型(即,resnet18_vehiclemakenet_pruned.onnx,resnet18_vehicletypenet_pruned.onnx)。
示例测试应用程序 3
apps/sample_apps/deepstream-test3
基于 deepstream-test1(简单测试应用程序 1)构建,以演示如何
在管道中使用多个源。
使用 uridecodebin 接受任何类型的输入(例如 RTSP/文件)、任何 GStreamer 支持的容器格式和任何编解码器。
配置 Gst-nvstreammux 以生成一批帧并在其上进行推理,以获得更好的资源利用率。
提取流元数据,其中包含有关批处理缓冲区中帧的有用信息。
此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
示例测试应用程序 4
apps/sample_apps/deepstream-test4
基于 deepstream-test1 构建,用于单个 H.264 流:filesrc、decode、nvstreammux、nvinfer 或 nvinferserver、nvdsosd、renderer,以演示如何
在管道中使用 Gst-nvmsgconv 和 Gst-nvmsgbroker 插件。
创建 NVDS_META_EVENT_MSG 类型元数据并将其附加到缓冲区。
将 NVDS_META_EVENT_MSG 用于不同类型的对象,例如车辆和人。
如果通过 extMsg 字段扩展元数据,则实现“copy”和“free”函数以供使用。
此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
示例测试应用程序 5
apps/sample_apps/deepstream-test5
基于 deepstream-app 之上构建。演示了
在管道中为多流使用 Gst-nvmsgconv 和 Gst-nvmsgbroker 插件。
如何从配置文件中将 Gst-nvmsgbroker 插件配置为 sink 插件(用于 KAFKA、Azure 等)。
如何处理来自 RTSP 服务器或摄像机的 RTCP 发送者报告,并将 Gst Buffer PTS 转换为 UTC 时间戳。
有关更多详细信息,请参阅 RTCP 发送者报告回调函数
test5_rtcp_sender_report_callback()
在deepstream_test5_app_main.c
中的注册和使用。GStreamer 回调与 rtpmanager 元素的“handle-sync”信号的注册记录在apps-common/src/deepstream_source_bin.c
中。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
apps/sample_apps/deepstream-3d-lidar-sensor-fusion
示例应用程序 deepstream-3d-lidar-sensor-fusion 展示了使用 DS3D 框架的 LiDAR 和相机数据的多模传感器融合管道。此示例中集成了 2 个管道,ds3d 多模 bevfusion 具有 6 个摄像头加上激光雷达数据融合和 3D 检测;v2x 模型处理来自单个摄像头和激光雷达的数据,利用批量大小为 4。
AMQP 协议测试应用程序
libs/amqp_protocol_adaptor
用于测试 AMQP 协议的应用程序。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
Azure MQTT 测试应用程序
libs/azure_protocol_adaptor
测试应用程序,用于展示使用 MQTT 的 Azure IoT 设备到边缘消息传递和设备到云消息传递。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
DeepStream 参考应用程序
apps/sample_apps/deepstream-app
DeepStream 参考应用程序的源代码。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测和 2 个分类器模型(即,resnet18_vehiclemakenet_pruned.onnx,resnet18_vehicletypenet_pruned.onnx)。
Dewarper 示例
apps/sample_apps/deepstream-dewarper-test
演示单个或多个 360 度摄像头流的 dewarper 功能。从 CSV 文件读取摄像头校准参数,并在显示器上渲染通道和点表面。
光流示例
apps/sample_apps/deepstream-nvof-test
演示单个或多个流的光流功能。此示例使用两个 GStreamer 插件(Gst-nvof 和 Gst-nvofvisual)。Gst-nvof 元素生成 MV(运动向量)数据并将其作为用户元数据附加。Gst-nvofvisual 元素使用预定义的色轮矩阵可视化 MV 数据。
自定义元数据示例
apps/sample_apps/deepstream-user-metadata-test
演示如何将自定义或用户特定的元数据添加到 DeepStream 的任何组件。测试代码将填充了用户数据的 16 字节数组附加到所选组件。数据在另一个组件中检索。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
MJPEG 和 JPEG 解码器和推理示例
apps/sample_apps/deepstream-image-decode-test
基于 deepstream-test3 构建,以演示图像解码而不是视频。此示例使用自定义解码 bin,以便可以将 MJPEG 编解码器用作输入。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
在 Gst-nvstreammux 之前处理元数据
apps/sample_apps/deepstream-gst-metadata-test
演示如何在 DeepStream 管道中的 Gst-nvstreammux 插件之前设置元数据,以及如何在 Gst-nvstreammux 之后访问它。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
Gst-nvinfer 张量元流示例
apps/sample_apps/deepstream-infer-tensor-meta-app
演示如何将 nvinfer 张量输出作为元数据流动和访问。注意:由于 OpenCV 已弃用,因此未打包此二进制文件。此应用程序需要用户编译。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测和 2 个分类器模型(即,resnet18_vehiclemakenet_pruned.onnx,resnet18_vehicletypenet_pruned.onnx)。
预处理示例
apps/sample_apps/deepstream-preprocess-test
演示对为流配置的预处理 ROI 进行推理。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
3D 动作识别参考应用
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 动作识别。
分析示例
apps/sample_apps/deepstream-nvdsanalytics-test
演示批量分析,如 ROI 过滤、线路交叉、方向检测和人群拥挤。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
OpenCV 示例
apps/sample_apps/deepstream-opencv-test
演示在 dsexample 插件中使用 OpenCV。需要使用标志
WITH_OPENCV=1
编译 dsexample。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。图像作为元数据示例
Apps/sample_apps / deepstream-image-meta-test
演示如何将编码图像作为元数据附加,并将图像保存为 jpeg 格式。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
Appsrc 和 Appsink 示例
apps/sample_apps/deepstream-appsrc-test
演示 AppSrc 和 AppSink 用法,分别用于从非 DeepStream 代码使用和提供数据。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
Cuda Appsrc 和 Appsink 示例
apps/sample_apps/deepstream-appsrc-cuda-test
演示如何将从 DeepStream 外部获取的 cuda 帧馈送到 DeepStream 管道。
迁移学习示例
apps/sample_apps/ deepstream-transfer-learning-app
演示一种保存置信度较低的对象的图像的机制,并且该机制可以用于进一步训练。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
智能录制示例
apps/sample_apps/deepstream-testsr
演示基于事件的智能录制功能。此应用程序使用 resnet18_trafficcamnet_pruned.onnx 进行检测。
音频+视频+文本同步(Alpha)
apps/sample_apps/deepstream-avsync-app
演示 DeepStream 管道中来自 nvdsasr 的音频、视频和文本输出的同步。注意:此应用程序需要 Riva ASR 服务可用。在运行应用程序之前,请参阅 README 中的先决条件。此应用程序使用 Jasper 模型进行语音识别。
DeepStream NMOS 应用程序
apps/sample_apps/deepstream-nmos
此应用程序演示如何将 DeepStream 应用程序创建为 NMOS 节点。它使用一个库 (NvDsNmos),该库提供用于创建、销毁和内部管理 NMOS 节点的 API。NMOS 节点可以使用 AMWA IS-04 注册 API 自动发现网络上的 NMOS 注册表并向其注册。
它还展示了如何创建各种视频和音频管道、同时运行它们以及根据 NMOS 事件(例如来自 NMOS 控制器的 AMWA IS-05 连接 API 请求)重新配置它们。
DeepStream UCX 测试
apps/sample_apps/deepstream-ucx-test
演示如何将通信插件 gst-nvdsucx 与 DeepStream SDK 一起使用。该应用程序已在 kernel-5.15 上验证。
DeepStream 3D 深度相机参考应用
apps/sample_apps/deepstream-3d-depth-camera
演示如何通过 ds3d::dataloader、ds3d::datafilter 和 ds3d::datarender 的 DS3D 接口和自定义库设置深度捕获、深度渲染、3D 点云处理和 3D 点渲染管道。有关更多详细信息,请参阅 DeepStream 3D 深度相机应用
DeepStream 3D 激光雷达数据推理参考应用
apps/sample_apps/deepstream-lidar-inference-app
演示如何读取点云数据,使用 pointpillar 3D 对象检测模型和 Triton 推理点云数据,使用 GLES 渲染点云数据和 3D 对象。整个应用程序基于 ds3d::dataloader、ds3d::datafilter 和 ds3d::datarender 的 DS3D 接口和自定义库。有关更多详细信息,请参阅 DeepStream 3D 激光雷达推理应用
Deepstream 服务器应用程序
apps/sample_apps/deepstream-server
演示 REST API 支持,以动态控制 DeepStream 管道。
DeepStream 罐头方向示例应用
apps/sample_apps/deepstream-can-orientation-app
演示使用基于 CV 的 VPI 模板匹配算法进行罐头方向检测。VPI 模板匹配通过 DeepStream 视频模板插件实现。有关更多详细信息,请参阅 apps/sample_apps/deepstream-can-orientation-app/README
Triton Ensemble 模型示例
sources/TritonBackendEnsemble
Triton ensemble 模型示例的配置文件、Triton 自定义 C++ 后端实现和自定义库实现。演示如何将 Triton ensemble 模型与 gst-nvinferserver 插件结合使用,以及如何实现自定义 Triton C++ 后端以使用多输入张量访问 DeespStream 元数据(如流 ID)。
deepstream-multigpu-nvlink-test
apps/sample_apps/deepstream-multigpu-nvlink-test
使用 gst-nvdsxfer 插件模拟启用 NVLINK 的多 GPU 设置的管道,以实现更好的性能。用户可以使用 dsmultigpu_config.yml 文件中 nvxfer 配置部分的“position”参数来模拟 gst-nvxfer 插件支持的各种多 GPU 用例管道。
deepstream-ipc-test-app
apps/sample_apps/deepstream-ipc-test-app
演示 Jetson 平台上用于实时流的解码器缓冲区共享 IPC 用例,以优化 NVDEC HW 利用率。此示例使用 IPC sink 和 IPC source 元素来互连在不同进程中运行的 GStreamer 管道。
注意
写入输出文件的应用程序(示例:deepstream-image-meta-test
、deepstream-testsr
、deepstream-transfer-learning-app
)应使用 sudo
权限运行。
插件和库源代码详情#
下表描述了 sources 目录的内容,参考测试应用程序除外
插件和库源代码详情# 插件或库
sources 目录内的路径
描述
DsExample GStreamer 插件
gst-plugins/gst-dsexample
用于将自定义算法集成到 DeepStream SDK 图中的模板插件。
GStreamer Gst-nvmsgconv 插件
gst-plugins/gst-nvmsgconv
用于将元数据转换为模式格式的 GStreamer Gst-nvmsgconv 插件的源代码。
GStreamer Gst-nvmsgbroker 插件
gst-plugins/gst-nvmsgbroker
用于将数据发送到服务器的 GStreamer Gst-nvmsgbroker 插件的源代码。
GStreamer Gst-nvdspreprocess 插件
gst-plugins/gst-nvdspreprocess
用于对预定义 ROI 进行预处理的 GStreamer Gst-nvdspreprocess 插件的源代码。
GStreamer Gst-nvinfer 插件
gst-plugins/gst-nvinfer
用于推理的 GStreamer Gst-nvinfer 插件的源代码。
GStreamer Gst-nvinferserver 插件
gst-plugins/gst-nvinferserver
用于使用 Triton Inference Server 进行推理的 GStreamer Gst-nvinferserver 插件的源代码。
GStreamer Gst-nvdsosd 插件
gst-plugins/gst-nvdsosd
用于绘制边界框、文本和其他对象的 GStreamer Gst-nvdsosd 插件的源代码。
Gstreamer Gst-nvdewarper 插件
gst-plugins/gst-nvdewarper
用于解扭曲帧的 GStreamer Gst-nvdewarper 插件的源代码
NvDsInfer 库
libs/nvdsinfer
NvDsInfer 库的源代码,由 Gst-nvinfer GStreamer 插件使用。
NvDsInferServer 库
libs/nvdsinferserver
NvDsInferServer 库的源代码,由 Gst-nvinferserver GStreamer 插件使用。
NvDsNmos 库
libs/nvdsnmos
NvDsNmos 库的源代码,由 DeepStream NMOS 应用程序演示。
NvMsgConv 库
libs/nvmsgsconv
NvMsgConv 库的源代码,Gst-nvmsgconv GStreamer 插件需要它。
Kafka 协议适配器
libs/kafka_protocol_adapter
Kafka 的协议适配器。
nvds_rest_server 库
libs/nvds_rest_server
rest 服务器的源代码。
nvds_customhelper
libs/gstnvdscustomhelper
“nvdsmultiurisrcbin helper”和 rest 服务器所需的自定义“gst-events、gst-messages 和 common configs”的源代码。
nvdsinfer_customparser
libs/nvdsinfer_customparser
检测器和分类器的自定义模型输出解析示例。
Gst-v4l2
请参阅下面的注释 [1]
v4l2 编解码器的源代码。
Gstreamer gst-nvdsvideotemplate 插件
gst-plugins/gst-nvdsvideotemplate
用于实现视频自定义算法(非 Gstreamer 基于)的模板插件的源代码
NvDsVideoTemplate 自定义库
gst-plugins/gst-nvdsvideotemplate/customlib_impl
用于实现视频自定义算法的自定义库的源代码
Gstreamer gst-nvdsaudiotemplate 插件
gst-plugins/gst-nvdsaudiotemplate
用于实现音频自定义算法(非 Gstreamer 基于)的模板插件的源代码
NvDsVideoTemplate 自定义库
gst-plugins/gst-nvdsaudiotemplate/customlib_impl
用于实现音频自定义算法的自定义库的源代码
Gstreamer gst-nvdsmetautils
gst-plugins/gst-nvdsmetautils
用于处理元数据的 Gstreamer Gst-nvdsmetainsert 和 Gst-nvdsmetaextract 插件的源代码
NvDsMetaUtils SEI 序列化库
gst-plugins/gst-nvdsmetautils/sei_serialization
用于自定义元数据反/序列化以嵌入到编码比特流中作为 SEI 数据(Gst-nvdsmetautils 插件需要)的源代码
NvDsMetaUtils 音频序列化库
gst-plugins/gst-nvdsmetautils/audio_metadata_serialization
音频 NvDsFrameMeta 反/序列化(Gst-nvdsmetautils 插件需要)的源代码
NvDsMetaUtils 视频序列化库
gst-plugins/gst-nvdsmetautils/video_metadata_serialization
视频 NvDsFrameMeta 和 NvDsObjectMeta 反/序列化(Gst-nvdsmetautils 插件需要)的源代码
Gstreamer gst-nvvideotestsrc 插件
gst-plugins/gst-nvvideotestsrc
用于生成以各种格式和模式编写的视频测试数据的源代码,这些数据直接写入 GPU 输出缓冲区
Gstreamer gst-nvdsspeech 插件
gst-plugins/gst-nvdsspeech
自定义低级别自动语音识别 (ASR) 库的接口,该库可以由 Gst-nvdsasr 插件加载
Gstreamer gst-nvdstexttospeech 插件
gst-plugins/gst-nvdstexttospeech
自定义低级别文本到语音 (TTS) 库的接口,该库可以由 Gst-nvds_text_to_speech 插件加载
Gstreamer gst-nvdspostprocess 插件
gst-plugins/gst-nvdspostprocess
插件和低级别库的源代码,用于为推理插件(nvinfer/nvinferserver)的张量输出提供自定义库接口
Gstreamer gst-nvtracker 插件
gst-plugins/gst-nvtracker
用于跟踪检测到的对象在一段时间内具有持久性(可能是唯一) ID 的插件的源代码
Gstreamer gst-nvdsanalytics 插件
gst-plugins/gst-nvdsanalytics
用于对 nvinfer(主要检测器)和 nvtracker 附加的元数据执行分析的接口
Gstreamer gst-nvstreammux New 插件
gst-plugins/gst-nvmultistream2
用于从多个输入源形成一批帧的插件的源代码
DS3D 激光雷达文件读取器自定义库
libs/ds3d/dataloader/lidarsource
DS3D 激光雷达文件读取器的源代码,其中包含 ds3d::dataloader 接口的实现,开发人员可以按照它来实现自定义激光雷达设备捕获,有关库详细信息,请参阅 自定义数据加载器 libnvds_lidarfileread 配置规范
DS3D 激光雷达数据读取器自定义处理库
libs/ds3d/datafilter/lidar_preprocess
DS3D 激光雷达数据处理的源代码,其中包含 ds3d::datafilter 接口的实现
DS3D 激光雷达检测后处理自定义库
libs/ds3d/inference_custom_lib/ds3d_lidar_detection_postprocess
DS3D 激光雷达和传感器融合 (bevfusion) 后处理自定义库的源代码
DS3D 激光雷达 v2xfusion 后处理自定义库
libs/ds3d/inference_custom_lib/ds3d_v2x_infer_custom_postprocess
DS3D 激光雷达和传感器融合 (v2xfusion) 后处理自定义库的源代码
DS3D 激光雷达 v2xfusion 预处理自定义库
ds3d/inference_custom_lib/ds3d_v2x_infer_custom_preprocess
DS3D 传感器融合 (v2xfusion) 预处理自定义库的源代码
Gstreamer Gst-nvurisrcbin 插件
gst-plugins/gst-nvurisrcbin
Gstreamer Gst-nvurisrcbin 插件的源代码,它是 uridecodebin 的包装器,具有文件循环、rtsp 重新连接和智能录制的附加功能
Gstreamer Gst-nvmultiurisrcbin 插件
gst-plugins/gst-nvmultiurisrcbin
Gstreamer Gst-nvmultiurisrcbin 插件的源代码,它集成了 gstnvurisrcbin、nvstreammux 插件,并默认启用了 REST 服务器支持。
脚注