İçeriğe geç

ARKit ile TrueDepth Yüz algılama

Merhabalar bu yazımda sizlere iOS 11 ile aramıza katılan artırılmış gerçeklik kütüphanesi ARKit ile yüz algılama işlemini TrueDepth kamera sayesinde nasıl gerçekleştiririz bunun örneğini vereceğim.

TrueDepth teknolojisi bildiğimiz gibi şuan sadece iPhone X modelinde mevcut. Bu yazacağımız örnekte sadece iPhone X üzerinde deneyimlenebilir. Cihaz üzerinde bulunan sensörler yardımıyla derinlik algılayabilir ve yüzümüzde bulunan kas hareketlerini takip edebiliriz. Bu sayede kullanıcının yaptığı yüz hareketlerine göre uygulama içi UI üzerinde veya farklı işlemler gerçekleştirebilirsiniz.

Son günlerde forumlarda ve teknoloji bloglarında söz idilen bu işlemi kullanılarak gerçekleştirilmiş bir uygulama mevcut. Bu uygulama bir oyun ve kaş hareketinizle oynanabilmekte. (Rainbow) Kişisel olarak deneyimlediğim oyun bana göre keyifsiz, sürekli kaşlarınızı kaldırıp indirmek belli süre sonra baş ağrısı yaratmakta 😀 sizde oyunu App Store üzerinden indirip, oynayabilirsiniz.

Bu gibi uygulamaları aşağıda vereceğim örnek sayesinde yazmaya başlayabilirsiniz. Apple size verileri sunmuş, gerisi hayal gücünüze ve bilginize kalmış bir durum.

Aşağıdaki yazdığım örnek gülümseme işlemini algılamakta.

import UIKit
import SceneKit
import ARKit


class ViewController: UIViewController, ARSCNViewDelegate {
    
    @IBOutlet var sceneView: ARSCNView!

    var scene = SCNScene()
    var configuration = ARFaceTrackingConfiguration()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        if ARFaceTrackingConfiguration.isSupported {
            print("yeah, device is supported !!")
        }   
    }
    
    func setupScene() {
        
        configuration.isLightEstimationEnabled = true
        
        sceneView.delegate = self
        sceneView.scene = scene
        sceneView.showsStatistics = false
        
        sceneView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
       setupScene()
        
    }
  
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        sceneView.session.pause()
    }
    
    func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
        guard let faceAnchor = anchor as? ARFaceAnchor else { return }
        
        let blendShape = faceAnchor.blendShapes
        
        if let left = blendShape[.mouthSmileLeft], let right = blendShape[.mouthSmileRight] {
            let smileParameter = min(max(CGFloat(truncating: left), CGFloat(truncating: right))/0.7, 1.0)

        if smileParameter == 1 { 
         // smileee :)
        } else {
        // no smile :(
        }     
       }
    }
    
    override var prefersStatusBarHidden: Bool {
        return true
    }
    
}//

Kod içerisinde bulunan blendShape değişeni içerisinde tüm yüzünüzün bölgesel olarak hareket değerlerini anlık olarak elde edebilirsiniz.

Tarih:iOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca