AVCapture запаздывает, распознавание текста начинается не сразу - PullRequest
0 голосов
/ 24 апреля 2019

Я новичок в Swift и в настоящее время работаю над функцией, которая включает в себя распознавание текста. Я использую MLKit от Firebase и у меня есть код, хотя он не очень сложный (я открыт для каждого предложения по улучшению моего кодирования), в значительной степени настроен.

В любом случае меня беспокоит две вещи:

  1. Поскольку я добавил распознавание текста, кажется, что прямая трансляция задерживается (примерно 1 кадр в секунду) - я полагаю, что это как-то вызвано распознаванием текста для предотвращения перегрузки? Если да, то как отключить просмотр в реальном времени и кадры, которые обрабатываются?
  2. Кажется, распознавание текста начинается через 10 секунд. Есть ли где-нибудь, чтобы начать это немедленно?

CameraViewController:

import UIKit
import AVKit
import Vision
import FirebaseMLVision


class CameraViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {    

    private lazy var vision = Vision.vision()
    private lazy var textRecognizer = vision.onDeviceTextRecognizer()

    override func viewDidLoad() {
        super.viewDidLoad()
        captureSession()
    }

    func captureSession () {
        let captureSession = AVCaptureSession()

        guard let captureDevice = AVCaptureDevice.default(for: .video) else { return }
        guard let input = try? AVCaptureDeviceInput(device: captureDevice) else{ return }
        captureSession.addInput(input)

        captureSession.startRunning()

        let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        view.layer.addSublayer(previewLayer)
        previewLayer.frame = view.frame

        let dataOutput = AVCaptureVideoDataOutput()
        dataOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
        captureSession.addOutput(dataOutput)
    }

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


        let metadata = VisionImageMetadata()

        let devicePosition: AVCaptureDevice.Position = .back

        let deviceOrientation = UIDevice.current.orientation

        switch deviceOrientation {
        case .portrait:
            metadata.orientation = devicePosition == .front ? .leftTop : .rightTop
        case .landscapeLeft:
            metadata.orientation = devicePosition == .front ? .bottomLeft : .topLeft
        case .portraitUpsideDown:
            metadata.orientation = devicePosition == .front ? .rightBottom : .leftBottom
        case .landscapeRight:
            metadata.orientation = devicePosition == .front ? .topRight : .bottomRight
        case .faceDown, .faceUp, .unknown:
            metadata.orientation = .leftTop
        }

        let image = VisionImage(buffer: sampleBuffer)
        image.metadata = metadata

        textRecognizer.process(image) { result, error in
            guard error == nil, let result = result else {
                return
            }

            for block in result.blocks {
                for line in block.lines {
                    for element in line.elements {
                        let elementText = element.text
                        print(element.text)
                    }
                }
            }
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...