随着
背景
摄像机游戏和现场迷你游戏的兴起,许多有趣的摄像机游戏需要识别用户的表情状态。 因此,通过摄像机识别进行表情识别的精度会极大地影响玩家的游戏体验。
相关工作
的传统面部关键标记工具包括成熟的库和web服务,如DLib、fire base ml工具包和Face。 已经有很多基于面部关键点和机器学习的面部表情识别算法。 例如使用CK、MMI等训练集训练支持向量机和卷积神经网络的表情识别器。 但是,这种方法很难使用,其识别精度完全依赖于训练集,通过训练得到的分类器的可解释性很弱。 对小游戏的前端开发人员不友好。 本文介绍了基于Animoji技术的表情识别方法,并利用决策树对用户的表情进行直观分类。
介绍
Animoji是利用苹果公司提供的摄像头检测用户表情变化,获得脸部标识点和表情系数,生成可爱的3D表情模型的能力。 使用此功能,用户可以说话和移动自己的脸,但Animoji会实时跟踪动作。 Animoji的传统应用是基于BlendShape法,从用户输入的脸部图像合成虚拟的3D动画脸部。 不仅返回传统面部注释记号,还返回52个blendshape系数。 blendshape系数是脸部表情位于更高纬度的说明。 通过分析blendshape系数,可以对用户当前的表情进行分类。
Animoji数据的获取
目前,IOS开发可以通过ARKit获取blendshape系数,方便开发者调用Animoji的能力获取blendshape系数。在
BlendShape系数
Arkit中,针对表情特征位置,设定了52组运动blendshape系数(https://Developer.apple.com /文档/Arkit/Arfaceanchor/Blendshaphape 定义特定的表情属性,如mouthSmileRight,其对应的blendshape系数表示表情的运动范围。 这52组blendshape系数如下表所示。
一个blendshape系数的取值范围为0~1的浮点数。 以jawOpen为例,如果认为用户的嘴完全闭合,则返回的jawOpen系数为0。 如果认为用户的嘴是最大的,则返回的jawOpen系数为1。
在用户完全闭上嘴到最大嘴之间的过渡状态下,jawOpen根据用户张开嘴的宽度返回0到1之间的插值。
我们利用Animoji的能力实时监测从用户摄像头输入的图像,可以返回对输入图像识别出的52种blendshape系数。
建立表情分类决策树
人物的喜悦、愤怒、悲伤、音乐都是由脸部肌肉的动作表现出来的,这些表情的变化都是由脸部肌肉的动作产生的。 获得用户脸部的52种blendshape系数后,我们可以根据人物表情和脸部肌肉的关系,为表情分类制作决策树。例如,生气的时候,人的瞳孔张开,眼皮宽,两眼睁得圆圆的,眉间的皱纹加深,眉尾朝上,脸颊抬起,嘴的周围被拉向外侧。
以上
描述对应的blendshape系数的变化趋势为:瞳孔打开、双目圆睁、眼皮变宽: eyeWideRight + eyeWideLeft + eyeSquintLeft → 0 eyeSquintRight → 0 蹙眉: browDownLeft + browDownRight + 脸颊有可能会向上抬: cheekSquintLeft + cheekSquintRight + 嘴的周围有可能向外侧拉伸: mouthStretchLeft + mouthStretchRight +对不同的表情分别建立blendshape系数的变化趋势特征,从中选取具有区分度的特征作为决策依据。可以建立一棵可解释的表情分类决策树,如下所示:
以下是伪代码实现的参考:
if(browDownLeft < 0.4 && browDownRight < 0.4){ if(mouthSmileLeft < 0.1 && mouthSmileRight < 0.1 && browOuterUpLeft > 0.1 && browOuterUpRight > 0.1){ /// 表情判定为'吃惊!' } if(mouthSmileLeft > 0.5 && mouthSmileRight > 0.5){ /// 表情判定为'喜!' } } if(browDownLeft > 0.5 && browDownRight > 0.5){ if(eyeSquintLeft < 0.4 && eyeSquintRight < 0.4){ /// 表情判定为'怒!' } if(eyeSquintLeft > 0.5 && eyeSquintRight > 0.5){ /// 表情判定为'悲!' } } 结果与讨论
本文通过利用Animoji技术识别用户的表情,可以根据用户的摄像头输入将用户的表情划分为喜、怒、哀、吃惊 四种表情。
该方法的特点是利用了比人脸关键点更高维度语义的blendshape语料,该方法的优点有:
1⃣️ 理解与实现简单;
2⃣️ 具有可解释性,方便调参。
该方法的缺点有:
1⃣️ 依赖Animoji能力及其准确性。
2⃣️ 当需要监测更多表情时,需要重新构建决策树。