こんにちは!
AR、徐々に盛り上がってきていますね!
さて今回は、顔認識と組み合わせたARコンテンツのつくり方を簡単に説明していきたいと思います。例のごとく、Unityで使用できるAR開発プラットフォーム「AR Foundation」を使用した開発方法の説明になります。
人の顔の位置や傾き、パーツを認識して、それらを起点にARコンテンツを表示するのが顔認識ARです。カメラフィルターのアプリやインスタのARフィルターなど、一般的に思い浮かべられるARコンテンツといえば顔認識ARなのではないでしょうか?
顔認識のARの種類
UnityにおけるAR開発プラットフォーム「AR Foundation」のサンプルシーンで紹介されている顔認識ARの機能と、それによって可能になるコンテンツ例は、大きく分けて以下3種類です。注意すべき点としては、フロントカメラでしか顔認識の機能は起動できないことです。つまり、インカメでしか、顔認識を起動できないということですね。
FacePose
顔の位置と回転、傾きをカメラの情報から取得できる機能です。
顔を起点にして、ARオブジェクトを配置したりなど、顔認識の基礎となるような機能です。
FaceMesh
検出した顔を表すメッシュを作成する機能。顔にマスクのオブジェクトをかけられるような機能です。
マスクのメッシュにマテリアルを適用すれば、様々な模様のマスクが作れますね!
ARKitFaceBlendShapes
これは、ARKit固有の機能になりますが、検出した人の顔の表情と同じような顔の動きを、3Dの人の顔やキャラクターに適用できる機能です。
自分の顔と同じ動きを動物のキャラクターが再現してくれる、みたいな感じでしょうか。
EyeTracking
目の位置を検出する機能です。AR Foundationでは、目からレーザーを出すようなサンプルが実装されています。このシーンを動かすには、Lidarを搭載したiOSデバイスが必要です。
顔認識のARのつくり方
さて、実際に顔認識ARの作成方法を「FaceMesh」を例にとって、見ていきましょう!
実装環境
実装環境は以下の通りです。
Unity:2020.3.21f1
AR Foundation:4.1.7
ARKit XR Plugin:4.1.7
実装方法
パッケージのインストール
以下のパッケージをPackage Manager経由でインストールしてください。
AR Foundation
ARKit XR Plugin
ARKit Face Tracking
設定変更
設定変更に関して、注意しなければいけないポイントがあります。
PlayerSetting -> XR Plug-in Management -> ARKitのFaceTrackingの項目をONにすることです。これによって、FaceTracking機能が使えるようになります。
筆者は、これを怠って一日無駄にしたことがあるので、お気を付けを…!
実装
ARFoundationを利用すると、FaceTracking機能の実装は非常に簡単です。順を追ってみていきましょう。
シーンセットアップ
①カメラの削除
MainCameraは利用しないので、削除します。
②ARSessionとARSessionOriginの追加
Hierarchyにて、右クリック -> XRから、ARSessionとARSessionOriginを追加します。
③FaceMesh格納用の空のオブジェクトを用意し、Prefab化する
まず、Hierarchyにて、空のオブジェクト(Create Empty)を作ります。そして、そのオブジェクトに以下のコンポーネントをアタッチします。
AR Face:デバイスによって検知された顔のデータを扱えるようにするコンポーネント。
AR Face Mesh Visualizer:検出された顔を基に、フェイスメッシュのデータを作成するコンポーネント。
Mesh Filter:フェイスメッシュの頂点データ格納用のコンポーネント。
Mesh Renderer:メッシュの描画用のコンポーネント。フェイスメッシュへのマテリアルの適用などを行う。
ここまで、コンポーネントを追加したら、FaceMeshのオブジェクトをAssetにドラッグアンドドロップして、Prefabを作成します。
➃ARFaceManagerにFacePrefabを適用する
次に、ARSessionOriginにARFaceManagerのコンポーネントを追加します。ARFaceManagerは、ARFaceの作成と更新・削除を管理するコンポーネントです。
さらに、ARFaceManagerのPrefabの箇所に、③で作成したPrefabを適用します。
⑤ビルド
シーンをビルドして、完成となります!PrefabについてるMeshRendererのコンポーネントからフェイスメッシュのプレファブのマテリアルを変更することで、マスクの見た目もかえられることができますよ!
おわりに
今回は、顔認識の機能をFaceMeshの作り方を通じて説明していきました。
顔認識の機能は、他にもありますので、試してみてはいかがでしょうか?