本示例演示了使用 NVIDIA® TensorRT™ 解码视频并将边界框信息保存到 result.txt
文件的最简单方法。TensorRT 以前被称为 GPU 推理引擎 (GIE)。
本示例不需要摄像头或显示器。
$ 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
$ cd /usr/src/jetson_multimedia_api/samples/04_video_dec_trt $ make
$ ./video_dec_trt [Channel-num] <in-file1> <in-file2> ... <in-format> [options]
以下示例生成两个结果:result0.txt
和 result1.txt
。结果包含检测到的对象的归一化矩形坐标。
$ ./video_dec_trt 2 ../../data/Video/sample_outdoor_car_1080p_10fps.h264 \ ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264 \ --trt-onnxmodel ../../data/Model/resnet10/resnet10_dynamic_batch.onnx \ --trt-mode 0
$ sudo ~/jetson_clocks.sh
Channel-num
选项。有关打开超过 16 个视频设备的信息,请参阅以下 NVIDIA® DevTalk 主题
$ rm trtModel.cache
Inference Performance(ms per batch):xx Wait from decode takes(ms per batch):xx
$ cp result*.txt /usr/src/jetson_multimedia_api/samples/02_video_dec_cuda $ cd /usr/src/jetson_multimedia_api/samples/02_video_dec_cuda $ ./video_dec_cuda ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264 --bbox-file result0.txt $ ./video_dec_cuda ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264 --bbox-file result1.txt
数据管道如下
Input video file -> Decoder -> VIC -> TensorRT Inference -> Plain text file with Bounding Box info
本示例执行以下操作
以下框图显示了视频解码器管道以及不同引擎之间的内存共享。此内存共享也适用于其他 L4T 多媒体示例。
本示例使用以下关键结构和类
全局结构 context_t
管理应用程序中的所有资源。
元素 | 描述 |
---|---|
NvVideoDecoder | 包含所有与视频解码相关的元素和函数。 |
NvVideoConverter | 包含用于视频格式转换的元素和函数。 |
EGLDisplay | 指定用于 CUDA 处理的 EGLImage。 |
conv_output_plane_buf_queue | 指定用于视频转换的输出平面队列。 |
TRT_Context | 指定用于加载 ONNXmodel/Caffemodel 和执行推理的接口。 |
成员 | 描述 |
---|---|
decCaptureLoop | 从 dec 捕获平面获取缓冲区并推送到转换器,并处理分辨率更改。 |
Conv outputPlane dqThread | 将从转换器输出平面出队的缓冲区返回到解码器捕获平面。 |
Conv captuerPlane dqThread | 从 conv 捕获平面获取缓冲区并推送到 TensorRT 缓冲区队列。 |
trtThread | 指定 CUDA 进程和推理特性。 |
要显示和验证结果并缩放矩形参数,请按如下方式使用 02_video_dec_cuda
示例
$ ./video_dec_cuda <in-file> <in-format> --bbox-file result.txt
本示例执行以下操作
使用默认文件
resnet10_dynamic_batch.onnx
在此目录中
$SDKDIR/data/Model/resnet10
执行流结束 (EOS) 处理,如下所示
a. 完全读取文件。
b. 将空 v4l2buf
推送到解码器。
c. 等待所有输出平面缓冲区返回。
d. 设置 get_eos
decCap thread exit
e. 结束 TensorRT 线程。
f. 将 EOS 发送到转换器
conv output plane dqThread callback return false conv output plane dqThread exit conv capture plane dqThread callback return false conv capture plane dqThread exit
g. 删除解码器
deinit output plane and capture plane buffers
h. 删除转换器
unmap capture plane buffers
./video_dec_trt [Channel-num] <in-file1> <in-file2> ... <in-format> [选项]
选项 | 描述 |
---|---|
-- trt-onnxmodel | 设置 ONNX 模型文件名。 |
-- trt-deployfile | 设置部署文件名。(将要被弃用,因为 TensorRT 正在弃用 Caffe 解析器) |
-- trt-modelfile | 设置模型文件名。(将要被弃用,因为 TensorRT 正在弃用 Caffe 解析器) |
-- trt-mode <int> | 指定是否使用 float16 [0-2],其中 <int> 是以下之一
|
-- trt-enable-perf | 启用性能测量。 |