DeepStream 3D 深度相机应用#
deepstream-3d-depth-camera
示例应用程序位于 app/sample_apps/deepstream-3d-depth-camera,供您参考。此示例演示了两个不同的 pipeline,它们将深度相机从 2D 带入 3D 世界。深度和颜色数据捕获组件由 Intel® RealSense™ 深度相机 D435 系列生成。有关更多详细信息,请参阅 https://www.intelrealsense.com/depth-camera-d435/。
先决条件#
您必须安装以下开发包
GStreamer-1.0
GStreamer-1.0 基础插件
GStreamer-1.0 gstrtspserver
X11 客户端库
libyaml-cpp-dev
RealSense SDK
要安装这些软件包,请执行以下命令
sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev \ libgstrtspserver-1.0-dev libx11-dev libyaml-cpp-dev
按照 RealSense SDK 文档添加 RealSense 公钥和存储库列表。对于 x86,请参考 IntelRealSense/librealsense。对于 Jetson 平台,请参考 IntelRealSense/librealsense。您可以将 Ubuntu 20.04 源路径添加到 apt-repository 以安装依赖项。
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo bionic main" -u
然后安装
librealsense2
包以构建和测试。sudo apt-get install librealsense2-utils librealsense2-dev
确保 RealSense SDK 版本不早于 2.48。
插入 Intel RealSense 深度 D400 系列 USB 相机。要验证相机并升级固件,请运行
realsense-viewer
并从 UI 更新。导航到文件夹 sources/apps/sample_apps/deepstream-3d-depth-camera。如果您在 deepstream 容器内运行这些命令,请确保相机设备已挂载在
docker run
命令中。例如docker run --rm -it --gpus '"device=0"' --device /dev/video0 --device /dev/video1 --device /dev/video2 ...
将
DISPLAY
环境变量导出到正确的显示。例如,export DISPLAY=:0.0
。
深度颜色捕获到 2D 渲染 Pipeline 概述#
这是从深度捕获到基于 2D 的 depthmap 再到使用用户配置的线性颜色直接渲染的第一个 pipeline。
该 pipeline 由 ds_3d_realsense_depth_capture_render.yaml
设置。它有两个组件,用于深度/颜色的 ds3d::dataloader
和用于 GLES 2D 渲染的 datarender
。
ds3d::dataloader
加载自定义库libnvds_3d_dataloader_realsense.so
,并通过createRealsenseDataloader
函数创建 RealSense dataloader。此特定加载器配置为输出 [color, depth] 流。Gst-appsrc 将 dataloader 连接到 deepstream pipeline。name: realsense_dataloader type: ds3d::dataloader out_caps: ds3d/datamap custom_lib_path: libnvds_3d_dataloader_realsense.so custom_create_function: createRealsenseDataloader
ds3d::datarender
加载自定义库libnvds_3d_gl_datarender.so
,并通过createDepthStreamDataRender
函数创建 GLES 渲染器。此特定加载器配置为 2D 深度和彩色图像。Gst-appsink 将 datarender 连接到 deepstream pipeline。name: depth-render type: ds3d::datarender in_caps: ds3d/datamap custom_lib_path: libnvds_3d_gl_datarender.so custom_create_function: createDepthStreamDataRender
realsense_dataloader
在ds3d/datamap
中捕获颜色和深度流,然后将数据传递到ds3d::datarender
组件depth-render
。
深度颜色捕获到 3D 点云处理和渲染#
第二个 pipeline 是从深度捕获、3D 点云处理和对齐,到带颜色的 3D 点云渲染。
第二个 pipeline 由 ds_3d_realsense_depth_to_point_cloud.yaml
设置。它有 3 个组件:用于深度/颜色捕获的 ds3d::dataloader
,用于深度到点云处理的 ds3d::datafilter
,以及用于 GLES 3D 点渲染的 datarender
。
ds3d::dataloader
与第一个 pipeline 相同,用于深度和颜色捕获。它还输出颜色/深度传感器的内部参数,以及从深度到颜色传感器模块的外部参数。name: realsense_dataloader type: ds3d::dataloader out_caps: ds3d/datamap custom_lib_path: libnvds_3d_dataloader_realsense.so custom_create_function: createRealsenseDataloader
ds3d::datafilter
加载自定义库libnvds_3d_depth2point_datafilter.so
,并通过createDepth2PointFilter
函数创建深度到 3D 点处理过滤器。此特定过滤器从深度生成 3D 点云数据集,并计算 UV 坐标图,用于点和颜色位置之间的对应关系。它需要来自dataloader
的传感器内部和外部数据来进行对齐。name: point2cloud_datafilter type: ds3d::datafilter in_caps: ds3d/datamap out_caps: ds3d/datamap custom_lib_path: libnvds_3d_depth2point_datafilter.so custom_create_function: createDepth2PointFilter
ds3d::datafilter
由nvds3dfilter
Gst-plugin 加载,它接受 sink_caps 作为in_caps
,并接受 src_caps 作为out_caps
。它创建一个自定义的ds3d::datafilter
实例,并将数据处理为ds3d/datamap
。ds3d::datarender
加载自定义库libnvds_3d_gl_datarender.so
,并通过createPointCloudDataRender
函数创建 GLES 渲染器。此特定加载器配置用于 3D 点和颜色渲染。它还支持基于鼠标拖动的 3D 场景旋转。name: point-render type: ds3d::datarender in_caps: ds3d/datamap custom_lib_path: libnvds_3d_gl_datarender.so custom_create_function: createPointCloudDataRender
realsense_dataloader
在ds3d/datamap
中捕获颜色和深度流以及传感器的内部和外部参数。然后,它将数据传递到下一个组件point2cloud_datafilter
。此组件生成 3D 点云数据和 UV 坐标映射到新的输出数据ds3d/datamap
。最后,数据被传递到ds3d::datarender
组件point-render
以进行 3D 渲染。
在配置文件中,
in_caps
和out_caps
对应于 Gstreamer 的 sink_caps 和 src_caps。
入门#
运行 RealSense 相机进行深度捕获和 2D 渲染示例#
运行深度捕获 2D 渲染 pipeline
$ deepstream-3d-depth-camera -c ds_3d_realsense_depth_capture_render.yaml
这将设置一个 realsense dataloader。
name: realsense_dataloader type: ds3d::dataloader out_caps: ds3d/datamap custom_lib_path: libnvds_3d_dataloader_realsense.so custom_create_function: createRealsenseDataloader
然后,它将 ds3d/datamap 流式传输到最终渲染组件:depth-render。
name: depth-render type: ds3d::datarender in_caps: ds3d/datamap custom_lib_path: libnvds_3d_gl_datarender.so custom_create_function: createDepthStreamDataRender
depth-render 自定义库应在同一窗口中同时显示深度数据和颜色数据。更新
min_depth/max_depth
以移除深度渲染中的前景和背景对象。根据 RealSense 规范,D435 相机的深度范围在0.3
到3
米之间。
min_depth: 0.3 # in meters
max_depth: 2.0 # in meters
更新 min_depth_color/min_depth_color [R, G, B] 值以可视化深度的颜色图。
min_depth_color: [255, 128, 0] # RGB color value for mininum depth
max_depth_color: [0, 128, 255] # RGB color value for maximum depth
The other colors are linearly interpolated between ``min_depth_color`` and ``max_depth_color``
运行 3D 深度捕获、点云过滤器和 3D 点渲染示例#
运行深度捕获和 3D 处理 pipeline
$ deepstream-3d-depth-camera -c ds_3d_realsense_depth_to_point_cloud.yaml
这将设置一个 realsense dataloader(与 2D 深度相同)。然后,它将 ds3d/datamap 流式传输到下游 datafilter 组件 point2cloud_datafilter。
name: realsense_dataloader type: ds3d::dataloader out_caps: ds3d/datamap custom_lib_path: libnvds_3d_dataloader_realsense.so custom_create_function: createRealsenseDataloader
它将 ds3d/datamap 流式传输到
nvds3dfilter
Gst-plugin,后者加载point2cloud_datafilter
以将 2D 深度转换为 3D 点。有关nvds3dfilter
Gst-plugin 的更多详细信息,请参阅 Gst-nvds3dfilter。name: point2cloud_datafilter type: ds3d::datafilter in_caps: ds3d/datamap out_caps: ds3d/datamap custom_lib_path: libnvds_3d_depth2point_datafilter.so custom_create_function: createDepth2PointFilter
最后,ds3d/datamap 作为数据流被传递到渲染组件
point-render
。name: point-render type: ds3d::datarender in_caps: ds3d/datamap custom_lib_path: libnvds_3d_gl_datarender.so custom_create_function: createPointCloudDataRender
view_* 字段是视图位置的眼睛,类似于 OpenGL
gluLookAt()
。view_position: [0, 0, -1] # view position in xyz coordinates view_target: [0, 0, 1] # view target which is the direction pointing to view_up: [0, -1.0, 0] # view up direction
near/far/fov 字段是眼睛的透视范围,类似于 OpenGL
gluPerspective()
。near: 0.01 # nearest points of perspective far: 10.0 # farmost points of perspective fov: 40.0 # FOV of perspective
DeepStream 3D 深度相机应用配置规范#
deepstream-3d-depth-camera [ds3d::userapp]
组设置#
下表演示了 ds_3d_realsense_depth_to_point_cloud.yaml 的组设置示例。
属性 |
含义 |
类型和范围 |
示例 |
---|---|---|---|
type |
指定类型 ds3d::userapp |
用于用户调试的组件类型 |
必须是 type: ds3d::userapp |
name |
指示用户定义的组件名称 |
字符串 |
name: debugdump |
enable_debug |
指示是否启用调试日志 |
布尔值 |
enable_debug: False |
dump_depth |
指示转储深度原始数据的文件位置 |
字符串 |
dump_depth: depth_uint16_640x480.bin |
dump_color |
指示转储颜色原始数据的文件位置 |
字符串 |
dump_color: color_rgba_1920x1080.bin |
dump_points |
指示转储 3D 点原始数据的文件位置。数据类型为 Float 和 XYZ 打包 |
字符串 |
dump_points: pointxyz.bin |
DS3D 自定义组件配置规范#
有关更多详细信息,请参阅 DS_3D 支持的自定义组件规范 部分,位于 DeepStream-3D 自定义应用和库教程 中。
从源代码构建应用程序#
转到文件夹 sources/apps/sample_apps/deepstream-3d-depth-camera。
运行以下命令
$ Set CUDA_VER in the MakeFile as per platform. For both Jetson & x86, CUDA_VER=12.2 $ make $ make install
注意
查看源代码以了解有关如何通过
Gst-appsrc
和Gst-appsink
加载 dataloader/datarender 的更多详细信息。datafilter 由nvds3dfilter
Gst-plugin 加载。