NVIDIA DeepStream SDK 开发指南-C/C++示例应用程序源代码详细信息

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

       使用Graph Composer创建的DeepStream图形在参考图部分列出。有关更多信息,请参阅Graph Composer介绍。

示例源代码详细信息

参考测试应用

源目录内的路径

描述

示例测试应用1

apps/sample_apps/deepstream-test1

如何为单个H.264流使用DeepStream元素示例:filesrc→decode→nvstreammux→nvinfer或nvinferserver(主检测器)→nvdsosd→渲染器。这个应用程序使用resnet10.caffemodel用于检测。

示例测试应用2

apps/sample_apps/deepstream-test2

如何为单个H.264流使用DeepStream元素示例:filesrc→decode→nvstreammux→nvinfer或nvinferserver(主检测器)→nvtracker→nvinfer或nvinferserver(二级分类器)→nvdsosd→渲染器。这个应用程序使用了resnet10.caffemodel进行检测和3个分类器模型(即汽车颜色,制造和模型)。

示例测试应用3

apps/sample_apps/deepstream-test3

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

在管道中使用多个源。

使用uridecodebin接受任何类型的输入(例如RTSP/File),任何GStreamer支持的容器格式,以及任何编解码器。

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

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

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

示例测试应用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字段扩展元数据,则实现“复制”和“释放”函数。

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

示例测试应用5

apps/sample_apps/­deepstream-test5

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

在多流管道中使用Gst-nvmsgconv和Gst-nvmsgbroker插件。

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

如何处理来自RTSP服务器或摄像机的RTCP发送者报告,并将Gst缓冲区PTS转换为UTC时间戳。

有关更多详细信息,请参阅deepstream_test5_app_main.c中的RTCP发件人报告回调函数test5_rtcp_sender_report_callback()的注册和使用。GStreamer回调注册与rtpmanager元素的" handle-sync "信号被记录在apps-common/src/deepstream_source_bin.c中。

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

AMQP协议测试应用

libs/amqp_­protocol_adaptor

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

Azure MQTT测试应用程序

libs/azure_protocol_adaptor

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

DeepStream参考应用

应用程序/ sample_apps / -deepstream-app

DeepStream参考应用程序的源代码。这个应用程序使用了resnet10.caffemodel进行检测和3个分类器模型(即汽车颜色,制造和模型)。

UFF SSD探测器

sources/objectDetector_SSD

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

Faster RCNN

sources/objectDetector_FasterRCNN

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

Yolo探测器

sources/objectDetector_Yolo

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

Dewarper例子

apps/sample_apps/deepstream-dewarper-test

演示了单个或多个360度摄像机流的脱翘曲功能。从CSV文件读取相机校准参数,并在显示器上呈现通道和光斑表面。

光流示例

apps/sample_apps/deepstream-nvof-test

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

自定义元数据示例

apps/sample_apps/deepstream-user-metadata-test

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

MJPEG和JPEG解码器及推理实例

apps/sample_apps/deepstream-image-decode-test

构建在deepstream-test3上,演示图像解码而不是视频。这个例子使用了一个自定义解码箱,所以MJPEG编解码器可以用作输入。这个应用程序使用resnet10.caffemode用于检测。

图像/视频分割示例

apps/sample_apps/deepstream-segmentation-test

演示使用语义或工业神经网络分割多流视频或图像,并将输出呈现到显示器。这个应用程序使用unet_output_graph。Uff用于工业和unetres18_v4_pruned0.65_800_data。Uff表示语义用例。

在Gst-nvstreammux之前处理元数据

apps/sample_apps/deepstream-gst-metadata-test

演示如何在DeepStream管道中的Gst-nvstreammux插件之前设置元数据,以及如何在Gst-nvstreammux插件之后访问元数据。这个应用程序使用resnet10。用于检测的Caffemodel。

Gst-nvinfer张量元流的例子

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

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

预处理的例子

apps/sample_apps/deepstream-preprocess-test

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

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过滤,线交叉,方向检测和过度拥挤。这个应用程序使用resnet10.caffemodel用于检测。

OpenCV的例子

apps/sample_apps/deepstream-opencv-test

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

图像作为元数据示例

Apps/sample_apps / deepstream-image-meta-test

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

Appsrc和Appsink的例子

apps/sample_apps/deepstream-appsrc-test

演示了AppSrc和AppSink分别从非DeepStream代码中消费和提供数据的用法。这个应用程序使用resnet10.caffemodel用于检测。

Cuda Appsrc和Appsink的例子

apps/sample_apps/deepstream-appsrc-cuda-test

演示了如何从DeepStream外部获取cuda帧,并将其馈送到DeepStream管道。

迁移学习实例

apps/sample_apps/ deepstream-transfer-learning-app

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

Mask-RCNN例子

apps/sample_apps/ deepstream-mrcnn-test

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

DeepStream音频参考应用程序

apps/sample_apps/deepstream-audio

源代码的DeepStream参考应用程序演示音频分析管道。这个应用程序使用sonic音频模型来分类标签。

智能记录示例

apps/audio_apps/deepstream-asr-app

应用程序/ sample_apps / deepstream-testsr

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

文字到语音转换(Alpha)

apps/audio_apps/deepstream-asr-tts-app

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

DeepStream NMOS应用

apps/sample_apps/deepstream-nmos

这个应用程序演示了如何创建一个作为NMOS节点的DeepStream应用程序。它使用了一个库(nvdssnmos),该库提供了api来创建、销毁和内部管理NMOS节点。NMOS节点可以使用AMWA IS-04注册API自动发现网络上的NMOS注册表并向其注册。

它还展示了如何创建各种视频和音频管道,同时运行它们,并基于NMOS事件(如AMWA IS-05连接API请求来自NMOS控制器)重新配置它们。

DeepStream UCX测试1

apps/sample_apps/deepstream-ucx-test1

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

DeepStream UCX测试2

apps/sample_apps/deepstream-ucx-test2

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

DeepStream UCX测试3

apps/sample_apps/deepstream-ucx-test3

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

DeepStream 3D深度相机参考应用程序

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

演示如何在DS3D接口和DS3D::dataloader、DS3D::datafilter和DS3D::datarender的自定义库上设置深度捕获、深度渲染、3d点云处理和3d点渲染管道。在DeepStream 3D深度相机应用程序中查看更多细节

DeepStream激光雷达数据推理参考应用程序

apps/sample_apps/deepstream-lidar-inference-app

演示了如何读取点云数据,如何使用Triton点柱三维对象检测模型推断点云数据,如何使用GLES渲染点云数据和三维对象。整个应用程序基于DS3D接口和DS3D::dataloader, DS3D::datafilter和DS3D::datarender的自定义库。详见DeepStream激光雷达推断应用程序(Alpha)

Triton Onnx YOLO-v3

sources/TritonOnnxYolo

ONNX YOLO-V3模型的配置文件和自定义库实现。演示如何使用DS-Triton来运行具有动态大小输出张量的模型,以及如何实现自定义库来运行具有多输入张量的ONNX YoloV3模型,以及如何后处理混合批处理张量数据并将它们附加到nvds元数据中

Deepstream服务器应用

apps/sample_apps/deepstream-server

应用程序/ sample_apps / deepstream-server

演示了REST API支持来实时控制DeepStream管道。

DeepStream Can定向示例应用

apps/sample_apps/deepstream-can-orientation-app

演示了基于CV的VPI模板匹配算法进行can定向检测。VPI模板匹配使用DeepStream视频模板插件实现。详见apps/sample_apps/deepstream-can-orientation-app/README

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

插件和库源代码细节

除参考测试应用程序外,source目录的内容如下表所示:

插件和库源代码细节

DsExample GStreamer插件

gst-plugins/gst-dsexample

模板插件集成自定义算法到DeepStream SDK图形。

GStreamer Gst-nvmsgconv插件

gst-plugins/gst-nvmsgconv

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

GStreamer Gst-nvmsgbroker插件

gst-plugins/gst-vmsgbroker

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

GStreamer Gst-nvdspreprocess插件

gst-plugins/gst-nvdspreprocess

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

Gst-nvinfer插件

gst-plugins/gst-nvinfer

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

GStreamer Gst-nvinferserver插件

gst-plugins/gst-nvinferserver

GStreamer Gst-nvinferserver插件的源代码,用于使用Triton inference Server进行推理。

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

rest服务器所需的“nvdsmultiurisrcbin助手”和自定义“gst-事件,gst-消息和公共配置”的源代码。

nvdsinfer_customparser

libs/nvdsinfer_customparser

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

Gst-v4l2

见下面的注释1

v4l2编解码器的源代码。

gst-nvdsvideotemplate插件

gst-plugins/gst-nvdsvideotemplate

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

NvDsVideoTemplate自定义库

gst-plugins/gst-nvdsvideotemplate/customlib_impl

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

Gstreamer gst-nvdsaudiotemplate插件

gst-plugins/gst-nvdsaudiotemplate

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

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 de/序列化的源代码,由Gst-nvdsmetautils插件要求

NvDsMetaUtils视频序列化库

gst-plugins/gst-nvdsmetautils/video_metadata_serialization

视频NvDsFrameMeta和NvDsObjectMeta de/序列化的源代码,由Gst-nvdsmetautils插件要求

Gstreamer gst-nvvideotestsrc插件

gst-plugins/gst-nvvideotestsrc

源代码生成视频测试数据的各种格式和模式,直接写入GPU输出缓冲区

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)

脚注

1

Gst-v4l2源代码不存在于DeepStream包中。按以下步骤下载:

  1. 访问:https://developer.nvidia.com/embedded/downloads

  1. 在Search filter字段中,输入L4T

  1. 为L4T Release 35.2.1选择适当的项目。

  1. 搜索L4T驱动包(BSP)源

  1. 下载该文件并解压它,以获得.tbz2文件。

  1. 展开.tbz2文件。Gst-v4l2源文件位于gst-nvvideo4linux2_src.tbz2目录下。Libnvv4l2源存在于v4l2_libs_src.tbz2中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值