news 2026/9/16 21:00:41

Rerun 数据探索指南(一):使用 DataFrame 视图在表格中查看与排查录制数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rerun 数据探索指南(一):使用 DataFrame 视图在表格中查看与排查录制数据

Rerun 数据探索指南(一):使用 DataFrame 视图在表格中查看与排查录制数据

【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun

本篇指南围绕 Rerun 官方入门系列"data-out"的第一部分展开,以人脸追踪(face tracking)示例的录制数据为对象,讲解如何先在时序图(timeseries)视图中定位目标信号,再创建DataFrame 视图,以表格形式逐行检查实体数据、理解时间线索引、空值空洞与组件列语义。读完本文,你将掌握 Rerun 中 DataFrame 视图的完整配置流程(内容选择、时间线索引、时间范围过滤、空单元格填充等),并学会从视图配置反推底层数据查询语义,为后续用代码(Pandas + DataFusion)导出同一份数据打下基础。

本文对应官方系列指南的第一篇;第二篇导出为 Pandas DataFrame、第三篇分析并回传结果分别讲解代码查询与结果回传。

系列背景:从"看数据"到"用数据"

本系列的目标是构建一个简单的"张嘴检测器"(jaw open detector):从人脸追踪示例产生的录制中,提取jawOpen混合变形(blendshape)信号,经过阈值判断得到二值状态,再以Scalar信号和Text标签的形式写回视图。整个流程分三步:

  1. 在视图中探索数据(本文):确认信号位置与数值特征,并用 DataFrame 视图核对表格形态;
  2. 用代码导出数据:把录制查询成 Pandas DataFrame;
  3. 分析并回传:计算张嘴状态并 log 回视图。

第一步之所以重要,是因为视图(特别是 DataFrame 视图)的配置方式,直接映射到第二步中代码查询的写法——你在 UI 里如何选实体、选时间线、过滤行,代码里就要如何构造查询。

第一步:创建一份录制

要探索数据,先得有一份录制。官方推荐直接运行仓库中的 face tracking 示例。该示例使用 Google MediaPipe 的 Face Detector 与 Face Landmarker 解决方案,对图片、视频或摄像头画面中的人脸进行检测与追踪,输出人脸关键点(landmarks)、包围盒(bounding box)以及 52 种混合变形(blendshape)评分,并用 Rerun 实时可视化。示例依赖的 Rerun 类型包括ImagePoints2DPoints3DBoxes2DAnnotationContextScalars,其核心日志逻辑见 face_tracking.py。

运行方式(详见 示例 README):

pip install --upgrade rerun-sdk pip install -e examples/python/face_tracking # 安装示例依赖 python -m face_tracking # 运行示例

示例运行后,视图中会出现一张被持续追踪的人脸:嘴巴会不时张开、闭合;录制中段人脸会短暂消失,此时追踪中断、相关信号被清空。这种"信号中断"现象正是后面要排查的重点。

如果你不想现场运行示例,仓库内已经附带了一份录制好的数据文件,路径为 tests/assets/rrd/examples/face_tracking.rrd,可以直接在 Rerun 中打开,后续所有操作对这份.rrd同样成立。

定位目标信号:在时序视图中检查 jawOpen

在录制中,MediaPipe 输出的 blendshape 信号被统一记录在/blendshapes根实体之下(示例代码中通过rr.log(f"blendshapes/{i}/{blendshape.category_name}", rr.Scalars(blendshape.score))逐帧写入)。其中有一条信号jawOpen,位于实体路径/blendshapes/0/jawOpen,以 Scalar 组件形式存储——它是判断"嘴是否张开"的核心数据。

用时序图(timeseries)视图选中该实体后可以观察到:

  • 每当嘴巴张开,jawOpen的数值会从约0.0 跳到 0.5左右;
  • 录制中段出现一段不连续(数据空洞)。

这段不连续并非数据丢失,而是源于 Rerun 数据模型中的 Clear 机制:当画面中检测不到人脸时,示例会对blendshapes实体执行清空操作,被清空的时刻之后、直到下一条新数据写入之前,该实体在时间线上都处于"空"状态。理解这一点,是后续读懂表格中空单元格([])的前提。

用 DataFrame 视图逐行检查数据

时序图适合看趋势,但要看"每一帧到底是什么数值、哪些帧没有数据",最直接的方式是新建一个DataFrame 视图——Rerun 用它把实体内容以表格形式展示(对应 crate 为 re_view_dataframe,官方描述即 "A View that shows the data contained in entities in a table")。该视图在源码中的视图类标识为Dataframe,其help说明中明确列出了可在选择面板(selection panel)中配置的三项能力:空单元格的处理、列可见性、按时间范围过滤行(见 view_class.rs)。

视图的四项关键配置

针对jawOpen这一场景,官方推荐如下配置方式,每条都对应明确的查询语义:

1. 内容(content)设为/blendshapes/0/jawOpen表格只包含与该实体相关的列(以及各时间线列)。由于该实体只有一个组件(Scalar),表格中也就只有一列实体数据列。从源码看,这份"内容"会被转成查询的view_contents,即限定查询引擎只扫描指定实体子树(见 view_class.rs)。

2. 以frame_nr时间线作为表格索引这意味着表格为frame_nr每个不同取值(只要该时刻有数据)生成一行。时间线列会以索引列的形式固定展示在表格最左侧。源码中该配置对应QueryExpression::filtered_index(view_class.rs);若视图中未显式指定时间线,它会"冻结"为当前时间面板(time panel)中选中的时间线,并自动保存到 blueprint(见 blueprint.rs)。

3. 时间范围过滤(filter by time range)保持默认 "infinite" 边界即不做任何时间裁剪,查询覆盖全部时间。对应 blueprint 组件FilterByRange,其默认值就是AbsoluteTimeRange::EVERYTHING(等价于 -inf 到 +inf,见 blueprint.rs)。你完全可以在这里设置起止时间,把表格限制在某个时间段内。

4. 高级特性(本场景未使用,但需了解)

  • 按列数据存在性过滤行(filter is not null):只保留某一列有数据的行,对应 blueprint 组件FilterIsNotNull(blueprint.rs);
  • 用 latest-at 数据填充空单元格:开启后,空行会沿用该实体最近一次的值向前填充,源码中体现为SparseFillStrategy::LatestAtGlobal,关闭则使用SparseFillStrategy::None(view_class.rs)。默认不开启,所以空帧会如实显示为空。

除上述四项外,该视图还支持列可见性(列选择、按实体重排列顺序,对应SelectedColumns/ColumnOrder组件,见 blueprint.rs)以及时间游标自动滚动等能力,本场景暂不展开。

读取表格:从数值到空洞

配置完成后,表格呈现的是frame_nr(索引列)+/blendshapes/0/jawOpen:Scalars:scalars(组件列)的结构。逐行观察可以发现:

  • 大约在第 140 帧附近,嘴巴张开,jawOpen数值约为0.55
  • 很快嘴巴闭合,数值回落到0.1 以下
  • 随后该列变成(即空列表[])——对应人脸无法被追踪、blendshape 被 Clear 清空的时间段。

至此,我们获得了实现张嘴检测器所需的两条关键信息:

  1. /blendshapes/0/jawOpen中的Scalar值本身就有判别力——以 0.15 为阈值即可得到闭口/张口的二值指示;
  2. DataFrame 视图的配置方式(内容 + 时间线索引)与代码查询的写法一一对应,UI 里的操作可以直接翻译成查询代码。

关于第 1 点阈值 0.15 的验证与代码实现,详见系列第三篇分析并回传结果;关于第 2 点"把视图配置翻译成代码查询",正是下一步的主题。

从视图配置到代码查询:衔接下一篇

DataFrame 视图之所以与代码查询"同构",是因为它在底层本就复用同一套查询引擎:视图渲染时构建的re_chunk_store::QueryExpression(包含内容、索引时间线、时间范围、非空过滤、稀疏填充策略、列选择等字段,见 view_class.rs)与代码侧dataset.filter_contents(...).reader(...)的语义完全一致。也就是说,你在 UI 中"选内容、选索引、调过滤"的过程,就是可视化地组装一条查询。

在下一步中,你将把录制保存为.rrd文件,然后用 Rerun SDK 的 DataFrame API 加载它:

# 关键调用链预览(完整代码见下一篇) dataset = client.get_dataset("tutorial") df = dataset.filter_contents("/blendshapes/0/jawOpen").reader(index="frame_nr") pd_df = df.to_pandas()

filter_contents对应视图配置中的"内容"(/blendshapes/0/jawOpen),reader(index="frame_nr")对应"以frame_nr作为索引时间线",to_pandas()则将查询结果物化为 Pandas DataFrame——其列结构(4 个时间线列 + 1 个组件列)与本文表格中看到的完全一致。这套代码的完整版(含导入、服务器启动、查询、转 Pandas、explode展平、阈值判断与回传)可在 docs/snippets/all/tutorials/data_out.py 中查看,该文件也是官方文档系列所有代码片段的单一事实来源(其 Python 版本是三种语言中唯一实现,C++/Rust 未实现,见 snippets.toml)。

小结

本文完成了系列的第一阶段:通过时序视图定位jawOpen信号并掌握其数值特征,再通过 DataFrame 视图以"帧 × 值"的表格视角确认数据形态,理解了时间线索引、Clear 造成的空值空洞,以及 0.15 阈值判据的来源。更重要的是,你已理解 DataFrame 视图的每一项配置背后对应的查询语义——这正是下一步用 Python 查询同一份数据的直接模板。继续阅读导出为 Pandas DataFrame,即可把视图中的这张表完整地搬进你的分析代码。

【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 20:59:49

同一把 TaoToken Key,从 Claude Code 切到 Codex 跑 Agent Skills 的 SKILL.md

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 20:59:34

Ubuntu下pwntools安装配置全指南:从Python环境到实战验证

我第一次在 Ubuntu 上装 pwntools 的时候,其实挺狼狈的。教程里写的就三行命令,我照着敲完,import 直接报错,查了整整一个下午,最后发现是 Python 环境、binutils、还有软件源这些“前置小事”在轮番坑人。所以这次我直…

作者头像 李华
网站建设 2026/9/16 20:57:58

VOS 11游戏定制系统汉化版安装实战:从写盘到避坑全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/16 20:57:50

从Prompt工程到Skill工程:AI协作的技术演进与实践

1. 从Prompt工程到Skill工程的技术演进在AI应用开发领域,我们正经历着一场从离散的Prompt工程向系统化的Skill工程的范式转变。传统Prompt工程就像每次都要重新培训一位临时工,而Skill工程则像是为AI配备了一套完整的职业发展手册。这种转变不仅仅是技术…

作者头像 李华
网站建设 2026/9/16 20:57:29

汽车电子培训三道硬门槛:AUTOSAR、CANoe与车规实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华