Project GameFace により誰もがゲームを楽しめるようになる

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

Google は I/O 2023 で、人の頭の動きと顔の表情でコンピュータのカーソルをコントロールできるようにする、オープンソースのハンズフリー ゲーム「マウス」である Project GameFace を発表しました。プレーヤーは眉を上げてクリック&ドラッグをしたり、口を開けてカーソルを動かしたりできるので、ゲームのアクセシビリティが高まります。

このプロジェクトは、筋肉が弱くなる進行性疾患である筋ジストロフィーを抱えて生きる四肢麻痺のビデオゲーム ストリーマー、Lance Carr 氏のライフ ストーリーに触発されています。私たちは Carr 氏と協力して Project Gameface を実現しました。このプロダクトの背後にある詳しいストーリーは、こちらの Google Keyword ブログでご覧いただけます。

こうした斬新な方法でマウスカーソルをコントロールする方法について考えるのは、非常に興味深い経験でした。多くのテストを行った結果、頭の動きや顔の表情がマウスカーソルをプログラムする唯一無二の方法になり得ることがわかりました。MediaPipe の新しい顔ランドマーク検出 APIブレンドシェイプ オプションにより、デベロッパーが 478 個ある顔の三次元ランドマークと 52 個のブレンドシェイプ スコア(顔の表情を表す係数)を活用して、リアルタイムで顔面の状態を詳細に推定できるようにすることで、このプロジェクトが実現しました。

プロダクトの構造と詳細

この記事では、私たちが Project Gameface をどのように構築したかに関する技術的な詳細と、このエキサイティングなプロダクトを作り上げるのに活用した、さまざまなオープンソース テクノロジーを紹介します。

頭の動きを利用してマウスカーソルを移動させる

キャプション: 頭の動きをコントロールすることでマウスカーソルを動かし、異なる画面解像度に対応できるようカーソル速度をカスタマイズしています。

このプロジェクトを通じて、頭の動きを利用してマウスカーソルを動かせるようにするというコンセプトを検討しました。私たちは、2 か所のランドマークとして、額と虹彩に注目しました。ランドマークにした額と虹彩は、両方ともその安定性で知られています。しかし、Carr 氏は、虹彩のランドマークを使用しているとカーソルがうまく機能しないことに気づきました。その理由は、まばたきしたときに虹彩がわずかに動くことがあり、カーソルが意図せずに動いてしまうからです。そのため、私たちは、デフォルトのトラッキング オプションとして、額のランドマークを使用することにしました。

特定の方向に頭を動かした際に不具合が生じるケースがあります。たとえば、Carr 氏は左方向より右方向に頭を速く動かせます。この問題に対処するために、カーソル速度を方向ごとに調整するというユーザー フレンドリーなソリューションを導入しました。この機能により、ユーザーは自分の好みに合わせてカーソルの動きをカスタマイズでき、よりスムーズで快適なナビゲーションが可能になります。

私たちは、手で持って操作できるコントローラのようにスムーズなエクスペリエンスを実現したいと思っていました。マウスカーソルの揺れは、克服したかった主要な問題の 1 つです。カーソルの揺れの発生は、ユーザ設定、カメラ、ノイズ、光の条件など、さまざまな要因によって左右されます。そこでユーザーが特定の設定に合わせてこの機能を簡単に微調整できるようにするために、調整可能なカーソル スムージング機能を実装しました。

顔の表情を使ったマウスア クションとキーボード操作の実行

ごく初期の段階で私たちが得た主な知見の 1 つは、人はさまざまな顔の表情をひとしく無造作に作っているのではないことです。あるユーザーにとっては簡単なジェスチャーでも、別のユーザーにとっては意図的に行うことが非常に難しい場合があるのです。たとえば、Carr 氏は眉毛を独立して簡単に動かすことができますが、チームの他のメンバーは Carr 氏と同じことをするのに苦労しました。そこで、どの表情でマウスをコントロールするかをカスタマイズできる機能を作ることにしました。

キャプション: 顔の表情を使ってマウスをコントロールします

これは、マウス アクションに対する操作のカスタム バインディングと考えるといいでしょう。プロダクトはどのようなマウス アクションに対応する必要があるかを検討していた際、左クリックあるいは右クリックで上下にスクロールといった一般的なシナリオを実現しようとしました。しかし頭を使ってマウスカーソルの動きをコントロールするのは、従来の方法とは異なるエクスペリエンスです。そのため、顔の動きを使用してマウスカーソルを画面の中央にリセットするオプションもユーザーに提供したいと考えました。

キャプション: 顔の表情を使ってキーボードをコントロールしています

MediaPipe の顔ランドマーク検出の最新リリースでは、ブレンドシェイプ出力というエキサイティングな機能が追加されています。この機能強化により、API は、左眉毛を上げる、口を開くなど、52 種類の顔の表情を表す 52 個の顔ブレンドシェイプ値を生成することが可能になります。これらの値は、幅広い機能をコントロールするために効率的にマッピングすることができるため、ユーザーにとっては、カスタマイズと操作の可能性が広がります。

さらに、この同じ機能を拡張して、キーボード バインドのオプションも追加することができました。これは、顔の表情を利用して、同じようなバインディング方法でキーボードのキーを押すことにも役立ちます。

ゼスチャー サイズを設定してマウス/キーボード アクションをトリガーするタイミングを確認する

キャプション: アクションをトリガーするためのジェスチャー サイズを設定しています

ソフトウェアをテストしている際に、顔の表情がはっきりしている人もいれば、はっきりしていない人もいることに気づいたため、ジェスチャー サイズというアイデアを取り入れました。これにより、ユーザーがマウス アクションをトリガーするために必要なジェスチャーの程度をコントロールすることができます。この場合、ブレンドシェイプ係数が役立ちました。この係数を使用した結果、ユーザーが特定の表情に対してさまざまなしきい値を設定できるようになったほか、エクスペリエンスを好みに合わせてカスタマイズすることにも役立ちました。

カメラフィードを利用可能な状態に保つ

Carr 氏から得られたもう 1 つの重要な知見は、ゲーマーはしばしば複数のカメラを持っているということでした。私たちの機械学習モデルが最適に動作するには、適切な照明の下で、ユーザーの顔を真っ直ぐに捉える位置にカメラを設置するのが最善です。そこで、ユーザーが適切なカメラを選択できる機能を組み込み、ユーザーの顔がきちんとフレームに収まり、最適なパフォーマンスを提供できるようにしました。

このプロダクトのユーザー インターフェースには、ライブ カメラ フィードが組み込まれており、ユーザーは頭の動きや操作をリアルタイムで確認できます。この機能にはいくつかのメリットがあります。まず、ユーザーは自分の動きを直接観察することで、しきい値をより効果的に設定することができます。視覚的な表現により、適切なしきい値に関して情報に基づいた決定が可能になります。さらに、ライブ カメラ フィードにより、ユーザーは自分の動きをアプリケーション内の対応するアクションと視覚的に関連付けられるため、さまざまな操作に対する理解が深まります。総体的に言って、カメラ フィードはユーザー エクスペリエンスを大幅に向上させ、正確なしきい値の設定を容易にするとともに、操作をより正確に認識できるようにします。

プロダクト パッケージング

次のステップは、カスタム定義のロジックを使用してマウスとキーボードをコントロールする機能を作成することでした。Python アプリケーション内でマウスとキーボードの制御を有効にするために、マウスの制御には PyAutoGUI、キーボードの制御には PyDirectInput という 2 つのライブラリを使用します。PyAutoGUI を選択した理由は、堅牢なマウス制御機能を備えているからであり、マウスの動き、クリック、その他のアクションをシミュレートすることができます。一方、PyDirectInput は、ゲームや DirectX に依存するアプリケーションなど、さまざまなアプリケーションとの互換性が強化されているため、キーボード制御に活用しています。

アプリケーションのパッケージングでは、PyInstaller を使用して Python ベースのアプリケーションを実行可能ファイルにし、Python や追加の依存関係をインストールする必要なしに、ユーザーがソフトウェアを簡単に実行できるようにしました。PyInstaller のおかげで、このアプリケーションを信頼性が高い効率的な方法で配信できるようになるため、ユーザー エクスペリエンスが円滑になります。

このプロダクトでは、ユーザーが、マウスカーソルの扱いなど、重要な機能を操作しやすくする新しいフォーム ファクタを導入しています。プロダクトとその UI を直感的でわかりやすくすることは、設計およびエンジニアリング チームの最優先事項でした。Carr 氏と緊密に協力して、Carr 氏からのフィードバックを UX の考慮事項に組み込んだ結果、Python における UI の考慮事項のほとんどは、CustomtKinter で対応できることが判明しました。

私たちは、Project 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(敬称略)