[英]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.