我正在使用AVFoundation的AVMetadataFaceObject和AVCaptureMetadataOutputObjectsDelegate实现面部检测功能。我正在使用前置摄像头来检测偏航角,以查看用户的头部转动了多远。在iPhone X上查看角度时,向右转为270.0度或315.0度,向左转为45.0度或90.0度。在iPhone 8上查看角度时,向右转为45.0度或90.0度,向左转为270.0度或315.0度。偏航角是相反的。此处存在相同的问题:https://forums.developer.apple.com/thread/113542没有响应。

这是我第一次在非iPhone X的设备上对其进行测试。

// I add the queue here...
        if captureSession.canAddOutput(metadataOutput) {
            captureSession.addOutput(metadataOutput)
            metadataOutput.setMetadataObjectsDelegate(self, queue: metaQueue)
            metadataOutput.metadataObjectTypes = [.face]
        }

func metadataOutput(_ output: AVCaptureMetadataOutput,
                        didOutput metadataObjects: [AVMetadataObject],
                        from connection: AVCaptureConnection) {
        let metadataObjects = metadataObjects as? [AVMetadataFaceObject]
        for metadataObject in metadataObjects! {
// turnAngle is different across devices
        let turnAngle = Double(metadataObject.yawAngle)
        }
    }


我希望各个设备的输出保持一致,因为向右转应始终产生x的偏航角,而向左转应始终产生y的偏航角。我在想这可能与设备方向有关,但确实不确定。任何帮助将不胜感激。

最佳答案

我发现如果设备具有多会话支持,则会发生相反的偏航角。
因此您可以使用

AVCaptureMultiCamSession.isMultiCamSupported

如果AVCaptureMultiCamSession.isMultiCamSupported == true,则为iPhone XS XR XS Max ...及更高版本
否则它来自iPhone X

关于ios - AVMetadataFaceObject偏航角反转/相反,取决于设备型号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57682511/

10-12 03:30