5分钟上手Rerun:用ARKit数据构建虚实融合AR场景

5分钟上手Rerun:用ARKit数据构建虚实融合AR场景

【免费下载链接】rerun Visualize streams of multimodal data. Fast, easy to use, and simple to integrate. Built in Rust using egui. 【免费下载链接】rerun 项目地址: https://gitcode.com/GitHub_Trending/re/rerun

你是否还在为AR开发中的多模态数据可视化发愁?本文将带你通过Rerun引擎,以ARKitScenes数据集为例,快速实现RGB图像、深度信息与3D网格的实时融合显示。读完本文你将掌握:多模态数据同步日志技术、3D标注与2D视图投影方法、自定义可视化布局设计。

核心功能与技术架构

Rerun是一个用Rust构建的多模态数据可视化引擎,特别适合处理AR/VR领域的复杂数据流。项目核心代码位于crates/目录,通过rerun_py/提供Python API接口。本案例基于examples/python/arkit_scenes/实现,主要展示以下技术点:

  • 多模态数据整合:同步处理RGB图像、深度图、3D网格和空间坐标
  • 相机标定可视化:通过Pinhole相机模型精确还原真实拍摄参数
  • 动态视角切换:在3D场景与2D视图间无缝切换并保持标注同步

快速开始:环境搭建与数据准备

1. 安装依赖

pip install --upgrade rerun-sdk
git clone https://gitcode.com/GitHub_Trending/re/rerun
cd GitHub_Trending/re/rerun
pip install -e examples/python/arkit_scenes

2. 下载ARKit数据集

运行数据集下载脚本,自动获取室内场景数据:

# 代码路径:[examples/python/arkit_scenes/arkit_scenes/download_dataset.py](https://link.gitcode.com/i/75a4d19383a2830c47b077c9572ca6c3)
python -m arkit_scenes.download_dataset

数据集包含:彩色图像、深度图、3D网格模型和家具标注框,存储在本地缓存目录中。

核心实现代码解析

1. 相机位姿与图像数据日志

# 代码路径:[examples/python/arkit_scenes/arkit_scenes/__main__.py](https://link.gitcode.com/i/8cf367a538112708f2dcefa21e795a86)
rr.log("world/camera_lowres", rr.Transform3D(transform=camera_from_world))
rr.log("world/camera_lowres", rr.Pinhole(image_from_camera=intrinsic, resolution=[w, h]))
rr.log(f"{entity_id}/rgb", rr.Image(rgb).compress(jpeg_quality=95))
rr.log(f"{entity_id}/depth", rr.DepthImage(depth, meter=1000))

这段代码实现了相机外参(位姿)和内参(焦距、主点)的日志记录,同时将RGB和深度图像关联到同一空间坐标系。其中Transform3D组件定义了相机在世界坐标系中的位置,Pinhole组件存储相机内参矩阵。

2. 3D网格与标注框可视化

ARKit数据中的3D重建网格通过以下代码日志:

# 代码路径:[examples/python/arkit_scenes/arkit_scenes/__main__.py](https://link.gitcode.com/i/8cf367a538112708f2dcefa21e795a86)
rr.log(
    "world/mesh",
    rr.Mesh3D(
        vertex_positions=mesh.vertices,
        vertex_colors=mesh.visual.vertex_colors,
        triangle_indices=mesh.faces,
    ),
    static=True,
)

家具标注框使用3D边界盒表示,并通过InstancePoses3D组件关联到世界坐标系:

for i, label_info in enumerate(annotation["data"]):
    rr.log(
        f"world/annotations/box-{uid}-{label}",
        rr.Boxes3D(
            half_sizes=half_size,
            centers=centroid,
            labels=label,
            colors=colors[i],
        ),
        rr.InstancePoses3D(mat3x3=mat3x3),
        static=True,
    )

3. 自定义可视化布局设计

通过Blueprint API创建多视图联动布局,实现3D场景与2D视图的同步标注:

# 代码路径:[examples/python/arkit_scenes/arkit_scenes/__main__.py](https://link.gitcode.com/i/8cf367a538112708f2dcefa21e795a86)
blueprint = rrb.Horizontal(
    rrb.Spatial3DView(name="3D"),
    rrb.Vertical(
        rrb.Tabs(
            rrb.Spatial2DView(
                name="RGB",
                origin=primary_camera_entity,
                contents=["$origin/rgb", "/world/annotations/**"],
            ),
            rrb.Spatial2DView(
                name="Depth",
                origin=primary_camera_entity,
                contents=["$origin/depth", "/world/annotations/**"],
            ),
            name="2D",
        ),
        rrb.TextDocumentView(name="Readme"),
    ),
)
rr.script_setup(args, "rerun_example_arkit_scenes", default_blueprint=blueprint)

运行效果与界面解析

启动可视化程序

python -m arkit_scenes

程序将自动打开Rerun Viewer,展示预设的四分割布局:

ARKit场景可视化界面

图1:Rerun Viewer的四窗口布局,从左到右依次为3D场景、RGB视图、深度图和文档说明

界面功能说明

  1. 3D场景窗口:展示完整的室内三维结构,可自由旋转和平移视角
  2. RGB视图:实时显示相机捕捉的彩色图像,并叠加3D标注投影
  3. 深度图窗口:以伪彩色显示场景深度信息,辅助判断空间距离
  4. 文档面板:显示数据集说明和操作指南

高级应用与扩展方向

1. 自定义标注颜色映射

修改Boxes3Dcolors参数,实现不同物体类型的颜色编码:

# 在标注日志代码中添加颜色映射逻辑
color_map = {"sofa": [255, 0, 0], "table": [0, 255, 0], "chair": [0, 0, 255]}
colors[i] = color_map.get(label, [255, 255, 255])

2. 集成实时AR数据流

参考examples/cpp/ros2_bridge/示例,可将Rerun与ROS2节点连接,实现实时AR场景可视化。

3. 性能优化建议

  • 对于大型场景,使用static=True标记静态网格以减少重绘
  • 通过compress(jpeg_quality=90)降低图像传输带宽
  • 在rerun.toml中调整渲染参数:max_points_per_mesh = 100000

总结与资源链接

本案例展示了如何利用Rerun快速构建AR数据可视化系统,关键优势在于:

  • 多模态数据融合:无需手动编写同步逻辑
  • 低代码集成:几行Python即可实现复杂可视化
  • 跨平台兼容:支持Windows/macOS/Linux系统

完整代码示例:examples/python/arkit_scenes/ 官方文档:docs/getting-started.md API参考:rerun_py/docs/

下一期将介绍如何将自定义AR标注数据导入Rerun系统,实现实时交互标注功能。关注项目README.md获取更新通知。

提示:按Space键可暂停/播放数据日志,Ctrl+滚轮缩放视图,右键拖动可调整视角。

【免费下载链接】rerun Visualize streams of multimodal data. Fast, easy to use, and simple to integrate. Built in Rust using egui. 【免费下载链接】rerun 项目地址: https://gitcode.com/GitHub_Trending/re/rerun

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值