AR kit で顔面キャスアプリを作る (その2 ARFaceAnchorを理解してみる)
前回、SwiftでSocketIOをアプリに実装するところまで終わりました。
今回は、ソケットで送る内容について検討していきます。
まず大前提として、ソケットで送れるのはStringのみですので、必要な情報を適当なJSON配列にしていきたいと思います。
ARFaceAnchor
英語ドキュメントを読み込む
ちょっと気力が入りますが、頑張って読みましょう。
必要な情報を絞り込むために、ARFaceAnchorについて詳しく見ていきます。
let anchor: ARFaceAnchor!
anchor.* |
Class | 説明 |
---|---|---|
.transform |
simd_float4x4 | 世界座標における現在の顔の位置と向き これを原点に顔座標系が作られる |
.geometry |
ARFaceGeometry | 現在の顔の寸法、形状 これで顔の形に沿ってコンテンツを被せられる |
.blendShapes |
[NSNumber] |
顔の各部位の開き具合、角度等の様々なパラメータ |
.leftEyeTransform |
simd_float4x4 | 左目の位置と向き Z軸は眼球の奥から瞳孔を正の向きとした軸 |
.rightEyeTransform |
simd_float4x4 | 右目の位置と向き 左目と同様 |
lookAtPoint |
simd_float3 | 視線の方向と見ている位置(焦点距離)をベクトルで表す |
simd_float4x4は4行4列の行列、simd_float3は3次元ベクトルです。
考察
試しにこれらをprintして中身を見てみました。
blendShapesの中身は結構すごいです。20箇所近い顔の部位の値が取れます。
そして視線も取れちゃうし、どこに焦点が合っているかも推測できるんですねー
これだけ色々顔の情報が取れたら、これをもとに感情推定とか出来そうですね。喜怒哀楽の顔を機械学習させて、ユーザーの感情を…みたいなこと、誰かやってるのかな?
どこみてるか分かるなら、同時に表のカメラ+AR kitの距離推定で、目で見つめてるものだけクロップするとか、出来そう。
うーん色々アイデアは思いつきますね!
実装
オプションを確認した結果、最低限blendShapesがあれば表情が、geometryもあれば顔の形状が、さらにEyeTransform, lookAtPointもあれば目の動きが取れることがわかりました。
前回も付け加えましたが、あくまで実験的実装として、まずは最低限のblendShapesのみを扱ってみたいと思います。
次回に続きます