[英]Reading iOS light sensor with ARKit
有没有办法使用 ARKit 访问 iOS 设备的环境光传感器,而根本不使用 AR?
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
,它会为您提供一个ARFrame
,该ARFrame
具有包含环境ambientIntensity
估计的lightEstimate
属性。
是的,在适配协议 AVCaptureVideoDataOutputSampleBufferDelegate 时要覆盖的 captureOutput 函数中
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")
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.