Apple Engine

Apple, iPhone, iOS, その周辺のことについて

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)!)
    )
}

 

まとめ

使い道は置いといて、かなり簡単に取得できる。

 

今回のサンプルコード

github.com