見出し画像

iPhone XのTrueDepthカメラとARを試してみた!

こんにちは、SONICJAM.plusのキムです。

11月3日に発売されたiPhoneX。新機能の「TrueDepthカメラ」で顔認識を試してみました。

今までのiPhoneでは、顔認識をするために外部のライブラリを使う必要がありましたが、iPhoneXでは「TrueDepthカメラ」機能を使って顔を認識することができます。

しかしながらこの「TrueDepthカメラ」機能、何ができるのか、どこまで使えるのか、まだ情報も少ない状態です。そこで、Appleのサンプルを参考に、実際にアプリをつくって検証してみました。


eyeBlinkLeft, eyeBlinkRightでまばたきをトリガーにしてみよう

Apple公式のドキュメントを見ると「表情」「顔の位置」「顔のメッシュの情報」を取得して使うことができそうです。
「表情」で取得できるのはいろんな顔の部位の動作。例えばeyeBlinkLefteyeBlinkRightという関数ではまばたき(目の閉じ具合)を、jawOpenという関数では口の開き具合を0.0から1.0の値で取得することができます。

これを使えば、取得した表情データに合わせて3DCGモデルのキャラクターの表情を動かしたり、関数から取得できる情報を組み合わせ、特定の表情になったら追加の演出を加えるなどに応用できそうですね。

まずこのeyeBlinkLefteyeBlinkRightという関数を使って、どちらかの目を閉じたら顔の周りにハートが出るアプリを作ってみました。

この関数のポイントは、目を閉じた時に、右目と左目が同じ値にならないということです
eyeBlink関数から取得できる値は、目が普通に開いていれば0.0、目を閉じるにつれて大きな値を返すようになります(最大で1.0まで)。
そこで、eyeBlinkの値が0.8より大きい値になったら「目を閉じている」と判断させるように作ったのですが、左目は目を閉じても反応しませんでした。

確認すると、私が左目を閉じたときにeyeBlinkLeft関数で取得できる値は0.65〜0.7でした。目のサイズが左右で違うのが原因でしょうか...。(値の最大が1.0というのを考えると、自分の目がどのくらい小さいか、といったこともわかるのかな...。)
表情を細かく扱うには、相応のキャリブレーションが必要になるかもしれません。

vertexのIDを確認してみよう

先ほどの動画をよく見ると、顔にマスクが作られているのが分かります。
これが少し驚きで、一見カメラから取得した普通の映像に見えますが、実は顔の部分だけ別にテクスチャが貼られています。
どうやら顔を認識すると顔のマスクが作られて、自動で貼り付けられているようです

顔のマスクと顔のテクスチャが使えるなら顔入れ替えアプリとかもできそうですが、現在APIを見ると顔のテクスチャは取得できないみたいです。
しかしマスク(ARSCNFaceGeometry)の上に別のテクスチャを貼ることは可能なので、仮想メイクアプリなどを作ることができそうです!
下の動画はマスクに顔のテクスチャを貼らず白色にしたものです。

現在のAPIでは顔のvertexの位置情報を取得できますが、どこのvertexなのかは取得できないです。もし特定のvertexの位置が判れば、例えば鼻のvertexを確認して利用することで、鼻から毛が出る...。みたいな演出が可能になります。

そこで顔のメッシュを描いて特定のvertexのIDを確認できるアプリを作ってみました。

FaceIDとの関係でセキュリティー的に使える機能が少ない気もしますが、それでもエンジニアから見るとやっぱり簡単に使えるようになってますね。
これを使って今後もいろいろ試したいと思ってます!

SONICJAM.plusはこのような新しい技術や物を使い、日々新しい表現やサービスを考えたり、作ったりしています!
http://sonicjam.plus/

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