Gst-nvdewarper#
此插件对相机输入进行去畸变。它接受 gpu-id 和 config-file 作为属性。根据所选的表面配置,它可以生成最多四个去畸变表面。目前支持 18 种去畸变投影类型。在这些类型中,NVDS_META_SURFACE_FISH_PUSHBROOM
和 NVDS_META_SURFACE_FISH_VERTCYL
用于 360-D 用例,以对 360° 相机输入进行去畸变。该插件按以下步骤执行其功能
读取配置文件并创建表面配置向量。它最多支持四个去畸变表面配置。
接收来自解码器的帧。根据配置,生成最多四个去畸变表面。
使用 NPP API 将这些表面缩小到网络/选定的去畸变器输出分辨率。
将包含去畸变表面的缓冲区推送到下游组件。

输入和输出#
输入
包含 RGBA 格式帧的缓冲区
控制参数
gpu-id;选择 GPU ID(仅限 dGPU)
config-file,包含去畸变器配置文件的路径名
输出
去畸变 RGBA 表面
NvDewarperSurfaceMeta
,其中包含与每个表面关联的信息(projection_type、surface_index 和 source_id)以及缓冲区中有效去畸变表面的数量 (num_filled_surfaces)
特性#
下表总结了插件的特性。
特性 |
描述 |
发布版本 |
---|---|---|
配置去畸变表面的数量 |
最多支持四个去畸变器表面。 |
DS 3.0 |
配置每个表面的投影类型 |
目前支持 FishPushBroom 和 FishVertRadCyd 投影。 |
DS 3.0 |
配置每个表面的投影类型 |
PerspectivePerspective 投影 |
DS 5.0 |
配置每个表面的投影类型 |
18 种投影 |
DS 6.2 |
配置每个表面的索引 |
在多个表面具有相同投影类型的情况下要设置的表面索引。 |
DS 3.0 |
配置每个表面的宽度和高度 |
DS 3.0 |
|
配置每个表面的去畸变参数 |
每个表面可配置的偏航角、横滚角、俯仰角、顶角、底角以及焦距和 CUDA 地址模式去畸变参数。对于 PerspectivePerspective 投影类型,还可以配置视场、畸变和主点。 |
DS 3.0 |
可配置的去畸变器输出分辨率 |
创建最多四个指定输出分辨率的表面批次;在内部将所有去畸变器表面缩放到输出分辨率。 |
DS 3.0 |
可配置的 NVDS CUDA 内存类型 |
— |
DS 3.0 |
多 GPU 支持 |
— |
DS 3.0 |
通道视图 CSV 校准文件支持 |
如果设置,则忽略 [surface<n>] 组中的属性。仅支持 FishPushBroom 和 FishVertRadCyd。 |
DS 3.0 |
点视图 CSV 校准文件支持 |
如果设置,则忽略 [surface<n>] 组中的属性。仅支持 FishPushBroom 和 FishVertRadCyd。 |
DS 3.0 |
配置源 ID |
在 NvDewarperSurfaceMeta 中设置源 ID 信息。 |
DS 4.0 |
可配置的输出缓冲区数量 |
分配的输出去畸变器缓冲区数量。每个缓冲区包含四个去畸变输出表面。 |
DS 4.0 |
可配置的每个输出缓冲区的表面数量 |
每个缓冲区的去畸变输出表面数量。最大允许值为 4。 |
DS 5.0 |
支持高级配置参数 |
鱼眼畸变系数、目标焦距、目标主点、旋转轴序列、旋转矩阵 |
DS 6.2 |
配置文件参数#
配置文件位于 configs/deepstream-app/config_dewarper.txt。配置文件在 [surface<n>]
组中指定每个表面的配置参数,其中 <n> 是从 0 到 3 的整数,表示去畸变表面 0 到 3。
属性 |
属性类型 |
含义 |
类型和范围 |
示例注释 |
---|---|---|---|---|
output-width |
全局 |
将去畸变表面缩放到指定的输出宽度 |
整数,>0 |
output-width=960 |
output-height |
全局 |
将去畸变表面缩放到指定的输出高度 |
整数,>0 |
output-height=752 |
dewarp-dump-frames |
全局 |
要转储的去畸变帧数。 |
整数,>0 |
dewarp-dump-frames=10 |
num-batch-buffers |
全局 |
每个缓冲区的去畸变输出表面数量,即缓冲区的批大小。 |
整数,0 到 4 |
num-batch-buffers=4 |
projection-type |
表面 |
选择投影类型。支持的类型有
|
整数,1 到 18 |
projection-type=1 |
surface-index |
表面 |
区分相同投影类型的表面的索引。 |
整数,≥0 |
surface-index=0 |
width |
表面 |
去畸变表面宽度。 |
整数,>0 |
width=3886 |
height |
表面 |
去畸变表面高度。 |
整数,>0 |
height=666 |
top-angle |
表面 |
顶部视场角,以度为单位。 |
浮点数,−180.0 到 180.0 |
top-angle=0 |
bottom-angle |
表面 |
底部视场角,以度为单位。 |
浮点数,−180.0 到 180.0 |
bottom-angle=0 |
pitch |
表面 |
查看参数俯仰角,以度为单位。 |
浮点数,0.0 到 360.0 |
pitch=90 |
yaw |
表面 |
查看参数偏航角,以度为单位。 |
浮点数,0.0 到 360.0 |
yaw=0 |
roll |
表面 |
查看参数横滚角,以度为单位。 |
浮点数,0.0 到 360.0 |
roll=0 |
focal-length |
表面 |
相机镜头的焦距,以像素/弧度为单位。可以指定为
|
浮点数,>0.0 |
focal-length=437 或 focal-length=442.63;395.106339 |
src-fov |
表面 |
源垂直视场,以度为单位。用于在未提供源焦距时计算源焦距。 |
浮点数,>0.0 |
src-fov=180 |
distortion |
表面 |
鱼眼/透视源的畸变多项式中的畸变系数。 对于透视源
对于鱼眼源 四个径向系数
|
4/5 个浮点数的数组 |
distortion= -0.3721;0.1023;-0.00203;0;0
如果未提供,则所有系数都设置为 0(无畸变) |
src-x0 |
表面 |
源图像的投影中心 X 坐标,以像素坐标表示。 通常,它是 (srcWidth-1)/2,但如果图像已校准或环绕,则可能不同。 |
浮点数,≥0 |
src-x0=479.5 如果未提供,将采用其默认值 = (srcWidth-1)/2 |
src-y0 |
表面 |
源图像的投影中心 Y 坐标,以像素坐标表示。 通常,它是 (srcHeight-1)/2,但如果图像已校准或环绕,则可能不同。 |
浮点数,≥0 |
src-y0=375.5 如果未提供,将采用其默认值 = (srcHeight-1)/2 |
cuda-address-mode |
表面 |
Cuda 纹理寻址模式。目前支持
|
整数,0 或 1 |
cuda-address-mode= 1 |
aisle-calibration-file |
全局 |
通道视图的配置文件路径名。 仅为 PushBroom 和/或 VertRadCyl 投影类型设置用于 360 D 应用程序。 如果设置,则忽略 [surface<n>] 组中的属性。配置文件是一个 CSV 文件,列如 sensorId 和 cameraId,以及去畸变参数,如顶角、底角、偏航角、横滚角、俯仰角、焦距、宽度和高度。 |
字符串 |
aisle-calibration-file= csv_files/nvaisle_2M.csv |
spot-calibration-file |
全局 |
点视图的配置文件路径名。 仅为 PushBroom 和/或 VertRadCyl 投影类型设置用于 360 D 应用程序。 如果设置,则忽略 [surface<n>] 组中的属性。配置文件是一个 CSV 文件,列如 sensorId 和 cameraId,以及去畸变参数,如顶角、底角、偏航角、横滚角、俯仰角、焦距、宽度和高度。 |
字符串 |
spot-calibration-file= csv_files/-nvspot_2M.csv 有关点视图配置文件的示例,请参见上面的示例文件。 |
rot-axes |
表面 |
一个三字符字符串,用于指定旋转角度的应用顺序。 可能的值为:XYZ、XZY、YXZ、YZX、ZXY、ZYX,其中
默认旋转顺序为 YXZ |
三个字符的字符串 |
|
control |
表面 |
用于改变扭曲量的控制参数。适用于帕尼尼、立体和推扫投影。 |
浮点数 |
control=1.0。 control=0 与透视输出相同。 |
rot-matrix |
表面 |
将旋转配置为 3X3 旋转矩阵。矩阵在右手屏幕空间中指定,X 向右,Y 向下,Z 向外。 如果指定,此设置将覆盖偏航角、俯仰角、横滚角设置。 |
9 个浮点数的数组 |
rot-matrix=0.5;-0.86;0;0.86;0.5;0;0;0.0;1.0 |
dst-focal-length |
表面 |
设置目标图像焦距。可以指定为
如果指定,此设置将覆盖顶角、底角设置。 |
浮点数,>0.0 |
dst-focal-length=350;316 |
dst-principal-point |
表面 |
设置目标图像中主点的 X 坐标和 Y 坐标,以像素为单位 如果指定,此设置将覆盖顶角、底角设置。 |
浮点数,>0.0 |
dst-principal-point=521.02;257.37 |
注意
如果未提供视角(顶部和底部)/dst-focal-length/dst-principal-point,则目标投影中心(主点)和焦距与源保持相同。
- 为了提高灵活性,num-batch-buffers 也是一个 GstProperty。插件属性按顺序解析,因此如果 num-batch-buffers 既附加到 gstreamer 管道中的 GstElement(例如,使用
gst-launch-1.0
命令),又在配置文件中传递,则将使用应用的最新配置(请参见下面的示例)。 示例
配置文件 (
config_dewarper.txt
) 带有num-batch-buffers=2
。带有属性
num-batch-buffers=1
的命令行参数。
管道
gst-launch-1.0 … ! nvdewarper config-file=config_dewarper.txt num-batch-buffers=1 ! …
gst-launch-1.0 … ! nvdewarper num-batch-buffers=1 config-file=config_dewarper.txt ! …
管道 1 将导致每个缓冲区 1 个表面,而管道 2 将导致每个缓冲区 2 个表面。
可以使用以下管道之一测试此插件。
对于 dGPU
gst-launch-1.0 filesrc location=/opt/nvidia/deepstream/deepstream/samples/streams/sample_cam6.mp4 ! qtdemux ! h264parse ! nvv4l2decoder ! nvvideoconvert ! nvdewarper config-file=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-dewarper-test/config_dewarper.txt source-id=6 ! m.sink_0 nvstreammux name=m width=960 height=752 \ batch-size=4 num-surfaces-per-frame=4 ! nvmultistreamtiler ! nveglglessink
透视投影用例
gst-launch-1.0 filesrc location=/opt/nvidia/deepstream/deepstream/samples/streams/yoga.mp4 ! qtdemux ! h264parse ! nvv4l2decoder ! nvvideoconvert ! nvdewarper config-file=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-dewarper-test/config_dewarper_perspective.txt ! m.sink_0 nvstreammux name=m width=3680 height=2428 \ batch-size=1 num-surfaces-per-frame=1 ! nvmultistreamtiler ! nveglglessink
对于 Jetson
gst-launch-1.0 filesrc location=/opt/nvidia/deepstream/deepstream/samples/streams/sample_cam6.mp4 ! qtdemux ! h264parse ! nvv4l2decoder ! nvvideoconvert ! nvdewarper config-file=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-dewarper-test/config_dewarper.txt source-id=6 ! m.sink_0 nvstreammux name=m width=960 height=752 batch-size=4 \ num-surfaces-per-frame=4 ! nvmultistreamtiler ! nv3dsink
透视投影用例
gst-launch-1.0 filesrc location=/opt/nvidia/deepstream/deepstream/samples/streams/yoga.mp4 ! qtdemux ! h264parse ! nvv4l2decoder ! nvvideoconvert ! nvdewarper config-file=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-dewarper-test/config_dewarper_perspective.txt ! m.sink_0 nvstreammux name=m width=3680 height=2428 \ batch-size=1 num-surfaces-per-frame=1 ! nvmultistreamtiler ! nv3dsink
图像文件示例 dGPU
gst-launch-1.0 filesrc location=/opt/nvidia/deepstream/deepstream/samples/streams/yoga.jpg ! nvjpegdec ! nvvideoconvert ! nvdewarper config-file=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-dewarper-test/config_dewarper_perspective.txt ! nvvideoconvert ! jpegenc ! filesink location=output.jpg
图像文件示例 Jetson
gst-launch-1.0 filesrc location=/opt/nvidia/deepstream/deepstream/samples/streams/yoga.jpg ! nvjpegdec ! nvvideoconvert ! nvdewarper config-file=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-dewarper-test/config_dewarper_perspective.txt ! nvvideoconvert ! jpegenc ! filesink location=output.jpg
为了更好地查看 cuda-address-mode 的效果,您可以更改去畸变大小。例如,在 config_dewarper_perspective.txt 中将 [surface0] 参数更改为
width=7360 height=4856 cuda-address-mode=1
Gst-nvdewarper 插件始终输出一个 GStreamer 缓冲区,其中包含由 num-batch-buffers 定义的去畸变表面数量(当前最多支持四个表面)。这些去畸变表面将缩放到配置文件中设置的输出分辨率 (output-width × output-height
)。此外,必须相应地设置 Gst-nvstreammux 的 num-surfaces-per-frame 和 batch-size。批大小必须是去畸变表面数量的倍数,该数量应在 num-surfaces-per-frame 中设置。
Gst 属性#
下表描述了 Gst-nvdewarper 插件的 Gst 属性。
属性 |
含义 |
类型和范围 |
示例和注释 |
---|---|---|---|
config-file |
Gst-nvdewarper 元素的配置文件的绝对路径名 |
字符串 |
config-file= configs/ deepstream-app/ config_dewarper.txt |
gpu-id |
要使用的 GPU 的设备 ID(仅限 dGPU) |
整数,0 到 4,294,967,295 |
source-id=6 |
source-id |
源 ID,例如相机 ID |
整数,0 到 4,294,967,295 |
num-output-buffers=4 |
num-batch-buffers |
每个缓冲区的去畸变输出表面数量,即缓冲区的批大小 |
整数,0 到 4 |
num-batch-buffers=4 |
nvbuf-memory-type |
要分配的内存类型。对于 dGPU 0 (nvbuf-mem-default):默认内存,cuda-device 1 (nvbuf-mem-cuda-pinned):Pinned/Host CUDA 内存 2 (nvbuf-mem-cuda-device) 设备 CUDA 内存 3 (nvbuf-mem-cuda-unified):统一 CUDA 内存 对于 Jetson 0 (nvbuf-mem-default):默认内存,表面数组 4 (nvbuf-mem-surface-array):表面数组内存 |
整数,0 到 4 |
nvbuf-memory-type=3 |