話題のiPhone XとARKitでFace Trackingを試してみた
こんにちは!
最近、iPhone Xを買った、
Appleが大好きななかりんです٩( ᐛ )و
【目次】
「ARKit」とは
ARKitとは、iOSデバイスのカメラとモーションの機能を統合して、アプリやゲームで拡張現実を作り出せるライブラリです。
【参考: https://developer.apple.com/arkit/】
「Face Tracking」とは
ざっくりと説明します・・・
顔を認識します!!!!
iPhone Xの端末全面のカメラには色々なセンサが埋め込まれていて、
これらのセンサーユニットを総称してTrueDepthカメラと呼びます
このTrueDepthカメラは、空間の深度情報を取得し、
なんと、顔の奥行きを認識することができる!!
この取得したデータを用いて、Face Trackingを実現しています。
Face Trackingで有名なものはFace IDやAnimojiですね。
Let's Face Tracking!
Face Trackingを実際に使いたい!
なので、iPhone Xを買っちゃいましたー!
(とても高かった・・・)
Apple公式ドキュメント
みなさん、Appleの公式ドキュメントみたことありますか?
公式ドキュメントを漁っていたら、Face Trackingを用いたサンプルがありました。
今回はこれを用いて遊んでみました!
ダウンロードしてbuildしたらこんな感じでした。
マスクがちゃんと顔に貼り付けられていてすごい!
表情も認識されている!
Appleのエンジニアすげぇ・・・。
すごいけど、
ダウンロードして、buildして使うだけなのは、
正直つまらないですよね?
なので・・・
サンプルコードをいじってみた
SceneKitというApple公式のライブラリで、マスクを生成されているのですが、
このSceneKitでテクスチャマッピングができます!
しかも、簡単に!
なので今回は、歌舞伎メイクをテクスチャマッピングしてみました。
まず、マッピングしたい画像を用意します
用意した画像を、プロジェクトのファイルにドラッグ&ドロップ!
マスクを生成しているMask.swiftを開いて、以下のように修正します。
import ARKit import SceneKit import UIKit class Mask: SCNNode, VirtualFaceContent { let material: SCNMaterial init(geometry: ARSCNFaceGeometry) { self.material = geometry.firstMaterial! /* material.diffuse.contents = UIColor.lightGray material.lightingModel = .physicallyBased */ let kabuki = UIImage(named: "kabuki.png") self.material.diffuse.contents = kabuki super.init() self.geometry = geometry } required init?(coder aDecoder: NSCoder) { fatalError("\(#function) has not been implemented") } // MARK: VirtualFaceContent /// - Tag: SCNFaceGeometryUpdate func update(withFaceAnchor anchor: ARFaceAnchor) { let faceGeometry = geometry as! ARSCNFaceGeometry faceGeometry.update(from: anchor.geometry) } }
あとはビルドするだけ!
めちゃくちゃ簡単ですね!