Googleがスマホのカメラで手の動きを検出する機械学習システムを開発

課題

手の形や動きを認識することは、さまざまなプラットフォームでユーザーエクスペリエンスを向上させるために重要です。手話理解を可能にしたり、拡張現実の中で、手話の意味を表示させることができることが期待されます。しかし、手は人間の顔の目、鼻、口といったもののように大きくコントラストの違う部分があるわけではないため、 たとえば握りこぶしを作った途端認識できなくなってしまいます。

手の形状認識を行う手法として、LeapMotionやKinectなどを用いた三次元計測の結果を使用する方法やまだら模様の手袋を用いて手の形状を推定する方法が提案されています。しかし、特殊な手袋などの準備がない状況で安価なカメラから手の形状を推定することは依然として難しい問題です。

解決方法

GoogleのAI開発チームは、コンピュータービジョンの国際会議CVPR 2019において、リアルタイムで手の動きをトラッキングする機械学習システムを提案しました。この実装は、Googleが提供するオープンソースフレームワーク「MediaPipe」に組み込まれます。新たにスマートフォンのカメラでリアルタイムのトラッキングを可能にした上、複数の手もトラッキングすることができるようになります。

システムは、手のひら検出モデル(BlazePalm) 、手のランドマークモデル、ジェスチャー認識モデルの3つの機械学習モデルで構成されています。

BlazePalmは、画像中に何がどこに映っているのかを検出するため深層学習モデルであるSingle Shot multibox Detector(SSD)を使用して、様々な「手のひら」の画像を改めて用意して追加学習した手の検出器です。指を含む手全体を使わない理由は、指は細くコントラストが大きいと共に、動きのパターンが多いため、頑健な検出器にならなかったためということです。その代わり、手のひらや拳は変化に乏しく検出が容易です。BlazePalmにより握手などの隠れのある場合にも的確に手のひらを検出することができます。

手のランドマークモデルは、指先や関節などの「ランドマーク」を推定するモデルで、人手と3次元計測装置などで正解データを作成し、学習させています。

https://ai.googleblog.com/2019/08/on-device-real-time-hand-tracking-with.html

ジェスチャー認識モデルでは、手の骨格の上にジェスチャを導き出すために、簡単なアルゴリズムを適用しました。まず指の状態(たとえば曲がっているか真っ直ぐであるか)は、関節の累積角度によって決定されます。次に、指の状態の集合を、あらかじめ定義したジェスチャの集合にマッピングさせます。この技法は、基本的なジェスチャーを推定することを可能にします。アメリカ、ヨーロッパ、中国などの文化からハンドジェスチャーのセットが作成されており、「親指を立てる」「握りこぶし」「OK」などを識別できます。

GoogleのMediaPipeを使用すると、Calculatorと呼ばれるモジュール・コンポーネントの有向グラフとして構築することができます。Mediapipeには、メディア処理アルゴリズム、多様なデバイスやプラットフォーム間でのデータ変換などのタスクを解決するための拡張可能な計算機のセットが付属しています。

どうなったか

Google blogに示された動画を見ると非常に的確に手の形状が推定できていることがわかります。Googleは、今後もハンドトラッキング機能を堅牢で安全な方法で拡張し、検出できるジェスチャーの量を拡大すると述べています。

まとめ

この複雑なタスクを解決するために、MediaPipeフレームワークで上記のハンドトラッキングとジェスチャ認識パイプラインをオープンソース化し、ソースコードが公開されています。「より広い研究開発コミュニティに、この手の認識機能を提供することが、創造的なユースケースの発現につながり、新しいアプリケーションと新しい研究の道を刺激することを願っています」とGoogleは述べています。

参考資料

(蒲生由紀子・森裕紀)