UnityでARkitでFaceTracking

Facial AR Remote

Unity公式ブログにて「Facial AR Remote」なるものが公開されており、とても簡単にiPhoneXシリーズを使ってUnityでリアルタイムFaceTrackingすることが可能。

動かし方

ソースもGithubに公開されておりセットアップもReadMeに丁寧に書いてある。

環境

・Unity 2018.2.1 (2018.1でも動くが、2018.2にしておくとTextMeshProを後から追加する必要がないので楽。)
・iPhoneX iOS12 .1
・XCode10.1

クライアントアプリケーション(iOS)

1. プロジェクトをクローンまたはダウンロードしてきたらUnityで開きビルドターゲットをiOSに指定、Player Settingsを開く。

2. Other Settings > Camera Usage Descriptionのとこになんでもいいから適当に入れとく「AR Face Track」とか

3. Client.sceneを開きヒエラルキー、ClientオブジェクトのClientコンポーネントStreamSetting部分からARKitのVerを指定してシーンをビルド

4. ビルドされたXCodeのプロジェクトもビルドする。Automatically manage signing にチェックを入れて登録してあるTeamを指定してiPhoneXにビルド今回自分の環境ではサクッと行けた。

ホストアプリケーション(Mac)

1. さっきと同じプロジェクトのSlothBlendShapes.sceneを開く。ビルドターゲットは各々のにしておく。

2. ヒエラルキー、StreamReaderのNetworkStreamコンポーネントのStreamSettingでiOSのクライアントアプリとARkitのverを合わせる。

3. 受信用のポートを設定しておく。(デフォルト9000)

動かしてみる。

それぞれのアプリを立ち上げ、iOS側からIPアドレスとポートを指定してCONNECTを押せば動くはず。クオリティが高いです。

それぞれの値にアクセスする。

クライアントアプリからは51箇所のブレンドシェイプの値や顔やカメラの3次元の位置や角度がきてる。

飛んできたままの値はStreamReader.csのとこみれる。

//頭の位置
Vector3 headPosition = m_HeadPose.position;
//頭の角度
Quaternion headRotation = m_HeadPose.rotation;

//各ブレンドシェイプ値      
for (var i = 0; i < blendShapesBuffer.Length; i++){
    float blendShapeTarget = blendShapesBuffer[i];
}

ブレンドシェイプのリストはBlendShapeUtils.csにバーっと書いてある。

他の機能

・StreamReaderではRec機能やプレイバック機能がある。便利げ。
・BlendShapesController.csにてブレンドシェイプ値にてスレッショルドからスムージングやら値の上書きなどの設定が可能、便利げ。


この記事が気に入ったらサポートをしてみませんか?