Files
opendance-windows/tasks/007-scoring-dtw.md
T
zijunchiang 9f7b926a9a docs: 新增「初次部署(从零跑起来)」;去混淆字符与真实内网信息
- README.md / README.txt 新增初次部署章节:前置条件、获取代码、首次运行、
  配置服务端地址(API 3000 / 管理端 3001 分离)、与 Android 的 WebSocket 联通、
  打包导出、自检清单、常见问题
- 三库同源契约:':=' 写法修回、去掉真实 MariaDB 版本串
- 全文去除易被 Gitea 判为「模棱两可 Unicode」的字符(- - ... -> 取代 — – … § →)
- 真实内网地址与库名改占位符
2026-09-15 21:33:27 +08:00

1.3 KiB
Raw Blame History

T-WIN-007 DTW 评分引擎

  • 状态:done
  • 依赖:T-WIN-004、T-WIN-002

目标

用 DTW 把实时关键点序列与服务端参考序列比对,产出 0~100 分与等级。

load

DSH.md
contracts/skeleton-topology.md   # 锚点:5 派生特征
contracts/model-formats.md       # 锚点:2.1 预处理产物
src/score/pose_features.gd
src/score/dtw.gd
src/score/scoring.gd

特征(契约 5 冻结)

每帧 = [33 × (x,y,z), 9 个关节角余弦] = 108 维。 低置信度点(conf < 0.5)对应维度权重置 0,不参与代价计算。

DTW

  • Sakoe-Chiba 带状约束 |i − j| ≤ band(默认 15 帧 ≈ 0.5 秒)
  • DtwMatcher.compute_full() 离线段;StreamingDtw 逐帧流式推进, 每帧只计算带内一行,总体复杂度 O(n·m·band) 但摊到每帧 O(m·band)
  • 归一化:代价 / max(i,j)+1,得到「平均每步代价」

评分规则(scoring.gd)

score = clamp(1 − cost/tolerance, 0, 1) × 100,EMA 平滑抑制抖动, 等级 S(≥95) / A(≥85) / B(≥70) / C(≥55) / D,连击阈值 70。

验收

tests/test_dtw.gd + tests/test_pose_features.gd:相同序列距离为 0、 路径单调且起于 (0,0)、带宽约束、时间伸缩吸收、流式与离线一致、 低置信度维度不参与距离、角度计算正确性。