2020.04.08

ハンドトラッキングとモバイルARとの結合 – MRへの準備

はじめに

こんにちは、次世代システム研究室のB.M.Kです。

今回はMR(複合現実)の体験の実現に向けて最先端ハンドトラッキング技術とモバイルARプラットフォーム(ARKit)との結合について紹介します。

近年、ハンドトラッキング技術が盛んに研究されています。世の中の研究室だけではなくMicrosoft、Facebook、HTCのようなIT大手企業も本技術の研究に沢山の力を入れています。VR(仮想現実)技術そして最近登場し注目が集まっているMR(複合現実)技術にて仮想オブジェクトとのインタラクションが不可欠でハンドトラッキング技術はそれらの分野への応用に対してニーズが非常に高いです。VR、MRヘッドセットデバイスとセットするコントローラが製造されていますがユーザーはコントローラより素手で本能的な相互作用の方が望ましいです。

ハンドトラッキング技術をサポートするVR、MR専用のデバイスは現在殆ど開発されている途中の状態になり、かつ高価格と地域限定販売により手に入りにくいものです。また、市場主導のARプラットフォーム(ARKit、ARCore)は現在AR体験をかなり充実に提供していますがMRの体験をまだサポートしていません。この背景の中で最先端のハンドトラッキング技術とモバイルAR技術との結合により専用デバイスがなくても安価で簡易にMR体験を実現できることと実用化に向けて検証することが今回の実証実験の目的です。また、現在AR技術のプラットフォーム(ARKit、ARCore)をリードするApple、Googleは近来にAR、MRグラスを製造することがほぼ確実になり、それらの革命的なデバイスの基礎技術がARKit、ARCoreの技術およびハンドトラッキング技術が土台だと想定でき、現時点でそれらの土台技術要素を理解と把握し、そして実証実験を実施するこが重要だと思います。

ハンドトラッキング技術の主なアプローチ

ハンドトラッキング技術のアプローチはデータグローブベースとビジョン(画像)ベースとの二つの主なアプローチが分けられます。データグローブとは内装したセンサーを用いて人間の手の動きを関節角度のデジタルデータへリアルタイムで正確に変換する手袋の形のセンシング装置です。各指の曲げ角度センサー、指と指の開きセンサー、手のひらの曲げ角度センサー、手首の上下、左右回転の動きセンサー等によって精度の高い手と指の動きをトラッキングできることはデータグローブの強みですがハードウェア制御とハードウェアの依存性が高く、ハードウェアコストも高いので、データグローブのアプローチ手法以外、近年深層学習の進歩に従い、ビジョン(画像)ベースのアプローチ手法は業界内で興味深く注目されています。

ハンドトラッキングタスクの定義

深層学習を活用するビジョン(画像)ベースのアプローチでは手がいくつかのパーツ(ひら、指、関節など)でモデル化され、ハンドトラッキングのタスクはこれらのパーツの位置を見つけることになります。そして、それらのパーツの位置、ポーズを使用してジェスチャー(意志伝達のため特別な手のポーズ)を推定することができます。最近の各研究にて手をモデル化する時に関節がよく使われてます。関節数は14又は16、21等になり、特にどれかが標準であるかを明確に決められていません。

Mediapipeの紹介

Mediapipeは2019年にGoogleが紹介した機械学習パイプラインを構築するクロースフレームワークです。このフレームワークは深層学習を用いる高精度のハンドトラッキングアルゴリズムを提供します。ユーザーの片手だけではなく、両手が同時に高精度でトラッキングすることができます。

Mediapipeのハンドトラッキンングアルゴリズムは手を21関節でモデル化します。アルゴリズムのアウトプットは21関節のそれぞれの正規化された3次元情報(x、y、z)になります。各関節の位置に対して以下のようにインデックスが付けられます。

Mediapipeでハンドトラッキング処理パイプライン

Mediapipeでのハンドトラッキングソリューションは、連携して動作するいくつかのモデルで構成されるMLパイプラインを利用します。まず、BlazePalmと呼ばれる手のひら検出器モデルです。インプットされた画像から手のひらの検出を行い、方向付けされた手の境界ボックスを返します。次に手のひら検出器によって定義された境界ボックスをトリミングして、関節認識モデルにインプットとして提供します。関節認識モデルは21関節の高精度の三次元情報を返します。 正確にトリミングされた手の境界ボックスを手の関節認識モデルに提供することで学習データの拡張(回転、並進、スケールなど)の必要性が大幅に減少し、ニュラールネットワーク自体も関節座標予測制度に充てることができます。

ARKitとの結合

MediapipeはC++で実装されていますがiOS、Androidに向けてObjectiveC++ APIとJava APIを提供しています。ARKitプロジェクトにMediapipeで作ったパイプラインを組み込むには、一度ハンドトラッキングに関連するモデルとインタフェースをiOSフレームワークとしてビルドしてからプロジェクトに織り込むことになります。Mediapipeをビルドする時にGoogle開発主導のビルドツールBazelを利用します。

そして、関節認識モデルのアウトプットデータ(関節の3次元情報)をARKitに返すため、それらのデータを返す専用のObjectiveC++プロトコルを作成します。本プロトコルはMediapipeの内部スレッドで呼ばれ、プロトコルの実際の処理はARKitのメインスレッドで実行します。
また、Swiftから作ったARKitプロジェクトはObjectiveC++フレームワークを呼び出すためにブリッジファイルを作ってObjectiveC++フレームワークのHeaderファイルへの参考を実施する必要となります。
ARKitとの結合の後、アプリの全体処理の流れは以下の通りです。

ARKitとの結合のデモ

今回、ハンドトラッキング技術とARKitとの結合をもっと分かりやすくするために以下の4つのデモを作りました。

・ 仮想オブジェクトを選択するデモ
・ 仮想オブジェクトをコントロールするデモ
・ 仮想オブジェクトとの相互作用のデモ
・ シンプルなジェスチャーのデモ

開発環境

・ MacOS Mojave 10.14.6
・ Xcode 11.3.1
・ iOS 12.4
・ iPhone 8
・ Bazel

各デモの共通な処理は指先の座標からレイキャスティング技術を用いてAR空間内の仮想オブジェクトを選択したり、コントロールしたりします。留意すべきのはMediapipeから取った21関節の座標の情報は正規化された情報なのでAR空間内でレイキャスティングを行う前にそれらの座標から画面座標への変換を行う必要となります。iPhone端末はネイティブ解像度のサイズとUIKitサイズが提供していますが本変換を行う時にアプリケーション層で行うため、UIKitサイズの方を使って変換します。iPhone 8の場合のUIKitサイズは 375 x 667(ポイント)になります。

ジェスチャー認識に関する処理は各指に配属する関節の情報から各指の状態を推定して、そして五本指の状態の組み合わせでジェスチャーを推定できます。例えばデモ内に仮想ボールを3個が欲しいと示すジェスチャーの場合、親指、人差し指、中指がまっすく伸びている状態かつ薬指と小指が曲がっている状態との組み合わせで定義できます。指がまっすぐ伸びているか曲がっているかその指に配属する関節のX軸の値、Y軸の値又は両方を使用すれば判定できます。

まとめ

今回は単一RGB画像で最先端ハンドトラッキング技術をサポートするフレームワークとアルゴリズムを紹介しました。そして、ARKitとの結合し方、結合によりAR空間で仮想オブジェクトの選択、コントロール、相互作用、シンプルなジェスチャー等のデモを紹介と解説しました。単一RGB画像で遅延なく高精度のハンドトラッキングを行えるMediapipeについてはかなり驚いていました。AR技術とハンドラッキング技術が将来のヘッドセットコンピューターの土台であり、そして我々の働き方、エンターティンメント体験の進化に支える技術だと信じます。

最後に

次世代システム研究室では、アプリケーション開発や設計を行うアーキテクトを募集しています。アプリケーション開発者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧からご応募をお願いします。

  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ