Я в основном следовал этому отличному руководству по 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.).
Пример работающего изображения:
Пример, что половина работает:
(распознает 58)
Пример, который не работает:
(он имеет очень низкую достоверность для «91» и часто думает, что это всего лишь 9 или 9!)