有没有办法在不使用 AR 的情况下使用 ARKit 访问 iOS 设备的环境光传感器?
https://developer.apple.com/documentation/arkit/arlightestimate/2878308-ambientintensity
换句话说,我可以在不创建 AR 场景的情况下访问“ambientIntensity”的值吗?
有没有办法在不使用 AR 的情况下使用 ARKit 访问 iOS 设备的环境光传感器?
https://developer.apple.com/documentation/arkit/arlightestimate/2878308-ambientintensity
换句话说,我可以在不创建 AR 场景的情况下访问“ambientIntensity”的值吗?
请参阅文档ARLightEstimate.ambientIntensity
:
此值基于相机设备的内部曝光补偿
换句话说,如果你想使用设备摄像头来估计当地的光照条件,而不是使用 ARKit,你最好使用摄像头 API。(一方面,这些 API 在所有 iOS 11 设备和几个更早的 iOS 版本上都可用,而不需要 ARKit 的苛刻操作系统/硬件要求。)
快速浏览您需要在那里做的事情:
AVCaptureSession
并选择您想要的相机AVCaptureDevice
。您可能需要也可能不需要连接视频/照片捕获输出(在您的情况下将大部分未使用)。AVCaptureDevice
。您可以在 Apple 的AVCamManual 示例代码中找到涵盖所有这些(以及更多,因此您需要提取与您相关的部分)的(旧的,ObjC)代码。
你不需要,ARSCNView
但你需要有一个正在运行的ARSession
https://developer.apple.com/documentation/arkit/arsession
完成设置后,您可以调用currentFrame
which 将为您提供包含估计值ARFrame
的属性。lightEstimate
ambientIntensity
是的,在captureOutput函数中适配协议AVCaptureVideoDataOutputSampleBufferDelegate时要覆盖
override func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
//Retrieving EXIF data of camara frame buffer
let rawMetadata = CMCopyDictionaryOfAttachments(allocator: nil, target: sampleBuffer, attachmentMode: kCMAttachmentMode_ShouldPropagate)
let metadata = CFDictionaryCreateMutableCopy(nil, 0, rawMetadata) as NSMutableDictionary
let exifData = metadata.value(forKey: "{Exif}") as? NSMutableDictionary
if let light = exifData?[kCGImagePropertyExifBrightnessValue] as? NSNumber {
print("Light \(light.floatValue)")
} else {
print("problem with light")
}
}