周六下午,一位家长想陪孩子玩一局体感跳跃游戏。客厅里没有合适的支架,手机只能斜靠在茶几上的水杯旁边。游戏启动后跳出提示:“请后退,保持全身在画面中”。家长往后退了两步,后背已经碰到沙发,屏幕上的人形轮廓还是只露出膝盖以上。孩子站到前面,头又被画面顶边切掉了一半。折腾了五分钟,这局游戏还没开始。
这类情况在家庭场景里非常普遍。实验室和宣传视频里,玩家总是站在空旷房间的正中间,灯光均匀,摄像头正对胸口;而真实的客厅有茶几、沙发、电视柜、落地窗,还有身高相差很大的一家人。一个体感游戏如果只能在理想画面里工作,那它其实只在演示时工作。下面先看几个典型场景各自会让识别链条的哪一环出问题,再看系统这一侧能做些什么。
场景一:手机放在茶几上,画面里只有腰以上
茶几的高度通常比玩家的腰还低,手机平放或斜靠时镜头微微朝上,玩家站近了只能拍到上半身,站远了又可能被茶几本身挡住下半截。这时姿态估计模型依然会输出髋、膝、踝的坐标,但这些点要么落在画面边缘之外,要么对应的 Confidence 很低。
问题在于,很多系统会照单全收这些坐标。一个根本没有进入画面的膝盖,被模型“猜”在某个位置,如果后续规则拿它来算膝角,得出的深蹲评分就是凭空编出来的。更糟的是,这种错误没有任何提示,玩家只会觉得评分忽高忽低、莫名其妙。
场景二:侧着放、斜着拍,同一个深蹲在画面里变了形
很多人家里电视柜正前方刚好是茶几,手机只能放在电视柜一侧,镜头和玩家之间形成一个斜角。在斜侧面视角下,两个膝盖在画面上会前后重叠,双膝间距看起来比实际窄,一个本来很标准的深蹲,可能被误读成膝盖内扣。反过来,正对镜头时躯干前倾在二维画面上几乎看不出来,前倾得再厉害,肩和髋在画面里的纵向距离也只是缩短了一点。
也就是说,二维关键点上量出来的角度和距离,是真实身体姿态在某个视角下的投影。视角不同,同一个动作的投影就不同,用一套固定阈值去判断,必然在某些角度下出错。
场景三:手机架在书架上,俯拍把腿压短了
为了拍到全身,有人会把手机放在书架或柜子高处往下拍。这样确实能把整个人装进画面,但透视会让头和肩显得大、腿显得短。在俯拍画面里,髋部下降的像素距离和实际下降的幅度并不成固定比例,越靠近画面下方的部位被压缩得越厉害。如果系统用站立时的腿长像素去衡量深蹲深度,俯拍下很容易把一个蹲到位的动作判成“深度不足”。
场景四:客厅只有两米深,退到墙边脚还是出画
摄像头到玩家的距离,决定了画面能容纳多高的人。镜头视场角有限,房间进深只有两米左右时,成年人退到墙边,脚踝依然可能落在画面之外。不少玩家这时会本能地把手机往下倾,结果头又出画了。
这类场景没有完美解法,只能在“看全身”和“看清楚”之间取舍。人离得远,身体在画面中占的像素变少,关键点更容易抖动;人离得近,身体又装不下。关于距离如何影响关键点质量,可以参考玩家站远一点以后动作识别为什么会变差。
场景五:逆光的窗户和夜里的一盏台灯
白天背对落地窗运动,摄像头为了照顾明亮的窗户会压低曝光,人在画面里几乎是一个剪影,手臂和躯干的边界模糊不清;晚上只开一盏台灯,画面噪点明显增加,快速挥动的手臂会拖出运动模糊。在这两种情况下,关键点往往不会完全消失,但会在相邻帧之间跳来跳去,手腕这种细小又移动很快的部位受影响最大。
这类问题的特点是“点还在,但不能全信”。如果系统只看有没有输出关键点,而不看它的置信度和帧间稳定性,就会把噪声当作动作,比如把手腕的抖动识别成一次出拳。
场景六:沙发挡住半条腿,大人孩子轮流上场
沙发扶手、茶几角、趴在地上的宠物,都可能挡住玩家身体的一部分。遮挡和出画不同:出画的部位模型大多知道自己看不到,被遮挡的部位模型有时会自信地“补”出一个位置。另外,同一台设备前如果先后站着一米八的成人和一米二的孩子,适合成人的取景对孩子来说上方空了一大截,孩子站近以后又可能只露出上半身。按成人身材设定的距离和阈值,直接套在孩子身上并不合适。关于脚部被遮挡时还能判断哪些动作,可以阅读摄像头看不到玩家的脚还能准确判断体育动作吗。
系统这一侧能做的六件事
既然不能要求每个家庭都有理想的拍摄条件,那么需要调整的是系统本身。九游体育在处理不完美取景时,大致遵循下面六个步骤,它们对应着从摄像头到游戏反馈的每一环。
- 取景引导要具体。“请保持全身可见”这句话帮不了玩家,因为玩家不知道该往哪边挪。更有用的是根据当前画面给出具体建议:头部靠近顶边时提示“手机向下倾一点”,脚踝出画时提示“后退半步或把手机抬高”,人偏在一侧时提示“向左挪一步”。引导最好配合画面上的实时轮廓,玩家一动就能看到变化。
- 视角归一化。先根据双肩、双髋在画面中的相对位置估计玩家大致朝向和镜头俯仰,再把关键点换算到以身体为参照的坐标系里,比如以髋部中点为原点、以躯干长度为单位。这样侧面、斜侧面和俯拍的数据可以在一定程度上对齐,阈值也可以按视角分别设定,而不是一套数值通吃。
- 逐点判断可见性。每个关键点都要结合 Confidence、是否落在画面边界内、帧间位移是否合理三方面来判断“能不能用”。一个关键点只有连续多帧都可信,才进入后续计算;偶尔跳变的点先用平滑处理,持续不可信的点直接标记为不可见。
- 设置置信度门槛。不同判断对关键点的要求不同。计数只需要髋部和肩部稳定可见,而判断膝内扣需要双膝、双踝都高度可信。每一项评分维度都有自己的门槛,达不到就不计算这一项。
- 按可见部位切换可评分动作。如果当前画面只能稳定看到上半身,就优先推荐拳击、上肢推举、躯干转体这类只依赖肩、肘、腕和躯干的动作;下半身完整可见时,再开放深蹲、弓步和跳跃。游戏关卡也可以据此调整,而不是让玩家对着一个看不到腿的摄像头做深蹲。
- 不强行给错误评分。当关键部位持续不可信时,系统宁可暂停这一项评分,告诉玩家“这一段下半身不在画面里,未计入质量分”,也不要给出一个看起来精确、其实毫无根据的分数。
回到那个周六下午,系统可以怎么应对
按照上面的思路重新处理开头的场景:手机靠在茶几上,家长退到沙发边只露出膝盖以上。系统判断出髋、肩、肘、腕都稳定可见,膝盖处于边缘、脚踝不可见,于是不再反复要求后退,而是提示“当前画面适合上肢游戏”,把原计划的跳跃关卡换成一局挥拳打气球。如果家长坚持要玩跳跃,系统会给出具体建议:“手机抬高约一本书的高度,或者向后倾斜一点”,并在画面上显示脚踝是否已经进入可识别范围。
孩子上场时,系统根据检测框重新估计身高比例,自动放宽画面顶部的要求,把关注区域下移;跳跃判定也改用孩子自己的站立基准,而不是沿用家长的腿长数据。整个过程中,玩家不需要理解什么是关键点或置信度,只需要知道游戏在告诉他“现在能玩什么、怎么调整能玩更多”。
游戏进行到一半,玩家走出了画面怎么办
取景问题不只发生在开局。拳击游戏打得兴起,玩家往前冲了一步,头部出画;跳跃游戏里,孩子越跳越靠边,半个身子移到了画面外。这时候游戏输入端要做出选择:继续把残缺的关键点当作操作指令,还是先把输入冻结?
比较稳妥的处理分三档。关键部位短暂丢失,比如一两帧内手腕不可信,就沿用上一帧的状态,不触发任何新动作;丢失持续一小段时间,游戏进入“等待”状态,角色停在原地做一个防守姿势,屏幕边缘出现箭头提示玩家往哪边回位;丢失超过一定时长,游戏自动暂停,这段时间不计入成绩,也不算失败。这样处理的目的,是不让取景问题直接变成比赛结果。在九游体育的对战类玩法里,因为出画导致的“空白时间”会单独标记,不会被当作玩家没有出拳而扣分。
为什么首次校准值得多花半分钟
上面这些调整,很多都依赖对玩家身体比例和拍摄环境的了解。首次使用时做一次动作校准,系统就能记录玩家站立时的身高像素、腿长比例、镜头俯仰和可活动区域,后面的视角归一化和阈值调整都有了参照。换了房间或换了手机摆放位置,重新校准一次也比在错误的基准上反复评分要好。具体的校准步骤和它对后续评分的影响,可以看第一次使用App为什么需要先做一次动作校准。
九游体育希望体感游戏适应家庭,而不是让家庭去适应体感游戏。站在画面正中间当然最好,但玩家站偏一点、只露出半身、背后开着台灯的时候,系统依然应该知道自己看到了什么、没看到什么,并在这个范围内给出诚实的反馈。