【Deepstream学习】 TX1模块中C++ Sample application 2详细测试讲解

2023-05-16

        大家好,我是虎哥,使用NVIDIA Jeston TX1 也有很长一段时间了,由于这是基本停产的一个模块,其实自己也担心有很多官方的demo无法适配跑起来了,所以花了点时间,进一步研究发挥其GPU性能,使用各种硬件协处理器来加速。今天周末,开始续测试一下DeepStream自带的C++DEMO,开始入门学习DeepStream的使用,讲通过详细分享官方自带的5个典型例子,来完成入门学习,分享给大家,也是自己做个笔记总结。

先交代一下我自己的测试环境,硬件好事TX1+EHub_tx1_tx2_E100载板的环境, 关于测试硬件EHub_tx1_tx2_E100载板请查看:EdgeBox_EHub_tx1_tx2_E100 开发板评测_机器人虎哥的博客-CSDN博客。系统装ubuntu 18.04 的环境。安装了英伟达配套的所有cuda的套件库。

目录

0、C/C++ Sample Apps Source Details

参考资料

1、Sample test application 2

1.1 进入目录,找到代码:

1.2 按照指导编译文件

1.3 运行测试

1.4 报错尝试解决

1.5 尝试输入不同的场景视频

0、C/C++ Sample Apps Source Details

官网入口:https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_C_Sample_Apps.html

DeepStream SDK 包含插件、库、应用程序和源代码的存档。对于Debian安装(在Jetson或dGPU上)和SDK管理器安装,sources目录位于/opt/nvidia/deepstream/deepstream-6.2 sources。对于tar包,源文件位于提取的deepstream包中。DeepStream Python绑定和示例应用程序作为单独的包提供。有关详细信息,请参阅GitHub - NVIDIA-AI-IOT/deepstream_python_apps: DeepStream SDK Python bindings and sample applications.

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

Reference test applicationPath inside sources directoryDescription
Sample test application 1apps/sample_apps/deepstream-test1Sample of how to use DeepStream elements for a single H.264 stream: filesrc → decode → nvstreammux → nvinfer or nvinferserver (primary detector) → nvdsosd → renderer. This app uses resnet10.caffemodel for detection.
Sample test application 2apps/sample_apps/deepstream-test2Sample of how to use DeepStream elements for a single H.264 stream: filesrc → decode → nvstreammux → nvinfer or nvinferserver (primary detector) → nvtracker → nvinfer or nvinferserver (secondary classifier) → nvdsosd → renderer. This app uses resnet10.caffemodel for detection and 3 classifier models (i.e., Car Color, Make and Model).
Sample test application 3apps/sample_apps/deepstream-test3Builds on deepstream-test1 (simple test application 1) to demonstrate how to:Use multiple sources in the pipeline.Use a uridecodebin to accept any type of input (e.g. RTSP/File), any GStreamer supported container format, and any codec.Configure Gst-nvstreammux to generate a batch of frames and infer on it for better resource utilization.Extract the stream metadata, which contains useful information about the frames in the batched buffer.This app uses resnet10.caffemodel for detection.
Sample test application 4apps/sample_apps/­deepstream-test4Builds on deepstream-test1 for a single H.264 stream: filesrc, decode, nvstreammux, nvinfer or nvinferserver, nvdsosd, renderer to demonstrate how to:Use the Gst-nvmsgconv and Gst-nvmsgbroker plugins in the pipeline.Create NVDS_META_EVENT_MSG type metadata and attach it to the buffer.Use NVDS_META_EVENT_MSG for different types of objects, e.g. vehicle and person.Implement “copy” and “free” functions for use if metadata is extended through the extMsg field.This app uses resnet10.caffemodel for detection.
Sample test application 5apps/sample_apps/­deepstream-test5Builds on top of deepstream-app. Demonstrates:Use of Gst-nvmsgconv and Gst-nvmsgbroker plugins in the pipeline for multistream.How to configure Gst-nvmsgbroker plugin from the config file as a sink plugin (for KAFKA, Azure, etc.).How to handle the RTCP sender reports from RTSP servers or cameras and translate the Gst Buffer PTS to a UTC timestamp.For more details refer the RTCP Sender Report callback function test5_rtcp_sender_report_callback() registration and usage in deepstream_test5_app_main.c. GStreamer callback registration with rtpmanager element’s “handle-sync” signal is documented in apps-common/src/deepstream_source_bin.c.This app uses resnet10.caffemodel for detection.

接下来的时间,我们就通过系统学习这5个示例程序。

  • test1: DeepStream的Hello World。介绍如何基于多种DeepStream 插件来构建一个Gstream 管道。这个样例中输入的是一个视频文件,经过解码、批处理、目标检测,并将检测信息显示在屏幕中。

  • test2: 在test1的基础上,将二级网络级联到一级网络。图中我们也能看到,在目标检测之后多了一个图像分类的模块。

  • test3: 在test1的基础上,如何实现多数据源。比如同时接入4路视频,实现对4路视频数据的同时推理。

  • test4: 在test1的基础上,展示如何使用message broker插件创建物联网服务。

参考资料

DeepStream SDK开发指南:NVIDIA DeepStream SDK Developer Guide — DeepStream 6.2 Release documentation

DeepStream 概况: https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_Overview.html

DeepStream 数据结构:https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_metadata.html

GStreamer 学习笔记: https://www.cnblogs.com/phinecos/archive/2009/06/07/1498166.html

B站DeepStream 相关视频合集:jetson nano中如何下载deepstream-哔哩哔哩_Bilibili

1、Sample test application 2

 接着看一下deepstream-test2的范例,这是基于test1的基础上去添加“多级检测器”的功能,由于这个功能与DeepStream的追踪功能相捆绑,因此也许一并启动。

  • 编程语言:C/C++

  • 代码量:506行(含注解)

  • 输入源:单个H264/H265视频文件

  • 智能推理:单个的4类别(car, person, bicycle, roadsign)主检测器,加上3个基于“Car”类别的次级检测器,包括颜色、品牌、车型等等,这里还必须打开“追踪器(tracker)”的功能

  • 显示输出:显示器

  • 插件流:filesrc -> h264parse -> nvv4l2decoder -> nvstreammux -> nvinfer (primary detector) -> nvtracker -> nvinfer(secondary classifier) -> nvvideoconvert -> nvdsosd -> nvegltransform -> nveglglessink

1.1 进入目录,找到代码:

cd /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps
cd deepstream-test2

1.2 按照指导编译文件

从 README文件种可以看到编译步骤:


Compilation Steps:
​
  $ Set CUDA_VER in the MakeFile as per platform.
      For Jetson, CUDA_VER=10.2
      For x86, CUDA_VER=11.4
  $ sudo make  

确认自己系统CUDA_VER,我自己就是CUDA_VER=10.2

 打开MakeFile文件修改

 保存退出后编译:

sudo make
nvidia@ubuntu:/opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-test2$ sudo make
cc -c -o deepstream_test2_app.o -DPLATFORM_TEGRA -I../../../includes -I /usr/local/cuda-10.2/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/aarch64-linux-gnu/glib-2.0/include deepstream_test2_app.c
cc -o deepstream-test2-app deepstream_test2_app.o -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -L/usr/local/cuda-10.2/lib64/ -lcudart -L/opt/nvidia/deepstream/deepstream-6.0/lib/ -lnvdsgst_meta -lnvds_meta -Wl,-rpath,/opt/nvidia/deepstream/deepstream-6.0/lib/

编译完成。

1.3 运行测试

README文件 有如何运行的说明


To run:
​
  $ ./deepstream-test2-app <h264_elementary_stream>
​
NOTE: To compile the sources, run make with "sudo" or root permission.  

官方自带的样本种有H264视频:

cd /opt/nvidia/deepstream/deepstream-6.0/samples/streams

 我自己也在上一篇种转了一些264的文件:

 先用官方的示例视频测试,其所在目录:

cd /opt/nvidia/deepstream/deepstream-6.0/samples/streams

回到测试目录:

cd /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-test2

执行测试命令:在NoMachine终端执行

./deepstream-test2-app /opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_720p.h264

 之后就是你泡杯茶,等着,就好了,等挺长时间,直到出现下列打印:

 我们可以回顾一下test1中的推理结果:

 这里明显看到test2不仅能为每个检测到的物体标上编号,这就是“追踪”的功能,在“car”物体上,还有“颜色”、“品牌”、“车型”等信息。

1.4 报错尝试解决

报错信息:


ERROR: Deserialize engine failed because file path: /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-test2/../../../../samples/models/Secondary_VehicleTypes/resnet18.caffemodel_b16_gpu0_int8.engine open error
​
ERROR: Deserialize engine failed because file path: /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-test2/../../../../samples/models/Secondary_CarMake/resnet18.caffemodel_b16_gpu0_int8.engine open error
​
ERROR: Deserialize engine failed because file path: /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-test2/../../../../samples/models/Secondary_CarColor/resnet18.caffemodel_b16_gpu0_int8.engine open error
​
ERROR: Deserialize engine failed because file path: /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-test2/../../../../samples/models/Primary_Detector/resnet10.caffemodel_b1_gpu0_int8.engine open error
​  

所以,报错是打开文件失败,找这几文件


/opt/nvidia/deepstream/deepstream-6.0/samples/models/Secondary_VehicleTypes/resnet18.caffemodel_b16_gpu0_int8.engin
/opt/nvidia/deepstream/deepstream-6.0/ssamples/models/Secondary_CarMake/resnet18.caffemodel_b16_gpu0_int8.engine
/opt/nvidia/deepstream/deepstream-6.0/ssamples/models/Secondary_CarColor/resnet18.caffemodel_b16_gpu0_int8.engine
/opt/nvidia/deepstream/deepstream-6.0/ssamples/models/Secondary_CarColor/resnet18.caffemodel_b16_gpu0_int8.engine
/opt/nvidia/deepstream/deepstream-6.0/samples/models/Primary_Detector/resnet10.caffemodel_b1_gpu0_int8.engine  

进入一个文件夹看看

#进入
cd /opt/nvidia/deepstream/deepstream-6.0/samples/models/Secondary_VehicleTypes/
#
ll
 

发现根本没有我们需要的:“resnet18.caffemodel_b16_gpu0_int8.engin”这个文件,取而代之的是:“resnet18.caffemodel_b16_gpu0_fp16.engine”,这个时候发现是文件名不对,所以我果断的使用了新的文件名称:

#进入测试目录
cd /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-test2
#依次打开配置文件
sudo vim dstest2_sgie2_config.txt
sudo vim dstest2_sgie1_config.txt
sudo vim dstest2_sgie3_config.txt
sudo vim dstest2_pgie_config.txt
#核对所有需要的engin文件位置和名称和实际是否对应

dstest2_pgie_config.txt 修改后

 dstest2_sgie1_config.txt修改后

 dstest2_sgie2_config.txt 修改后

 dstest2_sgie3_config.txt修改后

 改完之后我们再测试一下:执行测试命令:在NoMachine终端执行

./deepstream-test2-app /opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_720p.h264

 无报错,而且可以感觉到加载很快,也就是之前我们的测试应该是一样的问题,这个报错导致加载很慢。

 终于找到了这个问题的原因,并且解决了!可以安心睡觉了。

1.5 尝试输入不同的场景视频

上面的测试,我们都输入的事官方提供的视频,我自己转码了一些H.264存储的流文件,进行额外的一些测试看看:

 测试视频1:

#进入测试目录
cd /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-test2
#测试视频1:/home/nvidia/lsrobot_worksapce/Deepstream/mysamples_streams/H264-Streat-1.h264
./deepstream-test2-app /home/nvidia/lsrobot_worksapce/Deepstream/mysamples_streams/H264-Streat-1.h264

 测试视频2:

#进入测试目录
cd /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-test2
#测试视频2:/home/nvidia/lsrobot_worksapce/Deepstream/mysamples_streams/H264-Streat-2.h264
./deepstream-test2-app /home/nvidia/lsrobot_worksapce/Deepstream/mysamples_streams/H264-Streat-2.h264

以上就是我今天要分享的内容。纠错,疑问,交流: 911946883@qq.com 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Deepstream学习】 TX1模块中C++ Sample application 2详细测试讲解 的相关文章

  • centos7为deepstream-docker 配置好环境

    实战 1 all server 时间同步 sudo yum y install ntp ntpdate pool ntp org systemctl start ntpd systemctl enable ntpd service serv
  • c# global::

    Global 表示所有命名空间的根部 Global asa 文件的作用主要是用于站点或虚拟目录下程序的数据共享和多线程 在 global asa 中 可以声明 Application 事件和 Session 事件 并可以声明一些 Sessi
  • Qt Creator登录对话框

    实现功能 在弹出对话框中填写用户名和密码 按下登录按钮 如果用户名和密码均正确则进入主窗口 如果有错则弹出警告对话框 实现原理 通过上节的多窗口原理实现由登录对话框进入主窗口 而用户名和密码可以用if语句进行判断 实现过程 1 先新建Qt4
  • Android面试常用面试题

    1 Android手机横竖屏切换的问题及其解决方案 默认情况下 横竖屏切换的时候 系统会销毁当前的Activity 然后新建一个Activity 显然 太浪费资源了 http www cnblogs com zhangkai281 arch
  • 细说业务逻辑(后篇)

    细说业务逻辑 后篇 作者 EricZhang T2噬菌体 来源 博客园 时间 2009 11 01 阅读 295 次 原文链接 收藏 前篇 http kb cnblogs com page 50470 3 业务逻辑的架构模式及实现 Mart
  • Servlet基础_0500_Application

    一 application概念 application即ServletContext 能够被所有的客户端页面共享 不同的浏览器 不同电脑上的浏览器 演示 ServletContextTest java package com servlet
  • 用HL7创建含多个code item的modality worklist

    需求 DCM4CHEE做RIS DICOM服务器 用NHAPI发ORM o01消息创建worklist 问题 在同一个OBR里面没法包含多个Scheduled Protocol Code Sequence item 创建出来的worklis
  • 【编程语言】java--jsp--javabean中的scope用法小解

    javabean中的scope用法小解 1 scope取值page JSP分配给每个bean是互不相同的 虽然bean的功能是一样 但是占据不同的内存单元 bean的有效范围是当前页面 2 scope取值session JSP分配给每个be
  • 为什么每个程序执行都有内核地址空间和程序地址空间?

    为什么每个用户态的程序映射到虚拟地址空间 都需要有内核地址空间和程序地址空间呢 因为程序地址空间最终都会调用系统调用 也就是内核的东东 所以每个程序要想执行 就必须有内核地址空间 也必须有程序地址空间 所用的application程序要想使
  • QT中实现应用程序的单例化

    一介绍 通过编写一个QSingleApplication类 来实现Qt程序的单例化 原文的作者是在Windows Vista Qt4 4 下实现的 不过应用在其他平台上是没问题的 本文是我在http www qtcentre org wik
  • ABAP & DOI NACE OUTPUT

    ABAP上传文件的TCODE SMW0 OAOR 现在遇到的业务需求是在VA03的订单通过SAP标准的OUTPUT配置打印出order confirmation以后 再打印公司的文字条款内容 WORD格式的两页纸 最开始想到的实现方式是在N
  • WPF自学篇--第一篇--Hello world

    主要知识点为 1 WPF如何修改启动页面 2 如何写Hello Word Sample 内容 1 由于专案是先加window wpf想加web wpf是调试找启动页面找了很久 终于发现在app config中Application下 Sta
  • ArcGIS GraphicsLayer层的特殊要求

    如果你要使用GraphicsLayer这个绘图层 那么你需要注意自己的布局的模式不可以使用 layout absolute 如果你使用了这个布局 那么你的GraphicsLayer层可能会无法使用 比如下面的程序就是因为设置了 layout
  • 使用 dplyr 从数据帧中采样子组行

    如果我想从不同组中随机选择一些样本 我使用 plyr 包和下面的代码 require plyr sampleGroup lt function df size df sample nrow df size size iris sample
  • 如何使用 data.table/dplyr 在两个层次结构中进行高效采样和替换?

    我正在尝试使用 data table tidyverse 在两个级别上进行有效采样 1 级是医院 ID hospital id 2 级是医生 ID doctor id 我需要首先从 N 总额中对替换 N 医院进行抽样 然后我需要从 M i
  • .NET DDD 示例 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在子数组之间移动行

    我有许多子数组 比如 2 个 为了简单起见 每个子数组具有相同的行数和列数 子数组中的每个位置都由 1 10 中的数字占据 我想做的是根据某种移动速率 m 0 1 在子数组之间随机移动行 m 0 对应于不移动 而 m 1 表示所有子数组中的
  • CosmosDB $sample 聚合始终提供相同的结果

    我是 Mongo 和 Cosmos DB 的新手 我试图使用以下聚合查询从一个集合中获取一些随机值 但它重复提供相同的结果 db jokes aggregate sample size 1 Operation consumed 2 39 R
  • 哪里可以找到 Android 示例?

    我检查了谷歌开发者网站上的一些 Android 开发练习和示例 我发现了这个网页 http developer android com tools samples index html http developer android com

随机推荐

  • 接口回调(笔记

    接口回调讲解 回调定义回调机制回调意义接口回调的实现步骤参考 网上看了一堆 xff0c 感觉有点零散 xff0c 我自己总结一下 看评论区说存在很多问题 xff0c 我读了一下 xff0c 雀氏存在一些 xff0c 非常感谢批评指正 xff
  • Weka下载安装详解

    目录 前言Weka下载Weka安装Weka启动 前言 如果你没有安装Java的话 xff0c 请看这里 xff0c 选择合适的Java版本 xff0c 这里我选用的是java11 选择jdk8也可以 xff0c 它有jre xff0c 11
  • Android Studio安装教程

    Android Studio详细安装教程 1 Java环境配置2 Android Studio的安装 1 Java环境配置 这里Android开发基于Java语言 xff0c 所以先配置Java环境 首先选择合适的jdk版本 xff0c 随
  • 活动的四种启动模式详解

    android launchMode 目录 android launchMode前言概念说明standardsingleTopsingleTasksingleInstance Codes演示说明standard代码singleTop代码si
  • VS2019切换中英文

    Visual Studio2019语言包切换1 打开安装程序2 选择语言包3 一系列操作 Visual Studio2019语言包切换 忘了设置语言包来着 xff0c 它默认中文了 xff0c 总觉得每次找东西看起来怪怪的 如果已安装了英语
  • Java关键字super解释

    目录 前言 xff08 废话文学 xff09 前言 xff08 定义 xff09 super 之构造方法super 之成员函数super 之成员变量结束语 前言 xff08 废话文学 xff09 又是看了一大堆文字介绍 xff0c 非常系统
  • 程序员的心得体会

    目录 前言工作学习 xff08 正式严肃 xff09 emo转乐观 前言 这是一篇丰富多彩 摸鱼 的文章 一呢是分享一下子自己迈入程序员工作了2个月的感受 xff0c 还有呢就是多方面交谈 xff0c 或许给点人生建议 xff0c 还有说说
  • VisualStudioCode:Java 11 or more recent is required to run. Please download and install a recent JDK

    从7月22日起 xff0c 今后vs code将不再支持用java8运行java插件 xff0c 需要使用java11 才能进行Visual Studio Code的编译 xff1a 解决方法 xff1a 先下载一个java11的jdk j
  • 【GStreamer】MP4文件种提取H264 字节流数据保存

    大家好 xff0c 我是虎哥 xff0c 简短的分享一个小技巧 xff0c 也作为自己的记录留用 一般MP4文件和MKV文件都是我么从网络上比较容易获取的 xff0c 但是我们用来做目标识别和检测的视频输入需要单纯的视频文件 xff0c 下
  • A-咕咕东的奇遇

    题目 xff1a 咕咕东是个贪玩的孩子 xff0c 有一天 xff0c 他从上古遗迹中得到了一个神奇的圆环 这个圆环由字母表组成首尾相接的环 xff0c 环上有一个指针 xff0c 最初指向字母a 咕咕东每次可以顺时针或者逆时针旋转一格 例
  • A-DDL的恐惧

    题目 xff1a ZJM 有 n 个作业 xff0c 每个作业都有自己的 DDL xff0c 如果 ZJM 没有在 DDL 前做完这个作业 xff0c 那么老师会扣掉这个作业的全部平时分 所以 ZJM 想知道如何安排做作业的顺序 xff0c
  • C-平衡字符串

    题目 xff1a 一个长度为 n 的字符串 s xff0c 其中仅包含 Q W E R 四种字符 如果四种字符在字符串中出现次数均为 n 4 xff0c 则其为一个平衡字符串 现可以将 s 中连续的一段子串替换成相同长度的只包含那四个字符的
  • week11-作业(必做题)

    文章目录 A 必做题11 1题目 xff1a 输入格式 xff1a 输出格式 xff1a 样例输入 xff1a 样例输出 xff1a 题目分析 xff1a 代码 xff1a B 必做题11 2题目 xff1a 输入格式 xff1a 输出格式
  • CSP-M3

    文章目录 T1 瑞神的序列题目描述 xff1a 输入描述 xff1a 输出描述 xff1a 样例输入 xff1a 样例输出 xff1a 数据组成 xff1a 题目分析 xff1a 代码 xff1a T2 消消乐大师 Q老师题目描述 xff1
  • week12-作业-必做题

    文章目录 A 必做题 1题目 xff1a Input xff1a Output xff1a Sample Input xff1a Sample Output xff1a 题目分析 xff1a 代码 xff1a B 必做题 2题目 xff1a
  • week13-作业-必做题

    文章目录 A TT的神秘任务1题目 xff1a Input xff1a Output xff1a Example xff1a Input xff1a Output xff1a 题目分析 xff1a 代码 xff1a B TT的神秘任务2题目
  • week13-T1-T2

    文章目录 A 1 T1题目 xff1a 输入格式 xff1a 输出格式 xff1a Sample Input1 xff1a Sample Output1 xff1a Sample Input 2 xff1a Sample Output 2
  • week15-字符串

    目录 A ZJM 与霍格沃兹 必做题 xff09 Bkdr Hash算法 题目 Input Output Sample Input Sample Output 题目分析 xff1a 代码 xff1a B ZJM 与生日礼物 xff08 选做
  • 富文本编辑器wangEditor回显问题

    回显时渲染dom报错问题 xff1a 富文本编辑器在回显html时偶尔会报以下错误 xff1a Error in v on handler 34 Error Cannot find a descendant at path 1 1 0 in
  • 【Deepstream学习】 TX1模块中C++ Sample application 2详细测试讲解

    大家好 xff0c 我是虎哥 xff0c 使用NVIDIA Jeston TX1 也有很长一段时间了 xff0c 由于这是基本停产的一个模块 xff0c 其实自己也担心有很多官方的demo无法适配跑起来了 xff0c 所以花了点时间 xff