繁体   English   中英

使用 ARKit 读取 iOS 光传感器

[英]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 设备和几个早期的 iO​​S 版本,而不需要 ARKit 对操作系统/硬件的苛刻要求。)

快速浏览您需要在那里做什么:

  1. 设置一个AVCaptureSession并选择你想要的相机AVCaptureDevice 您可能需要也可能不需要连接视频/照片捕获输出(在您的情况下大部分未使用)。
  2. 开始运行捕获会话。
  3. 使用 KVO 监控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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM