DepthData — получение данных о глубине на пиксель (анализ данных CVPixelBuffer)

Теперь я запускаю AVDepthPhotoFilter эту деталь глубины рендеринга со стереокамеры iPhone7Plus.

Итак, я хочу получить доступ к данным о глубине на пиксель, но я не знаю, как это сделать. Пожалуйста посоветуй.


person kuu    schedule 17.10.2017    source источник


Ответы (1)


Как получить DepthData и проанализировать данные CVPixelBuffer

  1. Вам нужно убедиться, что ваш AVCapturePhotoSettings() имеет isDepthDataDeliveryEnabled = true

  2. Вы должны использовать функцию 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, вот полезный пост -> подробности

person Oscar Falmer    schedule 20.10.2017
comment
Мне очень помог. - person Eyzuky; 06.03.2018