티스토리 뷰

iOS/iOS 개발

iOS - CoreML + ARKit

포도 동 2021. 5. 28. 17:29

ARKit - ARFaceAnchor 인식 기능에 얼굴표정에 대한 감정이 학습된 mlmodel을 활용한다고 가정하겠습니다.

sceneView로 ARFaceAnchor를 인식하는 방법은 BlendShapes 활용 때와 동일하게 진행합니다.

* 참고 : iOS - BlendShapes 활용하기

let model = try! VNCoreMLModel(for: CNNEmotions().model)

그 후, 사용할 mlmodel을 ViewController에 선언해줍니다.

 

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
        guard let sceneView = renderer as? ARSCNView else { return }
        guard let faceAnchor = anchor as? ARFaceAnchor,
            let faceGeometry = node.geometry as? ARSCNFaceGeometry,
            let pixelBuffer = sceneView.session.currentFrame?.capturedImage
            else { return }
        
        faceGeometry.update(from: faceAnchor.geometry)
        
        try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: .right, options: [:]).perform([VNCoreMLRequest(model: model) {
            [weak self] request, error in
                guard let firstResult = (request.results as? [VNClassificationObservation])?.first else { return }
                DispatchQueue.main.async {
                
                    // 비교 결과에 대한 기능 개발 부분
                    
                }
            }])
   }

renderer - didUpdate 부분에 VNImageRequestHandler를 통해 인식된 얼굴과 모델을 비교하는 코드를 작성합니다.

그리고 주석부분에 모델과 비교 결과에 대해 원하는 기능을 구현하는 코드를 작성할 수 있습니다.

'iOS > iOS 개발' 카테고리의 다른 글

iOS - Frame / Bounds  (0) 2021.12.04
iOS - CoreML  (0) 2021.05.28
iOS - BlendShapes 활용하기  (0) 2021.05.27
ARKit - BlendShapes  (0) 2021.05.25
iOS - Dispatch Queue  (0) 2021.05.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함