Теперь я запускаю AVDepthPhotoFilter
эту деталь глубины рендеринга со стереокамеры iPhone7Plus.
Итак, я хочу получить доступ к данным о глубине на пиксель, но я не знаю, как это сделать. Пожалуйста посоветуй.
Теперь я запускаю AVDepthPhotoFilter
эту деталь глубины рендеринга со стереокамеры iPhone7Plus.
Итак, я хочу получить доступ к данным о глубине на пиксель, но я не знаю, как это сделать. Пожалуйста посоветуй.
Как получить DepthData и проанализировать данные CVPixelBuffer
Вам нужно убедиться, что ваш AVCapturePhotoSettings() имеет isDepthDataDeliveryEnabled = true
Вы должны использовать функцию func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?)
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
//## Convert Disparity to Depth ##
let depthData = (photo.depthData as AVDepthData!).converting(toDepthDataType: kCVPixelFormatType_DepthFloat32)
let depthDataMap = depthData.depthDataMap //AVDepthData -> CVPixelBuffer
//## Data Analysis ##
// Useful data
let width = CVPixelBufferGetWidth(depthDataMap) //768 on an iPhone 7+
let height = CVPixelBufferGetHeight(depthDataMap) //576 on an iPhone 7+
CVPixelBufferLockBaseAddress(depthDataMap, CVPixelBufferLockFlags(rawValue: 0))
// Convert the base address to a safe pointer of the appropriate type
let floatBuffer = unsafeBitCast(CVPixelBufferGetBaseAddress(depthDataMap), to: UnsafeMutablePointer<Float32>.self)
// Read the data (returns value of type Float)
// Accessible values : (width-1) * (height-1) = 767 * 575
let distanceAtXYPoint = floatBuffer[Int(x * y)]
}
Если вам нужна дополнительная информация об анализе CVPixelBuffer, вот полезный пост -> подробности