此示例演示了来自摄像头传感器的四个视频流的视频捕获,这些视频流具有不同的分辨率。其中三个流经过编码过程并保存为 H.264 或 H.265 文件。第四个流提供全分辨率,并使用 NVIDIA® TensorRT™ 执行对象检测。如果检测到目标对象,它将在对象周围绘制一个边界框。最后,带有边界框的帧将在显示器上渲染,并同时编码为 H.264 或 H.265 文件。
$ sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list
更改下面显示的 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> 标识平台的处理器。
$ sudo apt-get update $ sudo apt-get install tensorrt
ENABLE_TRT := 1
$ 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
以下图表说明了数据流经此示例的流程。
$ ./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 | libargus OutputStream 消费者的基类。它包含一个专用线程,用于轮询来自 Argus::OutputStream 的帧。 |
下表描述了主要的 StreamConsumer
成员。
成员 | 描述 |
---|---|
setOutputStream | 设置用于创建 FrameConsumer 的 OutputStream。 |
getSize | 获取流分辨率。 |
threadInitialize | 初始化消费者线程的虚方法。 |
threadExecute | 管理线程循环的虚方法。 |
threadShutdown | 销毁消费者线程的虚方法。 |
processFrame | 处理一帧的虚方法。 |
该示例将 VideoEncoder
定义为抽象类。它不是从其他库导入的。
类 | 描述 |
---|---|
VideoEncoder | 这是一个实用程序类,用于简化 V4L2 视频编码器的使用。 |
下表描述了主要的 VideoEncoder
成员。
成员 | 描述 |
---|---|
VideoEncoder | 构造函数,用于指定分辨率、输出视频文件名和选择编码格式。 |
initialize | 初始化视频编码器和流消费者。 |
shutdown | 销毁资源。 |
setBufferDoneCallback | 设置回调以将缓冲区返回给调用者。 |
encodeFromFd | 使用新缓冲区馈送编码器。 |
该示例将 VideoStreamConsumer
定义为抽象类。它不是从其他库导入的。
类 | 描述 |
---|---|
VideoStreamConsumer | 此类是 StreamConsumer 的派生类,用于支持视频编码。它重用 VideoEncoder 对象进行视频编码。 |
下表描述了主要的 VideoStreamConsumer
成员。
成员 | 描述 |
---|---|
VideoEncodeStreamConsumer | 构造函数,用于指定消费者的名称、输出视频文件名和选择编码格式。 |
threadInitialize | 初始化视频编码器和流消费者。 |
threadShutdown | 销毁资源。 |
processFrame | 接收帧并将它们推送到编码器。 |
该示例将 TRTStreamConsumer
定义为抽象类。它不是从其他库导入的。
类 | 描述 |
---|---|
TRTStreamConsumer | 此类是 StreamConsumer 的派生类,用于支持 TensorRT (GIE) 推理。它还具有 VideoEncoder 对象以支持视频编码。 |
下表描述了主要的 TRTStreamConsumer
成员。
成员 | 描述 |
---|---|
TRTStreamConsumer | 构造函数,用于指定消费者的名称、输出视频文件名和选择编码格式。 |
threadInitialize | 初始化 TensorRT 上下文、视频编码器和流消费者。 |
threadShutdown | 销毁资源。 |
processFrame | 接收帧并为 TensorRT 推理准备它们。 |
setDeployFile | 设置用于构建 TensorRT 上下文的部署文件。 |
setModelFile | 设置用于构建 TensorRT 上下文的模型文件。 |
RenderThreadProc | 循环绘制边界框,渲染帧并编码视频。 |
TRTThreadProc | 循环执行 TensorRT 推理。 |