代码之家  ›  专栏  ›  技术社区  ›  Igor Custodio

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

  •  2
  • Igor Custodio  · 技术社区  · 8 年前

    我正在使用框架(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)
    }
    

    很抱歉出现任何英语错误:)

    1 回复  |  直到 8 年前
        1
  •  4
  •   adamfowlerphoto    8 年前

    您已经在代码中这样做了。pixelBuffer变量是CVImageBuffer

    let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)