Как реализовать фильтр живой камеры в ARKit с помощью Swift 4? - PullRequest
1 голос
/ 21 октября 2019

Я хочу интегрировать фильтр камеры iPhone в свой проект, мой проект основан на ARKit, я хочу применить все виды фильтров, которые Apple предоставляет в приложении камеры, особенно VIVID, VIVID WARM и VIVID COOL

Я попробовал все возможности, о которых я упомяну ниже.

func session(_ session: ARSession, didUpdate frame: ARFrame) {
        guard let currentBackgroundFrameImage = sceneView.session.currentFrame?.capturedImage,
        let pixelBufferAddressOfPlane = CVPixelBufferGetBaseAddressOfPlane(currentBackgroundFrameImage, 1) else { return }

       let x: size_t = CVPixelBufferGetWidthOfPlane(currentBackgroundFrameImage, 1)
       let y: size_t = CVPixelBufferGetHeightOfPlane(currentBackgroundFrameImage, 1)
       memset(pixelBufferAddressOfPlane, 128, Int(x * y) * 2) }

Я получил черно-белый фильтр камеры, используя приведенный выше код.

func session(_ session: ARSession, didUpdate frame: ARFrame) {
        let bg = session.currentFrame?.capturedImage
        if (bg != nil) {
            let image = CIImage(cvPixelBuffer: bg!)
            let filter:CIFilter = CIFilter(name: "CIPixellate")!
            filter.setDefaults()
            filter.setValue(image, forKey: kCIInputImageKey)
            //let filteredImageData = filter.value(forKey: kCIOutputImageKey) as! CIImage

            let context = CIContext()
            //if let result = filter.outputImage,
            if let result = filter.value(forKey: kCIOutputImageKey) ,
                let cgImage = context.createCGImage(result as! CIImage, from: (result as! CIImage).extent) {
                let imageForUser = UIImage(cgImage: cgImage)
                sceneView.scene.background.contents = imageForUser
                sceneView.scene.background.contentsTransform = SCNMatrix4MakeRotation(.pi / 2, 0, 0, 1)
            }
        }
}

Камера зависает и очень медленно перерисовывается, используя приведенный выше код, иногда происходит сбой приложения из-за проблем с памятью. (проверено в iPhone XR)

Пожалуйста, помогите мне с функциональностью фильтра камеры в реальном времени. Было бы здорово, если бы вы предоставили мне какой-нибудь код для фильтра камеры ARKit. Спасибо.

...