50
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ARKit+Unity ARKit PluginでFace Tracking

Last updated at Posted at 2017-11-06

WWDC 2017で発表されiOS 11から利用可能になったARKitですが、iPhone XのTrueDepthカメラによるFace Trackingが可能になりました。
UnityからリリースされているUnity ARKit Pluginも、Face Trackingに対応したAPIが追加されたのでちょっと遊んでみました。

参考: ARKit Face Tracking on iPhone X – Unity Blog

準備

Unity ARKit Pluginの使用にはUnity 5.6.1p1以降、iOS 11以降、Xcode 9以降が必要です。また今回のFace TrackingにはiPhone Xが必要です。

Unity ARKit PluginはAsset Storeから入手可能です が、 Face Trackingに対応したバージョンはまだリリースされていません(11月6日現在)BitBucketで公開されているdefaultブランチからダウンロードします。

ダウンロードして展開したフォルダはUnityプロジェクトになっているのでそのまま開いて使えます。また、必要な物はAssets/UnityARKitPluginフォルダにまとまっているので、このフォルダを自分のプロジェクトのAssets以下にコピーすればOKです。

UnityARKitPlugin/Examples/FaceTrackingフォルダには4つのサンプルシーンが含まれています。これらのシーンをビルドして実機で動かすと手軽にFace Trackingの動作を確認できます。

unity-arkit-plugin-face-tracking.png

ビルド時の注意点はこんな感じです。

  • Build SettingsのPlatformをiOSに変更する
    platform.png

  • Player SettingsのOther Settingsにある「Camera Usage Description」に、ユーザーにカメラの使用許可を求めるアラートに表示される文言を設定する(これを設定しないとクラッシュする)
    camera-usage-description.png

  • Player SettingsのOther Settingsにある「Automatic Signing Team ID」にApple DeveloperのTeam IDを設定しておくと何かと楽

FaceAnchorScene

ARKitによって検出されたARFaceAnchorの位置にXYZの3軸を表示するサンプルです。顔の位置と向きをリアルタイムでトラッキングします。

FaceMeshScene

ARKitによって検出されたARFaceAnchorgeometryプロパティ(ARFaceGeometryクラス)から、顔表面のジオメトリ(verticestriangleIndicestextureCoordinates(UV))を取得できます。これを基にUnity側でメッシュを作りARFaceAnchorの位置に表示することで、表情をリアルタイムにトラッキングするサンプルがこちらです。
サンプルの状態ではデフォルトのマテリアルのままなので、某スケキヨのようになっています…。

FaceBlendshapeScene

こちらのサンプルシーンはFaceMeshSceneとほぼ同じですが、画面左になにやら表示されています。これは、ARFaceAnchorblendShapesプロパティから取得したキーと値の一覧で、目をどれくらい開けているか、口をどのくらい尖らせているかといった情報を0.0〜1.0の数値化したものです。
表示はBlendshapePrinter.csでおこなわれているのですが、実機で実行すると、フォントが小さかったり、数値が激しく変わりすぎたり、上の方がiPhone Xのセンサーハウジング部分にかぶっていたりして非常に見づらいので、

  • GUI.skin.box.fontSize = 30;のようにしてフォントサイズを大きくする
  • kvp.Value.ToString ("P0")として、出力をパーセント表示 にする
  • 適当に先頭に改行を入れてセンサーハウジング部分を避ける

などすると見やすくなります。

なお、どのキーがどういう状態を指すのかは、Appleのドキュメントに図入りで記載されています(が、それでもよく分からないものもある…)。

FaceDirectionalLightEstimate

ARKitのARFrameからLight estimation(シーンにおける推定の照明。環境光の強さや色温度)を取得することが可能で、このサンプルシーンでは取得した照明が顔にどのように当たるのか、顔の位置と6方向から見た様子を表示します。

せっかくなので

UnityのチュートリアルRoll-a-ballをFace Trackingで操作できるようにしてみました。
基のRoll-a-ballはカーソルキーの上下左右でボールを上下左右に動かしますが、Face Trackingバージョンでは目の上目線で上に下目線で下に、左目をつぶると左に右目をつぶると右に移動するようにしてみました。
プレイ動画はこちら!

Roll-a-ballの完成プロジェクトはAsset Storeからダウンロードできます。Roll-a-ballの完成プロジェクトにUnity ARKit Pluginを追加の上、こちらのリポジトリからFaceTrackingフォルダをインポートしてFaceTrackingシーンをビルドすれば、お手元でお試しいただけます。

2017/11/9追記

Face Trackingに対応したUnity ARKit Plugin 1.0.11がリリースされました。

50
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?