5分钟上手Rerun:用ARKit数据构建虚实融合AR场景
你是否还在为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,展示预设的四分割布局:
图1:Rerun Viewer的四窗口布局,从左到右依次为3D场景、RGB视图、深度图和文档说明
界面功能说明
- 3D场景窗口:展示完整的室内三维结构,可自由旋转和平移视角
- RGB视图:实时显示相机捕捉的彩色图像,并叠加3D标注投影
- 深度图窗口:以伪彩色显示场景深度信息,辅助判断空间距离
- 文档面板:显示数据集说明和操作指南
高级应用与扩展方向
1. 自定义标注颜色映射
修改Boxes3D的colors参数,实现不同物体类型的颜色编码:
# 在标注日志代码中添加颜色映射逻辑
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+滚轮缩放视图,右键拖动可调整视角。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




