Ios 使用视觉框架查找人脸的俯仰和偏航

Ios 使用视觉框架查找人脸的俯仰和偏航,ios,swift,computer-vision,ios11,Ios,Swift,Computer Vision,Ios11,使用VNFaceObservation获取有关面的边界框和地标信息,但无法找到从观察中获取面的俯仰和偏航的位置 我们还尝试从CIDetector获取俯仰和偏航元数据,但同时运行CIDetector和Vision框架需要大量CPU let metadataOutput = AVCaptureMetadataOutput() let metaQueue = DispatchQueue(label: "MetaDataSession") metadataOutput.setMe

使用VNFaceObservation获取有关面的边界框和地标信息,但无法找到从观察中获取面的俯仰和偏航的位置

我们还尝试从CIDetector获取俯仰和偏航元数据,但同时运行CIDetector和Vision框架需要大量CPU

    let metadataOutput = AVCaptureMetadataOutput()
    let metaQueue = DispatchQueue(label: "MetaDataSession")
    metadataOutput.setMetadataObjectsDelegate(self, queue: metaQueue)
    if captureSession.canAddOutput(metadataOutput) {
        captureSession.addOutput(metadataOutput)
    } else {
        print("Meta data output can not be added.")
    }


    let configurationOptions: [String: AnyObject] = [CIDetectorAccuracy: CIDetectorAccuracyHigh as AnyObject, CIDetectorTracking : true as AnyObject, CIDetectorNumberOfAngles: 11 as AnyObject]
    faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: configurationOptions)

有没有办法使用VNPACESObservation数据来查找面部的俯仰和偏航?

据我所知,CoreImage中没有提供俯仰和偏航测量(我不熟悉Vision Framework)

但是,它可以使用AVFoundation进行检测,如以下示例项目所示:


VNPaceObservation从iOS12开始提供偏航和横滚,但令人恼火的是没有俯仰。OP询问如何获得俯仰。在AVFoundation、CoreImage和Vision框架中,获得横摇和横摇是很简单的。俯仰似乎是横摇和横摇的组合。如果获得横摇和偏航是微不足道的,那么OP似乎只需要一个数学函数来计算俯仰。俯仰不是横摇和偏航的组合。如图所示:--螺距是一个完全独立的跨不同轴测量值。通过将2D面部地标投影到3D空间,然后使用人头的近似模型,使用RANSAC或类似工具来解决透视n点问题(),确实可以使用数学来估计俯仰(和偏航/滚转),但这绝对不简单!
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {

    for metadataObject in metadataObjects as! [AVMetadataFaceObject] {
        DispatchQueue.main.async {
            self.avFaceID.text = "face ID: \(metadataObject.faceID)"
            self.avFaceRoll.text = "roll: \(Int(metadataObject.rollAngle))"
            self.avFaceYaw.text = "yaw: \(Int(metadataObject.yawAngle))"
        }
    }

}