Swift AR - Face Detection(2020.11.4)

K S Michael·2020년 11월 4일

swift TIL

목록 보기
23/29

출처 : 유튜브 Swift Kat Code Factory

  1. app으로 프로젝트 생성
  2. 라이브러리에서 ARSCNView 추가(화면전체로 설정)

import UIKit
import ARKit

class ViewController: UIViewController {

    @IBOutlet weak var statusLabel: UILabel! // AR을 사용 가능 여부 확인용 text
    @IBOutlet weak var sceneView: ARSCNView! // 카메라 영역
    
    override func viewDidLoad() {
        super.viewDidLoad()
        sceneView.delegate = self
        guard ARFaceTrackingConfiguration.isSupported else {
            statusLabel.text = "AR FACE Detection is not supported on this device"
            return
        }
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let configuation = ARFaceTrackingConfiguration() // 트래킹 대상 설정(얼굴?, 몸?, 월드?) , 대상이 바뀐다면 전역에 선언해서 변경할수 있다.
        sceneView.session.run(configuation) //  트래킹 대상 연결 및 ar 실행
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        sceneView.session.pause() // 트래킹 정지
    }


}

extension ViewController:ARSCNViewDelegate
{
/// 얼굴에 마스크 생성 (1번만 호출)
    func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode?
    {
    // 연결 가능 기기인지 확인
        guard let device = sceneView.device else {
            return nil
        }
    /// 열굴 연결
    let faceGeometry = ARSCNFaceGeometry(device: device)
    let faceNode = SCNNode(geometry: faceGeometry) 
    faceNode.geometry?.firstMaterial?.fillMode = .lines // 얼굴 영역  line으로 표시
    return faceNode
    }
    /// 얼굴 마스크 업데이트 (60fps)
    func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
    	// 마스크의 위치 가져옴
        if let maskGeometry = self.faceNode?.geometry as? ARSCNFaceGeometry {
        	// 얼굴의 위치 가져옴
            let faceAnchor = anchor as! ARFaceAnchor
            // 마스크 위치를 얼굴 위치로 업데이트
            maskGeometry.update(from: faceAnchor.geometry)
        }
    }
}
profile
차근차근

0개의 댓글