ARKit の Face Tracking で顔にマスクをつける for iPhone X - Depth image (深度画像) 取得編
一応、深度画像を取得してみようと思う。
深度画像取得の流れ
ARKit の ARFrame から取得できるので、ARSessionDelegate から呼び出し何か View に表示する。
ARFrame の capturedDepthData が持つ depthDataMap が cvImageBuffer を返すので、 今回は CIImage > UIImage > UIImageView へ変換している。
コードを書いてみる
前回のプロジェクトの Storyboard かコードで UIImageView を作成して(今回は depthImageView と命名) ViewController クラスの中に以下のコードを書いていく。
/// Depth Image の取得 func session(_ session: ARSession, didUpdate frame: ARFrame) { // 15 fps で返り、それ以外は nil を返すため判別する guard let depth = frame.capturedDepthData?.depthDataMap else { return } // CIImage で取得し傾きを変更する let ciImage = CIImage.init(cvImageBuffer: depth) depthImageView.image = UIImage.init(ciImage: ciImage.oriented(CGImagePropertyOrientation(rawValue: 6)!) ) }
まとめ
使い道は置いといて、かなり簡単に取得できる。
今回のサンプルコード