Обнаружение текста в живой камере Swift - PullRequest
0 голосов
/ 18 февраля 2020

Я обнаруживаю текст в камере в реальном времени, используя функцию swift, но в кадрах не определены правильные слова Приложение отлично работает, когда я пытаюсь обнаружить текст на изображении, и кадры рисуются точно по всему миру.

see iamge

для живой камеры, что я сделал, это создать захватывает видео сессию и реализует AVCaptureVideoDataOutputSampleBufferDelegate , затем в didOutput я беру буферизованное изображение и преобразую его в UIImage и определяю в нем текст. но та же самая стратегия не работает правильно в этом случае.

check result in live camera также, didOutput вызов каждый раз после начала сеанса видео, и я хочу только Вызовите функцию, когда пользователь перемещает свою камеру или находит текст.

    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
            print("didOutput")
            // do stuff here
                guard let hasImage = CMSampleBufferGetImageBuffer(sampleBuffer) else {
                    print("no image")
                    return
                }
                let imageBuffer = hasImage
                let ciimage : CIImage = CIImage(cvPixelBuffer: imageBuffer)
                liveCamImage = self.convert(cmage: ciimage)
                DispatchQueue.main.async {
                     self.drawRectOnText(imagefromCam:self.liveCamImage)         
        }
    }

есть ли какое-либо решение. // функция преобразования

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
    }

1 Ответ

0 голосов
/ 19 февраля 2020

Используйте приведенный ниже код в вашем методе конвертации:

func convert(samImageBuff:CIImage) -> UIImage{

let imageBuffer = CMSampleBufferGetImageBuffer(samImageBuff)
var ciImage: CIImage? = nil
if let imageBuffer = imageBuffer as? CVPixelBuffer {
    ciImage = CIImage(cvPixelBuffer: imageBuffer)
}
let temporaryContext = CIContext(options: nil)
var videoImage: CGImage? = nil
if let ciImage = ciImage {
    videoImage = temporaryContext.createCGImage(ciImage, from: CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(imageBuffer), height: CVPixelBufferGetHeight(imageBuffer)))
}

var image: UIImage? = nil
if let videoImage = videoImage {
    image = UIImage(cgImage: videoImage)
}
CGImageRelease(videoImage)
 return image
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...