基于 Rerun + Gradio + SAM 2 的交互式 3D 标注应用:annotation_gradio 示例深度解析
【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun
本篇文章围绕仓库中的examples/python/annotation_gradio外部示例展开,剖析如何将 Rerun 与 Gradio 组合,构建一个可交互的 3D 标注应用:无论是单目视频流中的对象追踪(实时生成深度图与点云),还是多视角 RGB-D 数据中 2D 掩码的三角化与跨视角传播,均基于 Segment Anything 2(SAM 2)实现。读完本文,你将掌握该示例的两种工作模式、完整的运行方法(基于 Pixi),以及背后 Rerun 用于承载 2D/3D 空间数据的核心可视化原语。
示例定位:仓库中的 Image & Video Understanding 类外部示例
在 Rerun 仓库的示例清单 examples/manifest.toml 中,annotation_gradio被归类在"Image and video understanding"(图像与视频理解)类别下,与detect_and_track_objects、sam3d_body、sam2_depthanything、segment_anything_model等示例并列。该分类的描述是"与图像和视频处理相关的示例,突出 Rerun 在 2D 方面的能力"——而本示例更进一步,将 2D 分割能力与 3D 空间信息(深度、点云、多视角几何)打通。
需要特别说明的是:这是一个外部示例(external example)。Rerun 仓库内仅保留其说明文档 examples/python/annotation_gradio/README.md,实际代码托管在独立的annotation-example仓库中,运行前需要通过git clone拉取完整代码。这与仓库内sam2_depthanything等外部示例的形态一致(见 examples/python/sam2_depthanything/README.md)。
技术栈概览
该应用的核心技术组合如下:
| 组件 | 职责 |
|---|---|
| Rerun | 负责数据的可视化与交互:2D 掩码、深度图、点云、多视角 3D 场景的实时呈现 |
| Gradio | 提供 Web 交互界面,让用户通过浏览器完成对象点选、标注与结果查看 |
| Segment Anything 2(SAM 2) | 提供图像/视频分割能力,是两种模式共用的底层分割与追踪模型 |
SAM 2 是 Segment Anything 的延续工作,其关键改进在于引入了跨帧的会话级记忆模块(per-session memory module),使模型能够在整段视频中持续追踪被选中的对象——即使对象暂时离开视野,模型也能凭借此前帧的上下文信息恢复跟踪。这一特性正是本示例"在视频流中标注并追踪对象"能力的基石。
两种工作模式详解
该应用包含两种工作模式,两者都基于 SAM 2,但数据输入与 3D 重建策略完全不同。
模式一:单目视频流中的对象追踪(Monocular)
第一种模式聚焦于在单目视频流中追踪一个对象。除了分割掩码之外,应用还会实时生成深度图(depth maps)与点云(point clouds),为标注过程提供完整的 3D 空间上下文。用户可以:
- 直接在三维空间中可视化、检查(inspect)被追踪的对象;
- 在 3D 视角下对对象进行标注,而不再局限于 2D 画面。
这意味着仅凭一个普通单目摄像头,你就能获得"2D 分割 + 3D 空间位置"的完整标注体验。仓库内与之技术路线相近的参考示例是 examples/python/sam2_depthanything/README.md——该示例把 SAM 2 的视频追踪能力与单目深度估计模型结合,实现"仅从一段单目视频中在 3D 空间追踪对象",与本模式一脉相承,可作为理解单目深度可视化链路的对照材料。
模式二:多视角 RGB-D 数据的 3D 掩码重建与传播(Multiview RGB-D)
第二种模式使用多视角 RGB-D 视频数据集,处理流程可以拆解为四个关键步骤:
- 双视角分割:从两路同步且已标定(synchronized and calibrated)的 RGB-D 视角中分别获取分割掩码;
- 三角化重建 3D 掩码:利用两路 2D 掩码进行三角化(triangulate),重建出所选对象的精确 3D 掩码;
- 跨视角传播:将这一 3D 掩码传播到所有相机视角;
- 跨帧传播:将 3D 掩码沿视频逐帧传播,最终得到对象随时间演化的完整 3D 追踪轨迹(fully tracked 3D object trajectory over time)。
这一模式展示了"2D 分割 → 3D 几何 → 时序追踪"的完整链路,非常适合需要精确 3D 对象级标注的数据生产场景。
运行指南:基于 Pixi 一键启动
由于该示例是外部示例,运行前需要先克隆其独立仓库,并确保本机已安装Pixi 包管理器(Pixi 是该项目广泛使用的环境与任务管理工具,仓库内大量示例与开发任务均依赖它,参见 examples/python/README.md 中"Running examples with Pixi"一节)。
前置条件
- 已安装 Pixi 包管理器;
- 具备基本的命令行操作能力。
步骤一:克隆外部示例仓库
git clone https://github.com/rerun-io/annotation-example cd annotation-example步骤二:运行单目模式应用
pixi run app执行上述命令将启动单目(monocular)模式的应用,即模式一:在单目视频流中追踪对象,并实时生成深度图与点云。
步骤三:运行多视角模式应用
pixi run multiview-app执行上述命令将启动多视角 RGB-D 模式的应用,即模式二:从两个同步且标定的 RGB-D 视角出发,重建并跨视角、跨帧传播 3D 掩码。
pixi run <task>会解析仓库内pixi.toml中预定义的任务(task)并自动管理依赖环境,因此克隆后无需手工安装依赖即可运行,这也是该示例推荐 Pixi 的原因。
可视化原理:Rerun 如何承载 2D 与 3D 标注数据
虽然本示例的实际代码在外部仓库,但它在 Rerun 侧所依赖的可视化原语,都可以在仓库内的其他示例中找到对应的标准用法。理解这些原语,有助于你读懂 annotation 应用在 Rerun Viewer 中呈现的每一类数据。
时间轴(Timeline):把每一帧数据挂到时间线上
标注与追踪数据是逐帧产生的,Rerun 通过set_time将每一份日志数据绑定到时间轴上的特定帧。参考 examples/python/segment_anything_model/README.md 中的标准写法:
for n, image_uri in enumerate(args.images): rr.set_time("image", sequence=n) # ... 记录该帧的分割结果对于本示例,每个时刻的数据(掩码、深度、点云、相机位姿)都需要挂在同一个时间戳下,才能在 Viewer 中按时间轴同步回放。
图像与分割掩码:Image / SegmentationImage
- 输入帧以
rr.Image记录到某个实体路径下; - 分割掩码叠加后以
rr.SegmentationImage记录,即可在 Rerun 中按类着色叠加显示。
参考写法(见 examples/python/segment_anything_model/README.md):
rr.log("image", rr.Image(image)) rr.log("image/masks", rr.SegmentationImage(segmentation_img.astype(np.uint8)))深度图与针孔相机:DepthImage / Pinhole
模式一中"实时深度图与点云"在 Rerun 中的标准落地方式,可以参考仓库内的 RGBD 示例 examples/python/rgbd/README.md:
# 定义针孔相机模型(分辨率 + 焦距),把图像挂到 3D 世界坐标系下 rr.log( "world/camera/image", rr.Pinhole( resolution=[img_depth.shape[1], img_depth.shape[0]], focal_length=0.7 * img_depth.shape[1], ), ) # 记录深度图,meter 参数声明深度值到米的比例 rr.log("world/camera/image/depth", rr.DepthImage(img_depth, meter=DEPTH_IMAGE_SCALING))当图像挂载了Pinhole相机模型后,Rerun 会自动将其投射到 3D 空间中,结合DepthImage即可实时生成点云视图——这正是 annotation 应用模式一中"在三维空间中检查被追踪对象"的实现基础。
3D 掩码与追踪轨迹:三角化的空间落点
模式二中的 3D 掩码与跨帧轨迹,对应 Rerun 的 3D 空间视图能力:一旦多视角相机都以Pinhole(含外参)挂载到同一world坐标系下,三角化得到的 3D 掩码点、对象轨迹点就可以作为 3D 实体直接写入场景,并随 Timeline 逐帧演进。用户可以自由旋转视角,从任意角度检查掩码重建精度与轨迹一致性——这正是"交互式 3D 标注"的核心交互体验。
实战价值与应用场景
结合本项目"Visualize, query, and stream to train on multimodal robotics data"的定位,该类交互式 3D 标注应用在以下场景中具有直接价值:
- 机器人多模态数据标注:为抓取、操作等任务生成对象级 3D 掩码与轨迹标签,作为训练数据的生产工具;
- 多视角重建数据质检:借助三角化与跨视角传播,快速发现重建误差或遮挡导致的掩码漂移;
- 单目感知方案验证:仅凭普通摄像头即可获得带 3D 上下文的标注体验,降低标注硬件门槛;
- 教学与原型演示:Gradio 的 Web 界面使得非技术成员也能参与标注流程,Rerun 则保证了全程数据的可视化可回溯。
提示:本文介绍的是外部示例的使用方式与底层可视化原理,具体代码实现请以克隆后的
annotation-example仓库为准;仓库内 examples/python/annotation_gradio/README.md 保留的是该示例的入口文档,examples/manifest.toml 记录了它在示例体系中的分类归属。
【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考