VNRecognizeTextRequest 数字/七段数字

问题描述 投票:0回答:1

我基本上遵循了 VNRecognizeTextRequest 上这个很棒的教程并修改了一些内容:

https://bendodson.com/weblog/2019/06/11/detecting-text-with-vnrecognizetextrequest-in-ios-13/

我正在尝试识别来自具有七段式显示器的设备的文本,这对于这个框架来说似乎有点棘手。通常它是有效的,但是带有逗号的数字很难,如果有空格也是如此。我想知道是否有可能“训练”这个识别引擎。另一种可能性可能是以某种方式告诉它专门寻找数字,也许这样它就可以将更多的处理能力集中在数字上,而不是一般地寻找文本?

我使用这个修改后的代码来请求:

ocrRequest = VNRecognizeTextRequest { (request, error) in
    guard let observations = request.results as? [VNRecognizedTextObservation] else { return }

    for observation in observations {
        guard let topCandidate = observation.topCandidates(1).first else { continue }
        let topCandidateText = topCandidate.string

        if let float = Float(topCandidateText), topCandidate.confidence > self.bestConfidence {
            self.bestCandidate = float
            self.bestConfidence = topCandidate.confidence
        }
    }

    if self.bestConfidence >= 0.5 {
        self.captureSession?.stopRunning()

        DispatchQueue.main.async {
            self.found(measurement: self.bestCandidate!)
        }
    }
}

ocrRequest.recognitionLevel = .accurate
ocrRequest.minimumTextHeight = 1/10
ocrRequest.recognitionLanguages = ["en-US", "en-GB"]
ocrRequest.usesLanguageCorrection = true

该类中有3个与文本识别相关的全局变量:

private var ocrRequest = VNRecognizeTextRequest(completionHandler: nil)
private var bestConfidence: Float = 0
private var bestCandidate: Float?

提前感谢您的回答,尽管这与代码不直接相关,而是更多与概念相关(即“我做错了什么/我是否忽略了一个重要功能?”等)。

有效的示例图像:

一半有效的例子:

(识别58)

不起作用的示例:

(它对“91”的置信度很低,常常认为它只是9或9!)

swift vision
1个回答
0
投票

我有类似的问题,但尝试读取水表。 将

VNRecognizeTextRequest.recognitionLevel
.accurate
更改为
.fast
帮助我解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.