Gst-nvdewarper#

此插件对相机输入进行去畸变。它接受 gpu-id 和 config-file 作为属性。根据所选的表面配置,它可以生成最多四个去畸变表面。目前支持 18 种去畸变投影类型。在这些类型中,NVDS_META_SURFACE_FISH_PUSHBROOMNVDS_META_SURFACE_FISH_VERTCYL 用于 360-D 用例,以对 360° 相机输入进行去畸变。该插件按以下步骤执行其功能

  1. 读取配置文件并创建表面配置向量。它最多支持四个去畸变表面配置。

  2. 接收来自解码器的帧。根据配置,生成最多四个去畸变表面。

  3. 使用 NPP API 将这些表面缩小到网络/选定的去畸变器输出分辨率。

  4. 将包含去畸变表面的缓冲区推送到下游组件。

Gst-nvdewarper

输入和输出#

  • 输入

    • 包含 RGBA 格式帧的缓冲区

  • 控制参数

    • gpu-id;选择 GPU ID(仅限 dGPU)

    • config-file,包含去畸变器配置文件的路径名

  • 输出

    • 去畸变 RGBA 表面

    • NvDewarperSurfaceMeta,其中包含与每个表面关联的信息(projection_typesurface_indexsource_id)以及缓冲区中有效去畸变表面的数量 (num_filled_surfaces)

特性#

下表总结了插件的特性。

Gst-nvdewarper 特性#

特性

描述

发布版本

配置去畸变表面的数量

最多支持四个去畸变器表面。

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> 是从 03 的整数,表示去畸变表面 03


Gst-nvdewarper 配置文件 [surface<n>] 参数#

属性

属性类型

含义

类型和范围

示例注释

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:鱼眼到推扫
2:鱼眼到垂直径向圆柱
3:透视到透视
4:鱼眼到透视
5:鱼眼到鱼眼
6:鱼眼到圆柱
7:鱼眼到等距柱状
8:鱼眼到帕尼尼
9:透视到等距柱状
10:透视到帕尼尼
11:等距柱状到圆柱
12:等距柱状到等距柱状
13:等距柱状到鱼眼
14:等距柱状到帕尼尼
15:等距柱状到透视
16:等距柱状到推扫
17:等距柱状到立体
18:等距柱状到垂直径向圆柱

整数,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

表面

相机镜头的焦距,以像素/弧度为单位。可以指定为

fxy : 单个浮点值
<fx, fy> : 两个浮点值的数组,分别对应于 x 和 y 方向的焦距

浮点数,>0.0

focal-length=437 或 focal-length=442.63;395.106339

src-fov

表面

源垂直视场,以度为单位。用于在未提供源焦距时计算源焦距。

浮点数,>0.0

src-fov=180

distortion

表面

鱼眼/透视源的畸变多项式中的畸变系数。

对于透视源

三个径向系数
(k_0,k_1,k_2): r^'=r(1+k_0 r^2+k_1 r^4+k_2 r^6 )
两个切向系数
(k_3,k_4):x'=x+[1+2k_3 xy+k_4 (r^2 + 2x^2)]
y^'=y+[ k_3 (r^2+2y^2+2k_4 xy)]

对于鱼眼源

四个径向系数

(k_0,k_1,k_2, k_3): r^'=r(1+k_0 r^2+k_1 r^4+k_2 r^6+k_3 r^8 )

4/5 个浮点数的数组

distortion=

-0.3721;0.1023;-0.00203;0;0

distortion=k_0,;k_1,;k_2;k_3;k_4

如果未提供,则所有系数都设置为 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:cudaAddressModeClamp(默认)- 将边界外的点设置为最近的像素值
1:cudaAddressModeBorder - 将边界外的点设置为透明黑色

整数,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,其中

X 对应于俯仰角,

Y 对应于偏航角,并且

Z 对应于横滚角。

默认旋转顺序为 YXZ

三个字符的字符串

“rot-axes=ZXY”

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

表面

设置目标图像焦距。可以指定为

fxy : 单个浮点值
<fx, fy> : 两个浮点值的数组

如果指定,此设置将覆盖顶角、底角设置。

浮点数,>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-nvstreammuxnum-surfaces-per-framebatch-size。批大小必须是去畸变表面数量的倍数,该数量应在 num-surfaces-per-frame 中设置。

Gst 属性#

下表描述了 Gst-nvdewarper 插件的 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