资讯详情

Label Studio Wearable Activity Interface:多通道可穿戴时间序列标注界面模板全解析

📅 2026/9/13 19:32:14 | 华诺云谱 👁 阅读
Label Studio Wearable Activity Interface:多通道可穿戴时间序列标注界面模板全解析
Label Studio Wearable Activity Interface多通道可穿戴时间序列标注界面模板全解析【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio本文基于 Label Studio 开源仓库中的 Interface 模板文档深入讲解Wearable Activity可穿戴活动标注界面它如何用一条 24 小时上下文条带 多通道同步信号栈 GPS 路线预览让标注员把心率、HRV、加速度、呼吸率、SpO2 等数据段标记为活动类型、睡眠分期或 ECG 心律并输出带start/end/duration/task的结构化时间跨度结果。读完本文你将掌握该模板的界面构成、React 代码骨架、输入输出 JSON 格式以及如何按自己的传感器字段和标签体系定制它。该模板面向健康科技与纵向监测团队覆盖活动识别activity recognition、睡眠分期sleep staging与心律复核rhythm review三类典型标注任务。作为参考模板本身在 Label Studio 中被归为InterfacesReact 代码生成的自定义标注界面与经典 XML 标签体系相互独立且仅在 Label Studio Enterprise 与 Starter Cloud 中可用文档明确标注Interfaces can only be used in Label Studio Enterprise and Starter Cloud。完整文档位于 docs/source/templates/interfaces-wearable-activity.md关于 Interfaces 的整体能力与适用范围可参见 Interfaces 概览。模板解决的问题与界面总览该模板面向腕戴式或胸戴式设备产生的多通道时间序列复核与标注数据包含心率heart rate、HRV、加速度acceleration、呼吸率respiration与 SpO2 五路信号。标注员的操作闭环是在24 小时上下文条带上查看自动检测的睡眠/活动分段拖拽缩放聚焦到一天中的某个时间段在同步通道栈中逐通道审视信号共享同一 playhead播放头与选区通过**画刷brush**框选时间范围或在无选区时使用 playhead 默认 ±30 分钟窗口在右侧**判定面板judgment panel**中从Activity / Sleep stage / ECG rhythm三组标签中选择一个立即生成一条带start、end、duration与来源task组的时间跨度标注。每个标签都会写入一个 region最终落成 Label Studio 标准的结果result结构因此常规的评审流程与导出能力导出说明依然适用。从 Interfaces 概览 可知Interface 的标注结果与普通标注相同存储为标准 Label Studio results标准 review 工作流和导出均可继续使用。整个界面从上到下划分为顶部标题栏Top bar、24 小时上下文条带Context strip、通道栈Channel stack 下方 GPS 路线预览Route preview、右侧样本实时统计侧栏Side rail与 360 像素宽的判定面板Judgment panel。界面分区与交互细节顶部标题栏Top bar一条细窄的头部展示模板名Wearable Activity与任务上下文。标题区读取任务的date字段缺失时回退显示24h sensor review。这一区域仅作为屏幕静态标识不含任何控件。24 小时上下文条带Context strip位于通道栈上方的全天概览条是先看全局、再进局部的核心导航自动检测的上下文分段读取任务字段segments渲染为上下两条堆叠泳道——上层为睡眠分期sleep stages下层为活动activities每条分段使用其标签对应颜色既有标注标记第三条泳道展示已标注的区域方便复核者一眼看出哪里已经标过拖拽刷选在条带上任意位置拖拽即可框选新的聚焦窗口选中区间会直接成为通道栈的可见范围当前 playhead 位置以竖线指引呈现图例右上角小图例显示Sleep、Move、Workout、Annotation四种色块的颜色编码。通道栈Channel stack中部主面板渲染聚焦窗口内的信号轨迹由模板中的CHANNELS常量驱动通道 key显示名单位默认 y 轴范围默认颜色hrHeart ratebpm[45, 175]#FF7557hrvHRVms[15, 120]#99ABF5accelAccel magg[0.75, 2.2]#F4AA2ArespRespirationrpm[8, 30]#34988Dspo2SpO2%[88, 100]#6D87F1每个通道拥有独立的 y 轴范围与颜色playhead 在所有通道间共享在栈中任意位置点击都会移动它水平画刷创建时间选区选区跨所有通道持久存在判定面板将下一标签应用到该选区窗口范围可通过上方上下文条带重置或重新框选。侧栏Side rail窄的右侧列实时呈现 playhead 处的读数当前样本值每个通道在 playhead 位置的值窗口统计聚焦窗口内每个通道的 min / max / mean随着 playhead 拖动或窗口变化持续刷新。GPS 路线预览Route preview通道栈下方的 GPS 面板用于交叉校验运动时段将任务字段route渲染为投影后的折线polylineplayhead 标记落在对应点上存在选区时仅高亮选中时间跨度内对应的路线片段典型用途确认一段 Running 标注与路线中的户外路段吻合。判定面板Judgment panel右侧 360 像素面板负责把标签应用到当前选区头部条显示当前活动跨度span——即画刷选区或 playhead 居中的默认 ±30 分钟窗口——含时间范围与时长三组堆叠标签Activity快捷键提示R W B S、Sleep stageA M L D、ECG rhythmS A V I每个标签是一个带彩色快捷键徽标与标签名的按钮点击即为活动跨度创建 region并按所在组打上task标记activity、sleep或rhythmreadOnly模式下按钮被禁用。前置条件模板 Interfaces 的启用方式该模板属于模板级 Interface文档给出了两点硬性约束许可限制Interfaces 只能在 Label Studio Enterprise 与 Starter Cloud 中使用自托管或 on-prem 部署需联系管理员在组织内启用见 Interfaces 概览 的 Availability 提示必须先复制才能编辑模板 Interfaces 是 HumanSignal 维护的只读对象组织内任何人可见但不可编辑。使用前需进入Interfaces Templates在目标模板的溢出菜单中点击Duplicate创建可编辑副本再基于副本修改。此外从 Interfaces 概览 的沙箱约定可知Interface 代码以沙箱化模块运行在 Label Studio 编辑外壳内源码仅限 React 与标准 hooksuseState、useRef、useEffect、useCallback、useMemo加少量getField辅助函数不支持importnpm 包需预打包进单文件或从白名单 host 加载且默认无网络访问、状态仅存续于单次标注会话——需要持久化的数据必须通过标注结果输出。React 代码骨架最需要定制的四块完整Screen.jsx约 1500 行文档重点提示了四个定制切入点任务数据与标签组参数params、三组默认标签、通道定义、以及写回 Label Studio 的结果形状。Interface 参数paramsSchema在 Interface 配置上设置或重命名参数即可指向不同的任务字段或替换三组标签。默认值对应下文示例输入const paramsSchema { type: object, properties: { sensorField: { type: dataField, default: sensor, description: Task data field containing wearable sensor samples }, segmentField: { type: dataField, default: segments, description: Task data field containing precomputed context segments }, routeField: { type: dataField, default: route, description: Task data field containing GPS route points }, labels: { type: labels, default: ALL_DEFAULT_LABELS, description: Allowed output labels for validation and auto-labeling }, activityLabels: { type: labels, default: DEFAULT_ACTIVITY_LABELS, description: Activity labels shown in the activity tab }, sleepLabels: { type: labels, default: DEFAULT_SLEEP_LABELS, description: Sleep stage labels shown in the sleep tab }, rhythmLabels: { type: labels, default: DEFAULT_RHYTHM_LABELS, description: ECG rhythm labels shown in the rhythm tab }, }, };注意dataField类型的参数负责把任务数据字段绑定进界面labels类型的参数除了驱动 UI 按钮外还用于输出校验与自动标注auto-labeling。默认标签常量三组标签各有独立常量name会持久化到输出value.choices[0]color用于快捷键徽标与标注标记着色hotkey显示在标签按钮上。原地修改即可重命名、换色或重映射快捷键const DEFAULT_ACTIVITY_LABELS [ { name: Running, hotkey: R, color: #FF7557 }, { name: Walking, hotkey: W, color: #57983C }, { name: Cycling, hotkey: B, color: #34988D }, { name: Strength, hotkey: S, color: #9F6CC6 }, { name: Yoga, hotkey: Y, color: #E37BD3 }, { name: Swimming, hotkey: P, color: #6D87F1 }, { name: Sedentary, hotkey: E, color: #6B6860 }, { name: Artifact, hotkey: X, color: #A49F95 }, ]; const DEFAULT_SLEEP_LABELS [ { name: Awake, hotkey: A, color: #99ABF5 }, { name: REM, hotkey: M, color: #9F6CC6 }, { name: Light Sleep, hotkey: L, color: #576CC1 }, { name: Deep Sleep, hotkey: D, color: #37447A }, { name: Sleep Artifact, hotkey: X, color: #6B6860 }, ]; const DEFAULT_RHYTHM_LABELS [ { name: Sinus Rhythm, hotkey: S, color: #34988D }, { name: AFib, hotkey: A, color: #FF7557 }, { name: PVC, hotkey: V, color: #E69559 }, { name: Inconclusive, hotkey: I, color: #6B6860 }, { name: Motion Artifact, hotkey: M, color: #45433E }, ];三组合并后的ALL_DEFAULT_LABELS作为labels参数默认值用于输出校验。从常量可以看出设计上的分组思路活动标签强调运动类型多样性含Sedentary与Artifact排除项睡眠标签对应多导睡眠分期层级Awake / REM / Light / Deep心律标签面向房颤AFib、室早PVC等临床筛查。通道定义CHANNELSCHANNELS同时驱动中央信号栈与侧栏读数每项的read函数从单个样本提取数值range设定 y 轴边界color给轨迹着色const CHANNELS [ { key: hr, label: Heart rate, unit: bpm, color: #FF7557, range: [45, 175], read: (sample) sample.hr }, { key: hrv, label: HRV, unit: ms, color: #99ABF5, range: [15, 120], read: (sample) sample.hrv }, { key: accel, label: Accel mag, unit: g, color: #F4AA2A, range: [0.75, 2.2], read: (sample) sample.accel }, { key: resp, label: Respiration, unit: rpm, color: #34988D, range: [8, 30], read: (sample) sample.resp }, { key: spo2, label: SpO2, unit: %, color: #6D87F1, range: [88, 100], read: (sample) sample.spo2 }, ];新增通道例如皮肤温度 skin temperature 或压力评分 stress score追加一个具有唯一key、y 轴range、以及能从 sample 取值read函数的条目即可。注意Accel mag通道在示例输入中并非直接字段而是由样本的x、y、z三轴加速度合成而来。结果形状getResultsgetResults为每个已标注跨度生成一条 Label Studio 结果。所有结果统一使用from_name: activity、type: choices并把所选时间范围、时长与来源标签组task写入valuefunction getResults(regions) { // Emits one result per labeled span with from_name: activity, type: choices. // to_name: sensorField (defaults to sensor) // value: { // choices: [label], // e.g. [Running], [Deep Sleep], [AFib] // start, end, duration, // seconds since the start of the day // task, // activity | sleep | rhythm // note? // optional reviewer note // } }这里有一个值得注意的设计无论标签来自哪一组from_name都固定为activity与 XML 标注中 control tag 名称对应靠value.task区分标签来源组start/end/duration均以当天起始时刻起的秒数为单位。示例输入任务 data 对象结构Interface 期望任务data对象包含一个sensor时间戳样本数组、可选的segments预计算上下文跨度数组支撑 24 小时上下文条带以及可选的routeGPS 点数组。完整示例节选{ data: { device: Garmin Forerunner 965, date: 2026-04-18, timezone: America/Los_Angeles, workout: Golden Gate Park tempo run, sensor: [ { timestamp: 0, hr: 57, hrv: 84, x: 0.01, y: 0.02, z: 0.98, resp: 12.4, spo2: 97.1 }, { timestamp: 5400, hr: 52, hrv: 96, x: 0.01, y: 0.03, z: 0.99, resp: 11.7, spo2: 96.8 }, { timestamp: 25200, hr: 66, hrv: 59, x: 0.04, y: 0.08, z: 1.01, resp: 14.9, spo2: 97.6 }, { timestamp: 61200, hr: 104, hrv: 38, x: 0.24, y: 0.31, z: 1.09, resp: 20.1, spo2: 97.3 }, { timestamp: 63000, hr: 146, hrv: 25, x: 0.63, y: 0.78, z: 1.29, resp: 25.8, spo2: 96.8 }, { timestamp: 64800, hr: 143, hrv: 27, x: 0.58, y: 0.72, z: 1.24, resp: 25.1, spo2: 96.9 }, { timestamp: 85800, hr: 61, hrv: 70, x: 0.02, y: 0.03, z: 0.99, resp: 13.0, spo2: 97.2 } // ... typically one sample every few minutes across the 24-hour window ], segments: [ { start: 0, end: 5400, label: Light Sleep, kind: sleep }, { start: 5400, end: 10800, label: Deep Sleep, kind: sleep }, { start: 10800, end: 15600, label: REM, kind: sleep }, { start: 25200, end: 33600, label: Sedentary, kind: activity }, { start: 61200, end: 66600, label: Running, kind: activity }, { start: 80400, end: 86400, label: Light Sleep, kind: sleep } ], route: [ { timestamp: 61200, lat: 37.76951, lon: -122.48684 }, { timestamp: 62400, lat: 37.77046, lon: -122.48222 }, { timestamp: 63600, lat: 37.76942, lon: -122.47734 }, { timestamp: 64800, lat: 37.76918, lon: -122.47265 }, { timestamp: 66000, lat: 37.77112, lon: -122.46830 }, { timestamp: 66600, lat: 37.77204, lon: -122.46615 } ] } }字段约定sensor必填每个样本的timestamp为当天起始起的秒数携带心率 / HRV / 呼吸率 / SpO2 读数与三轴加速度三元组x、y、zInterface 将三元组合成Accel mag通道。示例注释说明典型采集节奏为24 小时窗口内每几分钟一个样本。segments可选预计算上下文跨度kind区分sleep/activitylabel与默认标签名对齐缺失时上下文条带渲染为空泳道。route可选GPS 点数组timestamp与sensor共享同一时间基准缺失时隐藏 GPS 面板。其他元数据device、date、timezone、workout用于头部展示与任务上下文date缺失时界面回退为24h sensor review。示例输出保存的标注结果保存的标注中每个标注跨度对应一条 result。以下示例展示三个 region——当天开头的Deep Sleep分期、tempo run 期间的Running活动以及同一运动窗口上的Sinus Rhythm心律复核{ result: [ { id: wearable-sleep-deep-sleep-5400-10800, from_name: activity, to_name: sensor, type: choices, value: { choices: [Deep Sleep], start: 5400, end: 10800, duration: 5400, task: sleep }, origin: manual }, { id: wearable-activity-running-61200-66600, from_name: activity, to_name: sensor, type: choices, value: { choices: [Running], start: 61200, end: 66600, duration: 5400, task: activity, note: Tempo segment confirmed against GPS route. }, origin: manual }, { id: wearable-rhythm-sinus-rhythm-61200-66600, from_name: activity, to_name: sensor, type: choices, value: { choices: [Sinus Rhythm], start: 61200, end: 66600, duration: 5400, task: rhythm }, origin: manual } ] }要点to_name默认对应sensorField即sensorvalue.task的三个取值activity/sleep/rhythm与判定面板三组标签一一对应note为可选的复核备注字段示例中用于记录已对照 GPS 路线确认。这样的输出天然支持后续按task分组、按duration聚合的统计与导出。基于该模板的本地开发与定制路径由于模板本身只读实际开发遵循复制模板 → 本地开发 → 同步发布的流程。相关完整流程见 本地开发 Interfaces 指南其核心命令行工作流为准备环境安装label-studio-sdk2.0.22配置LABEL_STUDIO_URL与LABEL_STUDIO_API_KEY初始化label-studio-sdk interface init ./my-interface生成Screen.jsx、task.json、scenarios.js基线对已存在的 Interface 可用label-studio-sdk interface pull --id interface-id --version version-id ./my-interface拉取实时预览label-studio-sdk interface preview .打开与本地文件实时联动的 playground/interfaces/playgroundURL每次保存即重新渲染静态校验label-studio-sdk interface validate .检查 JSX 编译、模块形状、schema 导出并对getResults/parseResults做冒烟测试需要浏览器级 Playwright 场景时加--scenario scenarios.js同步发布新 Interface 用label-studio-sdk interface sync . --title ... --workspace id --publish已有 Interface 用label-studio-sdk interface sync . --message 描述本次改动默认生成未发布草稿--publish立即发布成功后生成Screen.jsx.ls-interface.json侧车文件记录 Interface ID 与最后推送的源码哈希。对 Wearable Activity 模板而言一套典型的定制组合是换数据字段改paramsSchema中sensorField/segmentField/routeField的default如传感器数据存在signals字段换标签体系改三组DEFAULT_*_LABELS常量如补充NapRestless Leg等睡眠标签或Bradycardia心律标签注意同步合并后的ALL_DEFAULT_LABELS以保持输出校验一致换通道追加/删除CHANNELS条目并定义对应read函数需确保任务样本携带相应字段换语义若做纯睡眠分期项目可把判定面板裁剪为仅保留 Sleep stage 一组或把task映射改为项目专属分组。注意事项与适用边界许可与启用Interfaces 仅适用于 Label Studio Enterprise 与 Starter Cloud自托管/on-prem 环境需联系账户经理在组织层面启用且本地开发模式是此类部署下的标准构建方式Cloud 专属的 Create with Agent 除外。沙箱约束Interface 源码为单文件 JSX不能用import/require引入 npm 包如需第三方库必须预打包进单文件或从 Owner/Admin 在组织设置中放行的 API origin 加载。可组合性Interfaces 不兼容经典 XML 标签也无法与 XML 标注界面混用见 Interfaces 概览 的集成对照表Plugins 同样不受支持相关逻辑需直接写进 Interface 代码。时间语义所有start/end/duration以当天 0 点为基准的秒数计算任务数据中的timezone字段用于解释一天的边界跨午夜样本需在数据预处理时对齐到同一日期基准。状态持久化Interface 的会话内状态仅存续于单次标注会话任何需要保留的信息如备注都必须通过标注结果value.note等字段输出。结合 Interfaces 概览 与 本地开发指南Wearable Activity 模板展示了 Interfaces 体系的典型范式用 React 描述完整的交互标注体验、用paramsSchema实现数据字段可配置、用getResults产出与 Label Studio 标准结果兼容的结构化输出从而让健康科技团队在获得极致定制灵活性的同时不脱离既有评审、统计与导出链路。【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。