Jetson Linux API 参考文档

32.7.4 版本
前端(TensorRT 多通道视频捕获)

要求

  • 摄像头
  • 显示器


概述

此示例演示了来自摄像头传感器的四个视频流的视频捕获,这些视频流具有不同的分辨率。其中三个流经过编码过程并保存为 H.264 或 H.265 文件。第四个流提供全分辨率,并使用 NVIDIA® TensorRT 执行对象检测。如果检测到目标对象,它将在对象周围绘制一个边界框。最后,带有边界框的帧将在显示器上渲染,并同时编码为 H.264 或 H.265 文件。


构建和运行

前提条件

安装 TensorRT

  1. 在文本编辑器中打开 apt 源配置文件
      $ sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list
    
  2. 更改下面显示的 deb 命令中的存储库名称和下载 URL

      deb https://repo.download.nvidia.com/jetson/common <release> main
      deb https://repo.download.nvidia.com/jetson/<platform> <release> main
    

    <release>> 是版本号。例如:r32.5。

    <platform> 标识平台的处理器。

    • t194 用于 Jetson AGX Xavier 系列或 Jetson Xavier NX
    • t186 用于 Jetson TX2 系列
    • t210 用于 Jetson Nano 或 Jetson TX1
  3. 输入
      $ sudo apt-get update
      $ sudo apt-get install tensorrt
    

构建

  1. 通过在 Makefile 中进行以下更改,确保以下变量设置为 1
      ENABLE_TRT := 1
    
  2. 输入
    $ cd frontend
    $ make
    

运行

  • 输入
     $ ./frontend --deploy ../../data/Model/GoogleNet_three_class/GoogleNet_modified_threeClass_VGA.prototxt \
         --model ../../data/Model/GoogleNet_three_class/GoogleNet_modified_threeClass_VGA.caffemodel \
         --no-preview
    

退出

  • 输入 q

查看命令行选项

  • 输入
     $ cd frontend
     $ ./frontend -h
    


流程

以下图表说明了数据流经此示例的流程。

详细的缓冲区管理

Detailed Buffer Management

使用 TensorRT 的前端的缓冲区流程

Buffer Flow of the Frontend Using TensorRT

   $ ./frontend --deploy ../../data/Model/GoogleNet_three_class/GoogleNet_modified_threeClass_VGA.prototxt \
       --model ../../data/Model/GoogleNet_three_class/GoogleNet_modified_threeClass_VGA.caffemodel


主要类和方法

有关 libargus 的信息,请参阅 Libargus 摄像头 API。有关 EGLStream 的信息,请参阅 Khronos 网站上的文档。

StreamConsumer 类

该示例将 StreamConsumer 定义为抽象类。它不是从其他库导入的。

描述
StreamConsumerlibargus OutputStream 消费者的基类。它包含一个专用线程,用于轮询来自 Argus::OutputStream 的帧。

下表描述了主要的 StreamConsumer 成员。

成员描述
setOutputStream设置用于创建 FrameConsumer 的 OutputStream。
getSize获取流分辨率。
threadInitialize初始化消费者线程的虚方法。
threadExecute管理线程循环的虚方法。
threadShutdown销毁消费者线程的虚方法。
processFrame处理一帧的虚方法。

VideoEncoder 类

该示例将 VideoEncoder 定义为抽象类。它不是从其他库导入的。

描述
VideoEncoder这是一个实用程序类,用于简化 V4L2 视频编码器的使用。

下表描述了主要的 VideoEncoder 成员。

成员描述
VideoEncoder构造函数,用于指定分辨率、输出视频文件名和选择编码格式。
initialize初始化视频编码器和流消费者。
shutdown销毁资源。
setBufferDoneCallback设置回调以将缓冲区返回给调用者。
encodeFromFd使用新缓冲区馈送编码器。

VideoStreamConsumer 类

该示例将 VideoStreamConsumer 定义为抽象类。它不是从其他库导入的。

描述
VideoStreamConsumer此类是 StreamConsumer 的派生类,用于支持视频编码。它重用 VideoEncoder 对象进行视频编码。

下表描述了主要的 VideoStreamConsumer 成员。

成员描述
VideoEncodeStreamConsumer构造函数,用于指定消费者的名称、输出视频文件名和选择编码格式。
threadInitialize初始化视频编码器和流消费者。
threadShutdown销毁资源。
processFrame接收帧并将它们推送到编码器。

TRTStreamConsumer 类

该示例将 TRTStreamConsumer 定义为抽象类。它不是从其他库导入的。

描述
TRTStreamConsumer此类是 StreamConsumer 的派生类,用于支持 TensorRT (GIE) 推理。它还具有 VideoEncoder 对象以支持视频编码。

下表描述了主要的 TRTStreamConsumer 成员。

成员描述
TRTStreamConsumer构造函数,用于指定消费者的名称、输出视频文件名和选择编码格式。
threadInitialize初始化 TensorRT 上下文、视频编码器和流消费者。
threadShutdown销毁资源。
processFrame接收帧并为 TensorRT 推理准备它们。
setDeployFile设置用于构建 TensorRT 上下文的部署文件。
setModelFile设置用于构建 TensorRT 上下文的模型文件。
RenderThreadProc循环绘制边界框,渲染帧并编码视频。
TRTThreadProc循环执行 TensorRT 推理。
. All rights reserved.