代码之家  ›  专栏  ›  技术社区  ›  J A S K I E R

如何用cmsamplebuffergetimagebuffer在swift中正确获取imagebuffer?

  •  2
  • J A S K I E R  · 技术社区  · 6 年前

    “cmsampleBufferGetImageBuffer”已被属性替换 'cmsamplebuffer.imagebuffer',

    cmsamplebufferget.imagebuffer不起作用:)关于swift 4.2,似乎参数也在更改。

    guard let pixelbuffer:cvPixelbuffer=cmsampleBufferGetImageBuffer(sampleBuffer)else return
    

    整个函数。以防万一…

    func captureoutput(u output:avcaptureoutput,didOutput samplebuffer:cmsamplebuffer,from connection:avcaptureconnection){
    //print(“相机能够捕获帧:”,date())
    
    guard let pixelbuffer:cvpixelbuffer=cmsampleBufferGetImageBuffer(sampleBuffer)else返回
    guard let model=尝试?vncoremlmmodel(用于:ars().model)else返回
    中的let request=vncoremlrequest(model:model)(finishedreq,err)
    
    guard let results=finishedReq.results as?让结果完成?[VNSClassificationObservation]其他返回
    guard let firstobservation=results.first else返回
    
    打印(firstobservation.identifier、firstobservation.confidence)
    
    DispatchQueue.main.asyncqueue(调度队列.main.asyncqueue){
    self.identifierlabel.text=“\(firstobservation.identifier)\(firstobservation.confidence*100)”
    }
    
    }
    
    尝试?vImageRequestHandler(cvPixelBuffer:PixelBuffer,选项:[:])。执行([请求])
    }
    

    有没有人试图解决这个问题,或者有人参考了新的语法?

    “cmsampleBufferGetImageBuffer”已被属性替换 'cmsamplebuffer.imagebuffer'

    cmsamplebufferget.imagebuffer不起作用:)关于swift 4.2,参数似乎也在改变。

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

    整个函数。以防万一…

        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])
        }
    

    有没有人试图解决这个问题,或者有人参考了新的语法?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Michał Turczyn    6 年前
    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
    }