【问题标题】:Face Recognition iPhone X Swift人脸识别 iPhone X Swift
【发布时间】:2018-08-06 21:49:50
【问题描述】:

我用 ARFaceAnchor 做了一些实验来识别眨眼等情绪。当然,我正确设置了 FaceAnchor,因为在调试器上我可以看到坐标,但它似乎没有识别出我设置的任何情绪......

附加的你会找到 ViewController,在一个单独的类中你会找到 Emotions。

有什么想法吗?谢谢!

//  ViewController.swift
//

import UIKit
import SceneKit
import ARKit

class ViewController: UIViewController, ARSessionDelegate {

    @IBOutlet var sceneView: ARSCNView!

    let session = ARSession()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.sceneView.scene = SCNScene()
        self.sceneView.rendersContinuously = true

        // Configure our ARKit tracking session for facial recognition
        let config = ARFaceTrackingConfiguration()
        config.worldAlignment = .gravity
        session.delegate = self
        session.run(config, options: [])
    }

    // AR Session

    var currentFaceAnchor: ARFaceAnchor?
    var currentFrame: ARFrame?

    func session(_ session: ARSession, didUpdate frame: ARFrame) {
        self.currentFrame = frame
        DispatchQueue.main.async {

        }
    }

    func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {

    }

    func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
        guard let faceAnchor = anchors.first as? ARFaceAnchor else { return }
        self.currentFaceAnchor = faceAnchor
        print("Face",faceAnchor)

    }

    func session(_ session: ARSession, didRemove anchors: [ARAnchor]) {

    }

    var expressionsToUse: [Expression] = [SmileExpression(), EyebrowsRaisedExpression(), EyeBlinkLeftExpression(), EyeBlinkRightExpression(), JawOpenExpression(), LookLeftExpression(), LookRightExpression()] //All the expressions
    var currentExpression: Expression? = nil {
        didSet {
            if currentExpression != nil {
                self.currentExpressionShownAt = Date()
            } else {
                self.currentExpressionShownAt = nil
            }
        }
    }
    var currentExpressionShownAt: Date? = nil



}

【问题讨论】:

    标签: swift face-recognition iphone-x


    【解决方案1】:

    没有检测到表达式的原因是因为您实际上并没有对它们做任何事情,除了将它们添加到expressionsToUse Array。

    每个Expression 都有三个您当前未使用的函数:

     func name() -> String {}
     func isExpressing(from: ARFaceAnchor) -> Bool {}
     func isDoingWrongExpression(from: ARFaceAnchor) -> Bool {}
    

    由于您想检测情绪,您需要将这些函数挂钩到以下委托方法中:

    func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) { }
    

    这样的事情会为你指明正确的方向:

    func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
    
        //1. Check To See We Have A Valid ARFaceAnchor
        guard let faceAnchor = anchors.first as? ARFaceAnchor else { return }
    
        self.currentFaceAnchor = faceAnchor
    
        //2. Loop Through Each Of The Expression & Determine Which One Is Being Used
        expressionsToUse.forEach { (possibleExpression) in
    
            //a. If The The User Is Doing A Particular Expression Then Assign It To The currentExpression Variable
            if possibleExpression.isExpressing(from: faceAnchor){
    
                currentExpression = possibleExpression
    
                print("""
                      Current Detected Expression = \(possibleExpression.name())
                      It Was Detected On \(currentExpressionShownAt!)
                      """)
    
            }else if possibleExpression.isDoingWrongExpression(from: faceAnchor){
    
               print("Incorrect Detected Expression = \(possibleExpression.name())")
            }
        }
    
    }
    

    希望对你有帮助...

    【讨论】:

    • 太好了!它工作得很好......非常感谢您的大力帮助,非常感谢:)
    • 很高兴它帮助了^_________*
    • 超级有帮助! :) 从 6 月份开始我就被堆叠了,然后我在商店里切换并发布了其他应用程序,我完全忘记了这个!
    • 嗨@BlackMirrorz :((((你能帮我解决ARKit/scenekit 3D到2D投影问题吗:(((
    猜你喜欢
    • 2012-05-03
    • 2011-10-12
    • 2012-07-01
    • 2011-12-14
    • 1970-01-01
    • 2018-06-14
    • 2018-06-28
    • 2023-03-06
    • 2015-07-05
    相关资源
    最近更新 更多