看懂不等于教会
设想一位用户对着手机做硬拉,手机放在正前方。2D姿态估计能画出一副火柴人骨架,也能判断这是一次硬拉。但当教练想说“你的背部弯了”,问题就出现了:从正前方看,躯干前倾和背部弯曲几乎都被压缩成画面里的一条短线,前后方向的信息大部分丢掉了。
这就是“识别动作”和“教会动作”的差别。识别只需要知道类别;教学需要知道差异,包括哪个环节偏了、朝哪个方向偏、偏到什么程度,以及用户身体做得到的调整是什么。这些信息大多藏在三维空间里。
2D关键点的三个缺口
2D关键点是姿态分析的起点,速度快、部署方便,但在教学场景里有几个固有的局限:
- 深度缺失。 图像只有平面坐标,前后方向的位移只能靠透视和比例间接推测,误差很难控制。
- 遮挡。 侧面拍摄时,靠近镜头一侧的手臂和腿会挡住另一侧;宽松的衣服也会让关节位置变得含糊。
- 视角依赖。 同一个膝盖弯曲的角度,在不同机位下投影到平面上的角度不同,数字会随着手机摆放位置而变化。
这些问题不代表2D关键点没用。它们提醒我们:在需要评价前后方向、旋转和左右对称的时候,2D数据给出的是带偏差的近似,直接拿来做教学判断,容易说错。
3D重建补上什么
3D动作重建的思路是根据单目或多视角画面,估计每个关节在三维空间里的位置,进一步拟合成一个带骨骼层级的人体模型。它带来的改变主要有三点:
- 角度有了明确定义。 关节角度在三维骨架上计算,与机位无关,同一个动作换个角度拍,结果不应发生大的变化。
- 遮挡部分可以被推断。 有骨骼长度和关节活动范围的约束,被挡住的关节可以被合理地估计,而不是丢失。
- 可以旋转视角。 系统可以从任何方向回看用户的动作,把最能说明问题的视角展示给用户,而不受当初拍摄机位的限制。
需要说明的是,单目3D重建本质上仍然是估计,不是测量。深度方向的误差依然存在,衣着、光线、非常规姿势都会影响结果。江南体育AI的设计思路是给重建结果附上不确定性,重建置信度低的关节,在后续判断中降低权重,甚至明确告诉用户“这一部分看不清”。相关的完整反馈链路见数字人教练如何把动作数据变成可执行反馈。
对比什么:标准动作还是个人可行动作
有了3D骨架,接下来的问题是“和谁比”。直接把用户和一个理想标准动作对齐,有个明显的陷阱:不同人的身体比例、柔韧性和力量水平不同,一个对教科书完美的动作,未必是这位用户当下做得到的。
更合理的做法是在两层参照之间选择:
| 参照 | 含义 | 适用情形 |
|---|---|---|
| 通用动作规范 | 动作的基本要求,例如脊柱中立、膝盖朝向脚尖 | 判断是否存在需要处理的问题 |
| 个人可行动作 | 结合用户的体型、活动度和历史表现设定的目标 | 决定这一次具体让他改到什么程度 |
举例来说,假设某位用户的踝关节活动度有限,标准深蹲的下降深度他暂时达不到。系统如果强行要求他蹲到标准深度,只会诱发代偿。此时更合适的目标是:在保持躯干稳定的前提下,逐步增加一点深度,用“个人可行动作”作为当前的对照。这种以个人为基准的设计,也让系统能把用户与自己上一次的表现比较,而不是永远与一个外部标准比较。
数字人演示:只演示差异
3D骨架的另一个用途是驱动数字人。这里有一个容易被忽视的设计原则:演示不是把标准动作重放一遍,而是只演示差异。
原因很实际:用户在自己的动作里往往只有一两处需要改,把一整套完美动作从头播到尾,他看到的是一个陌生的整体,很难对应到自己的问题上。更有效的做法包括:
- 叠加对比:把用户当前动作的骨架与个人可行动作的骨架叠在同一画面,差异较大的关节用颜色标出,其余淡化。
- 局部慢放:只放大和放慢出现偏差的那个阶段,比如下降过程中髋部与膝盖谁先动,而不是完整的一次重复。
- 视角切换:自动转到最能显示差异的角度,比如背部弯曲从侧面看,膝盖内扣从正面看。
- 动作与话语对齐:演示的画面必须与刚说的话一一对应,说的是“髋先送”,画面就只强调髋的运动。
数字人在这里更像一个可以随意转动的示范模型,而不是一个装饰性的头像。演示所依赖的骨架数据质量,也直接决定了这种演示是否可信;如果重建有明显抖动,数字人的动作就会显得别扭,用户反而更困惑。
一个示意的对比过程
用一个假设的场景把上面几步串起来。某位用户做侧向的深蹲,系统重建出三维骨架后,先按髋、膝、踝的相对关系判断动作阶段,再与该用户的个人可行动作比对。比对的结果只保留有意义的差异:
- 下降阶段中段,用户的髋部后移比个人可行动作更少,膝盖前移更早。
- 底部阶段,两侧膝盖高度基本一致,没有需要处理的不对称。
- 上升阶段,躯干前倾的变化与个人可行动作接近。
这三条里只有第一条是值得反馈的差异。于是数字人的演示只围绕这一条:从侧面视角慢放下降阶段,用高亮标出髋部与膝盖谁先动,其余部分保持静止。这种“只保留有意义差异”的过滤,比把所有偏差都画出来更接近教学,也和优先级选择的思路一致。这些差异的具体数值在此为示意,并不代表实测。
与其他模块的分工
3D动作模型并不承担全部工作。在整个数字人教练系统里,它主要负责“把画面变成三维骨架”这一层,之后的判断、语言生成和演示各有分工:
- 动作识别与阶段切分:确定用户做的是什么动作、处在哪个阶段。
- 偏差分析:在3D骨架上计算角度、轨迹和对称性,判断哪个环节有问题。
- 语言生成:把结构化的判断转成用户听得懂的话。
- 数字人驱动:把差异用动作演示出来。
这种分工与大模型负责说、姿态模型负责看的思路一致:每个模型输出结构化的中间结果,下游模块只消费这些结果,某一环失败时也能有明确的降级方式,例如3D重建不可靠时退回2D判断,并降低反馈的确定程度。
计算成本和设备条件
3D重建的计算量比2D关键点大,对手机性能的要求更高。如果设备不足以实时重建,一种折中的设计是:训练过程中先用轻量的2D分析做基本提示,组间或训练后再对关键片段做更细致的3D重建和演示。设备条件与识别速度之间的关系,可以参考动作识别很慢时的逐层排查。
小结
看懂动作只是第一步。要教会动作,系统需要三维的空间信息来说清差异,需要个人可行动作作为参照来避免不切实际的要求,还需要用数字人把差异直观地展示出来。3D动作模型在数字教练里的角色,是把“这是一个深蹲”推进到“你的深蹲在下降阶段这里和你能做到的版本不一样”。这才是从识别走向教学的关键一步。