我正在使用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/