VNRecognizeTextRequest цифровые / семисегментные числа - PullRequest
0 голосов
/ 18 июня 2020

Я в основном следовал этому отличному руководству по 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?

Заранее спасибо за ваши ответы, даже если это не связано напрямую с кодом, а больше с концепцией ( т.е. «я что-то делаю не так / упустил ли я важную функцию?» et c.).

Пример работающего изображения:

93

Пример, что половина работает:

5.8 (распознает 58)

Пример, который не работает:

91 (он имеет очень низкую достоверность для «91» и часто думает, что это всего лишь 9 или 9!)

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