gpt4 book ai didi

ios - AVCapture 似乎滞后,文本识别不会立即开始

转载 作者:行者123 更新时间:2023-11-28 11:34:40 24 4
gpt4 key购买 nike

我是 Swift 的新手,目前正在研究一项包括文本识别在内的功能。我正在使用 Firebase 的 MLKit 并拥有代码,虽然它不是很复杂(我愿意接受每一个改进我的编码的建议),但几乎已经设置好了。

不管怎样,有两件事困扰着我:

  1. 自从我添加了文本识别后,实时馈送似乎滞后(大约每秒 1 帧)- 我认为这是由文本识别以某种方式引起的,以防止过载?如果是这样,如何断开实时取景和处理的帧?
  2. 文本识别似乎在 10 秒后开始。有办法让它立即启动吗?

相机 View Controller :

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

}

最佳答案

您需要更新您的AVCaptureVideoDataOutput

output.alwaysDiscardsLateVideoFrames = true

https://github.com/googlecodelabs/mlkit-ios/blob/master/translate/TranslateDemo/CameraViewController.swift#L307

关于ios - AVCapture 似乎滞后,文本识别不会立即开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55837593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com