ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

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

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标签的形式写回视图。整个流程分三步在视图中探索数据本文确认信号位置与数值特征并用 DataFrame 视图核对表格形态用代码导出数据把录制查询成 Pandas DataFrame分析并回传计算张嘴状态并 log 回视图。第一步之所以重要是因为视图特别是 DataFrame 视图的配置方式直接映射到第二步中代码查询的写法——你在 UI 里如何选实体、选时间线、过滤行代码里就要如何构造查询。第一步创建一份录制要探索数据先得有一份录制。官方推荐直接运行仓库中的 face tracking 示例。该示例使用 Google MediaPipe 的 Face Detector 与 Face Landmarker 解决方案对图片、视频或摄像头画面中的人脸进行检测与追踪输出人脸关键点landmarks、包围盒bounding box以及 52 种混合变形blendshape评分并用 Rerun 实时可视化。示例依赖的 Rerun 类型包括Image、Points2D、Points3D、Boxes2D、AnnotationContext与Scalars其核心日志逻辑见 face_tracking.py。运行方式详见 示例 READMEpip 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(fblendshapes/{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_indexview_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 组件FilterIsNotNullblueprint.rs用 latest-at 数据填充空单元格开启后空行会沿用该实体最近一次的值向前填充源码中体现为SparseFillStrategy::LatestAtGlobal关闭则使用SparseFillStrategy::Noneview_class.rs。默认不开启所以空帧会如实显示为空。除上述四项外该视图还支持列可见性列选择、按实体重排列顺序对应SelectedColumns/ColumnOrder组件见 blueprint.rs以及时间游标自动滚动等能力本场景暂不展开。读取表格从数值到空洞配置完成后表格呈现的是frame_nr索引列/blendshapes/0/jawOpen:Scalars:scalars组件列的结构。逐行观察可以发现大约在第 140 帧附近嘴巴张开jawOpen数值约为0.55很快嘴巴闭合数值回落到0.1 以下随后该列变成空即空列表[]——对应人脸无法被追踪、blendshape 被 Clear 清空的时间段。至此我们获得了实现张嘴检测器所需的两条关键信息/blendshapes/0/jawOpen中的Scalar值本身就有判别力——以 0.15 为阈值即可得到闭口/张口的二值指示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(indexframe_nr) pd_df df.to_pandas()filter_contents对应视图配置中的内容/blendshapes/0/jawOpenreader(indexframe_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),仅供参考
返回列表