有没有办法将 CMSampleBuffer 转换为 CVImageBuffer?

Igo*_*dio 2 camera avfoundation swift

我正在使用框架 (MoodMe) 来检测 iPhone 相机上的人脸,我需要将图像或帧传递给 MoodMe 实例。

我已将相机输出转换为 UIImage 但框架未检测到任何人脸。(我认为它)

所以我想将我的缓冲区传递给框架,它要求我提供 CVImageBuffer 变量,但我不知道如何(如果可能的话)将从相机输出接收到的 CMSampleBuffer 转换为 CVImageBuffer。有办法做到这一点吗?

我的代码:

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
    let attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, sampleBuffer, kCMAttachmentMode_ShouldPropagate)
    let ciImage = CIImage(cvImageBuffer: pixelBuffer!, options: attachments as! [String : Any]?)
    let img = UIImage(ciImage: ciImage)

    mdm.processImage(img)

    // it does not works
    if mdm.faceTracked {
        print("Face")
    } else {
        print("Not face")
    }

//  mdm.processImageBuffer(frame: CVImageBuffer! var)
}
Run Code Online (Sandbox Code Playgroud)

抱歉有任何英语错误:)

ada*_*oto 5

您已经在代码中执行了此操作。PixelBuffer 变量是一个 CVImageBuffer

let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
Run Code Online (Sandbox Code Playgroud)