晚上九点,一位玩家把手机立在电视柜上,打开深蹲挑战,二十个深蹲一口气做完,屏幕跳出“20/20,挑战完成”。可如果回看录像,会发现前八个蹲得又深又稳,第十二个开始膝盖往里收,最后五个几乎只蹲到一半,上身越来越往前趴。计数器没有算错,它确实看到了二十次“蹲下—站起”。问题是,玩家真正想知道的从来不只是做了几个,而是这些深蹲到底有没有做对。
这就是体感健身游戏绕不开的一道坎:摄像头看到一个深蹲,和系统知道这个深蹲做标准了,中间隔着好几层判断。下面顺着一条完整的体感链路,逐层看每一步能知道什么、不能知道什么。
Camera 画面 → Pose 关键点 → Motion 动作阶段 → Quality 质量评分 → Game Response 游戏反馈
摄像头交出来的只是像素,连“哪个人在练”都要先找出来
普通手机或电脑摄像头常见的采集帧率是30fps或60fps,每一帧都是一张二维图像。系统拿到这张图,第一件事是人体检测:画面里有没有人、有几个人、哪一个是当前玩家。家里有人从背后走过,电视里正放着健身视频,都可能让检测框跳到别人身上。所以在进入姿态估计之前,通常要锁定一个跟踪目标,后续帧优先在它附近寻找,避免挑战次数被路过的家人“贡献”。
摄像头的位置还决定了后面能算什么。正面拍摄容易看清两个膝盖之间的距离,却很难看出上身前倾了多少;侧面拍摄能清楚看到髋、膝、踝之间的折叠,却看不到膝盖是否内扣。深蹲评分规则因此必须先知道当前是哪种视角,而不是用一套阈值打天下。
Pose Estimation 只回答“关节在哪里”,不回答“做得对不对”
姿态估计模型把画面里的人变成一组关键点。以公开模型为例,MediaPipe Pose(BlazePose)输出33个身体关键点,MoveNet 采用 COCO 格式的17个关键点。每个关键点除了坐标,通常还附带一个 Confidence 或可见性分数,表示模型对这个点有多大把握。
到这一步,系统知道的是左髋在画面哪个位置、左膝在哪里、左踝在哪里。它并不理解“深蹲”这个概念,更谈不上标准与否。弯腰捡东西、坐到椅子上、蹲下系鞋带,在单帧关键点上都可能和深蹲底部很像。不少体感游戏只做到这里,再加一条“髋部下降超过某个值就计一次”的规则,于是就出现了开头那种二十次全部计数、一半并不合格的结果。
从一串关键点里切出一次完整的深蹲
要判断质量,先得把连续帧切成一次一次的动作,再把每一次切成阶段。比较实用的划分是:站立准备、下蹲、底部、起身、回到站立并站稳。切分依据主要是髋部纵向位置和膝角随时间变化的曲线:髋部持续下降,进入下蹲阶段;下降速度接近零且膝角最小,进入底部;髋部开始回升,进入起身阶段;膝角恢复到接近伸直并保持片刻,这一次才算完成。
为什么一定要看序列而不是截图?因为很多质量问题只在过程中出现。有的玩家底部姿态看上去很标准,下蹲时却是“砸”下去的,靠底部反弹起身;有的玩家起身前半段膝盖位置正常,后半段突然内扣。单帧看不到速度,也看不到代偿发生在哪一段。为什么不能只看动作截图判断训练动作一文对此有更完整的讨论。
阶段切好以后,Speed 这个维度也就自然有了。下蹲用了多长时间、底部停了多久、起身用了多长时间,都可以从阶段边界之间的帧数换算出来。在30fps下,相邻两帧大约间隔33毫秒,一次两秒左右的下蹲大概对应六十帧,足够画出一条平滑的髋部轨迹。如果下蹲阶段只占了寥寥几帧,说明玩家是直接坐下去的;如果起身阶段中途出现一次明显停顿,往往意味着这一侧腿发力吃紧。这些信息在单帧里一概看不见,只有放进时间轴才会显形。
还有一个容易被忽略的细节:阶段切分必须允许“失败的动作”。玩家蹲到一半觉得不对又站起来,或者在底部停下来调整脚的位置,这些都不应当被硬塞进一次完整深蹲里。九游体育的做法是给每个阶段设置合理的时长上下限,超出范围的片段单独标记为“未完成动作”,既不计次,也不参与质量统计,避免一次调整把整组数据拉偏。
膝角只是第一层,髋部高度决定这一下算不算蹲到位
动作切分好以后,才轮到真正的质量计算。下表是一个示例评分维度,其中的计算方式和判断逻辑属于示例设定,实际产品还会结合玩家校准时记录的身体比例来调整。
| 维度 | 用到的关键点 | 怎么算 | 主要反映 |
|---|---|---|---|
| 膝角 | 髋、膝、踝 | 以膝为顶点的夹角,取底部阶段最小值 | 腿部弯曲程度 |
| 深度 | 髋、膝 | 髋部纵坐标相对膝部纵坐标的位置 | 是否蹲到位(Range of Motion) |
| 躯干前倾 | 肩、髋 | 肩髋连线与竖直方向的夹角 | 上身是否过度前趴 |
| 膝内扣 | 双膝、双踝 | 双膝间距与双踝间距的比值变化 | 膝盖是否向内收 |
| 左右对称 | 左右髋、膝、踝 | 左右膝角差、髋部左右高度差 | 是否偏向一侧发力(Balance) |
| 底部与起身稳定 | 髋、膝、肩 | 底部停留时长、起身阶段关键点抖动 | 动作控制(Stability) |
膝角最直观,但单看膝角会被骗。膝盖往前顶得很远时,膝角可以很小,髋部却依旧很高,这其实是一个深度不够、主要靠膝盖代偿的动作。所以深度要用髋部相对膝盖的高度来判断:侧面视角下,髋部降到与膝盖接近同一水平线,可以作为“蹲到位”的一个示例标准;正面视角下高度差不好分辨,就需要结合校准时记录的大腿长度,估算髋部下降量占腿长的比例。
躯干前倾要和深度一起看。蹲得越深,上身适度前倾是正常的,因此前倾角的容忍范围应当随深度变化,而不是固定一个“超过多少度就扣分”。膝内扣最适合用正面视角判断:站立时双膝间距和双踝间距大致相当,下蹲过程中如果双膝明显靠拢而双踝不动,就是内扣信号。左右对称看的是一侧膝角是否总比另一侧大、髋部是否持续向一侧倾斜。最后是稳定性:底部有没有短暂停留而不是弹起,起身时关键点有没有大幅左右晃动,回到站立后能否站稳。把这六项综合起来,才是一个有意义的 Form Quality。
关键点看不清的时候,宁可少判一项,也不要错判一项
真实客厅里,关键点并不总是可靠。茶几挡住小腿,踝关节的 Confidence 会明显下降;穿宽松长裤时,膝盖位置可能被估偏;背后开着台灯、玩家处在逆光里,整个下半身的点都会发飘。如果这时仍按正常规则计算膝角,就可能蹦出“膝盖内扣严重”这种完全错误的提示,玩家会觉得系统在乱说,下一次就不再信它。
比较稳妥的做法是按可信程度分级处理:
- 髋、膝、踝都可信:完整计算全部六个维度。
- 踝关节置信度低、髋膝可信:保留深度和躯干前倾评估,暂停膝角与膝内扣判断,界面上不显示这两项分数。
- 膝关节也不可信:只记录次数和节奏,不给质量分,同时提示玩家后退一步或调整手机高度,让小腿进入画面。
- 置信度在多帧之间忽高忽低:先对关键点做时间平滑,并要求某个问题在连续几次动作里都出现,才给出纠正提示。
背后的原则只有一条:低置信度时不给强烈的错误判断。少一个维度的评分,玩家能够理解;一个明显错误的纠正,会直接毁掉玩家对整个系统的信任。
质量分怎样回到游戏里,才不会逼玩家为了分数变形
质量算出来以后,还要决定怎么反馈给玩家。九游体育设计深蹲类玩法时,更倾向于把质量拆成几条玩家听得懂的提示,而不是只甩出一个总分。比如某一次深度不足,就在游戏里表现为角色“起跳力量不够”,而不是直接判零;连续几次出现膝内扣,再用一句简短语音提醒“膝盖对准脚尖方向”。同一次动作里有多个问题时,只提示最明显的那一个,免得玩家在下一次动作里手忙脚乱。
有效次数的判定也要和质量挂钩。一个示例规则是:深度达到门槛并回到站立,才算一次有效深蹲;深度不足的记为半次,不计入挑战目标;动作变形但完整完成的计入次数,只扣质量分。这样既不会因为一次小瑕疵清零玩家的努力,也不会让快速半蹲变成刷分捷径。健身竞技怎么避免玩家用半蹲刷次数一文专门讨论了这个设计。
同样是“20/20”,系统其实可以告诉玩家更多
如果按上面这条链路重新处理开头那段录像,得到的就不再是一个干巴巴的“20/20”。系统会告诉玩家:前八次深度和稳定性都很好;从第十二次开始,正面视角下双膝间距明显缩小;最后五次髋部没有降到膝盖附近,只计为半次。它还会把这种“后程变形”的模式记录下来,交给训练模块去决定下一次是减少次数、插入休息,还是先安排稳定性练习。
在九游体育看来,体感健身里难的是识别动作质量,而不是识别动作发生。数次数只需要看髋部有没有上下移动,判断质量却要知道视角、关节角度、动作阶段、关键点可信度,以及玩家自己的身体比例。每一层都做扎实,屏幕上那句“膝盖对准脚尖”才有分量。想继续了解摄像头怎样理解身体动作,可以到体育动作识别栏目看看其他文章。