1

有没有办法在不使用 AR 的情况下使用 ARKit 访问 iOS 设备的环境光传感器?

https://developer.apple.com/documentation/arkit/arlightestimate/2878308-ambientintensity

换句话说,我可以在不创建 AR 场景的情况下访问“ambientIntensity”的值吗?

4

3 回答 3

4

请参阅文档ARLightEstimate.ambientIntensity

此值基于相机设备的内部曝光补偿

换句话说,如果你想使用设备摄像头来估计当地的光照条件,而不是使用 ARKit,你最好使用摄像头 API。(一方面,这些 API 在所有 iOS 11 设备和几个更早的 iOS 版本上都可用,而不需要 ARKit 的苛刻操作系统/硬件要求。)

快速浏览您需要在那里做的事情:

  1. 设置AVCaptureSession并选择您想要的相机AVCaptureDevice 。您可能需要也可能不需要连接视频/照片捕获输出(在您的情况下将大部分未使用)。
  2. 开始运行捕获会话。
  3. 使用 KVO 监控 . 上的曝光、温度和/或白平衡相关属性AVCaptureDevice

您可以在 Apple 的AVCamManual 示例代码中找到涵盖所有这些(以及更多,因此您需要提取与您相关的部分)的(旧的,ObjC)代码。

于 2017-08-01T18:35:00.687 回答
1

你不需要,ARSCNView但你需要有一个正在运行的ARSession https://developer.apple.com/documentation/arkit/arsession

完成设置后,您可以调用currentFramewhich 将为您提供包含估计值ARFrame的属性。lightEstimateambientIntensity

于 2017-08-01T14:23:49.100 回答
0

是的,在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")
        }
}
于 2020-10-15T19:36:38.453 回答