GameFace 项目让每个人都可以玩游戏

六月 12, 2023
Avneet Singh Product Manager Google Partner Innovation
Sisi Jin UX Designer Google PI
Lance Carr Collaborator

在 2023 年的 I/O 大会上,Google 推出了 GameFace 项目,通过提供开源的免触摸游戏“鼠标”,让用户可以利用头部动作和面部动作来控制计算机的光标。用户扬起眉毛即可点击和拖动,张开嘴巴即可移动光标,进而可以享受更加无障碍的游戏体验。

项目灵感来自四肢瘫痪的视频游戏主播 Lance Carr 的故事。他患有肌肉萎缩症,一种导致肌肉力量变弱的进行性疾病。我们与 Lance 合作,将 Project Gameface 变为现实。要了解该产品背后的完整故事,请阅读此处的 Google 关键字博客。

思考如何以这种新颖的方式控制鼠标光标是一次非常有趣的经历。我们开展了许多次实验,发现头部动作和面部表情可以充当独特的鼠标光标编程方式。MediaPipe 新的面部特征点检测 API(含混合形状选项)让这种编程方式成为可能,因为该 API 允许开发者利用 478 个三维面部特征点和 52 个混合形状得分(代表面部表情的系数)来实时推断详细的面部情况。

产品结构及详情

在本文中,我们将分享有关创建 GameFace 项目的技术细节以及打造令人兴奋的产品所利用的各种开源技术!

使用头部动作移动鼠标光标

字幕:控制头部动作以移动鼠标光标,并自定义光标速度以适应不同的屏幕分辨率。

在这个项目中,我们探索了使用头部动作来移动鼠标光标的概念。我们着重将前额和虹膜作为两个特征点位置。前额和虹膜特征点都以其稳定性而闻名。然而,Lance 注意到,使用虹膜特征点时,光标表现不佳。原因是当人们眨眼时,虹膜可能会轻微移动,导致光标意外移动。因此,我们决定使用前额特征点作为默认跟踪选项。

在某些情况下,人们在将头转向某些方向时可能会遇到挑战。例如,Lance 将头转向右侧的速度快于转向左侧的速度。为了解决这个问题,我们推出了人性化的解决方案:针对每个方向单独调整光标速度。此功能允许用户根据自己的偏好自定义光标的移动,从而实现更流畅、更舒适的导航。

我们希望提供像手持控制器一样流畅的体验。鼠标光标抖动是我们想要克服的主要问题之一。光标抖动受各种因素的影响,包括用户设置、摄像头、噪音和照明条件。我们部署了可调光标平滑功能,方便用户轻松微调此功能,以尽可能适应其特定设置。

使用面部表情执行鼠标操作和键盘按压

在很早的时候,我们的一个主要见解是,做出不同面部表情的舒适程度因人而异。对于一位用户而言十分轻松的动作对另一位用户来说可能极其困难。例如,Lance 可以轻松地独立动一下他的眉毛,而团队的其他成员则需要努力才能做出这个动作。因此,我们决定开发一项功能,让人们可以自定义他们用来控制鼠标的表情。

字幕:使用面部表情控制鼠标

您可以将其视为面部动作与鼠标操作的自定义绑定。在考虑产品应涵盖哪些鼠标操作时,我们尝试捕捉常见场景,例如左键和右键单击可上下滚动。然而,使用头部控制鼠标光标的移动不同于传统方式。我们希望为用户提供使用面部动作将鼠标光标重置到屏幕中心的选项。

字幕:使用面部表情控制键盘

我们在最新版本的 MediaPipe 面部特征点检测中推出了一个令人兴奋的功能:混合形状输出。通过这项增强功能,API 可以生成 52 个面部混合形状值,代表 52 种面部动作(如抬高左眉或张开嘴)的表现力。这些值可以有效地映射以控制广泛的功能,从而为用户提供更广泛的自定义和操作可能性。

我们已经能够扩展相同的功能,并添加键盘绑定选项。这有助于用户使用他们的面部动作,通过类似的绑定方式按下某些键盘键。

设置动作幅度以查看何时触发鼠标/键盘操作

字幕:设置触发操作的动作幅度

在测试软件时,我们发现有些人的面部表情很明显,有些人则不然,因此我们引入了动作幅度的想法,允许人们控制他们触发鼠标动作所需的面部动作幅度。混合形状系数在这方面大有裨益,不同的用户现在可以为每个特定的表情设置不同的阈值,这有助于他们根据自己的舒适度自定义体验。

保持摄像头视频源可用

我们从 Lance 那里获取的另一个关键见解是,游戏玩家通常有多个摄像头。为了使我们的机器学习模型以最佳方式运行,最好有照明良好的摄像头直接对准用户的面部。因此,我们为用户提供了选择正确摄像头的功能,以帮助他们拍摄并获得最佳性能。

我们产品的用户界面包含实时摄像头视频源,让用户可以实时看到头部动作和面部动作。此功能具有以下几个优点。首先,用户可以通过直接观察自己的动作来更有效地设置阈值。视觉呈现有助于就适当的阈值做出明智的决策。此外,实时摄像头视频源增强了用户对不同动作的理解,因为它们在视觉上将用户的动作与应用中的相应操作相关联。总体而言,摄像头视频源大大增强了用户体验,有助于用户设置准确的阈值和更深入地了解面部动作。

产品包装

我们的下一步是提供使用自定义逻辑控制鼠标和键盘的功能。为了在 Python 应用中实现鼠标和键盘控制,我们使用了以下两个库:用于鼠标控制的 PyAutoGUI 和用于键盘控制的 PyDirectInput。选择 PyAutoGUI 是因为其强大的鼠标控制功能,使我们能够模拟鼠标移动、点击和其他操作。另一方面,我们利用 PyDirectInput 进行键盘控制,是因为它与各种应用的兼容性得到了增强,包括游戏和依赖 DirectX 的应用。

对于我们的应用打包,我们使用 PyInstaller 将基于 Python 的应用转换为可执行文件,让用户可以更轻松地运行我们的软件,而无需安装 Python 或其他依赖项。PyInstaller 提供了可靠且高效的应用分发方式,从而确保流畅的用户体验。

我们在产品中引入了一种新颖的外形规格,旨在吸引用户注意处理鼠标光标等重要功能。打造直观易用的产品及用户界面是我们设计和工程团队的首要任务。我们与 Lance 密切合作,将他的反馈纳入我们的用户体验考虑因素内,我们还发现 CustomtKinter 能够解决我们所考虑的大部分 Python 用户界面问题。

我们很高兴看到 GameFace 项目蕴藏的潜力,同时也迫不及待地想让开发者和企业利用它来打造新的体验。GameFace 的代码在 Github 上为开源提供,请点击此处获取。


致谢

十分感谢以下人士对本项目的宝贵贡献:Lance Carr、David Hewlett、Laurence Moroney、Khanh LeViet、Glenn Cameron、Edwina Priest、Joe Fry、Feihong Chen、Boon Panichprecha、Dome Seelapun、Kim Nomrak、Pear Jaionnom、Lloyd Hightower