Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get ImageBuffer correctly in Swift now with CMSampleBufferGetImageBuffer?

enter image description here

'CMSampleBufferGetImageBuffer' has been replaced by property 'CMSampleBuffer.imageBuffer'

CMSampleBufferGet.ImageBuffer doesn't work :) It seems parameters also being changed regarding to Swift 4.2.

guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }

Entire function. Just in case ...

    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
//        print("Camera was able to capture a frame:", Date())

        guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
        guard let model = try? VNCoreMLModel(for: ARS().model) else { return }
        let request = VNCoreMLRequest(model: model) { (finishedReq, err) in

            guard let results = finishedReq.results as? [VNClassificationObservation] else { return }
            guard let firstObservation = results.first else { return }

            print(firstObservation.identifier, firstObservation.confidence)

            DispatchQueue.main.async {
                self.identifierLabel.text = "\(firstObservation.identifier) \(firstObservation.confidence * 100)"
            }

        }

        try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
    }

Did anyone try to solve this or has a reference for the new syntax?

like image 278
J A S K I E R Avatar asked Aug 06 '26 21:08

J A S K I E R


1 Answers

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {

    connection.videoOrientation = AVCaptureVideoOrientation.portrait
    let imageBuffer: CVPixelBuffer = sampleBuffer.imageBuffer!
    let ciimage : CIImage = CIImage(cvPixelBuffer: imageBuffer)
    let image : UIImage = self.convert(cmage: ciimage)

}


// Convert CIImage to CGImage
func convert(cmage:CIImage) -> UIImage {
    let context:CIContext = CIContext.init(options: nil)
    let cgImage:CGImage = context.createCGImage(cmage, from: cmage.extent)!
    let image:UIImage = UIImage.init(cgImage: cgImage)
    return image
}
like image 97
Bryan Avatar answered Aug 09 '26 14:08

Bryan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!