簡體   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