Firebase ML Vision TextRecogniser изменяет результаты для лучшего поиска
Я постоянно сталкиваюсь с проблемой Firebase Ml-Vision в моем приложении Flutter, когда результаты неточны. Теперь я понимаю, что всегда будет некоторая потеря точности, но я пытаюсь найти способ хотя бы попытаться обойти некоторые из наиболее очевидных проблем.
Поскольку мне нужно искать текст вывески, чтобы увидеть, совпадает ли он с определенным списком предопределенных строк, я пытаюсь выяснить способ, которым я могу взять конкретное слово, такое как указанное ниже, и создать список всех перестановок, где учитываются следующие буквы и цифры:
- 0=O и O = 0
- 1= l и l =1
- 2 = z и z = 2
- 5 = s и s = 5
- 6 = b и b = 6
- 7= Т и Т =7
Проблема в том, что некоторые буквы или цифры заменяются противоположно выглядящими буквами или цифрами. Например: слово "slob" может быть прочитано OCR как "5lob", "s1ob", "sl0b", "slo6" или даже "5106".
Я не уверен, есть ли какие-то встроенные функции в flutter/dart, которые могут помочь с этим. Единственное, что у меня было, это куча действительно неприятных вложенных циклов for. Я чувствую, что должен быть какой-то элегантный способ добиться этого. Есть ли вообще термин для этого типа алгоритма?
1 ответ
Был там.
К сожалению, во Flutter нет встроенной функции, поскольку, как вы уже догадались, Flutter - это фреймворк для мобильных приложений. И этот материал (OCR/ML-Vision) относится к другой области.
Вы можете использовать простой REST API. Вы отправляете текст, полученный от Firebase ML-Vision, в API и получаете текст ответа. Вы можете использовать любой язык программирования по вашему выбору. Ниже описано, что вы можете делать в API.
Используйте расстояние Левенштейна. Это дает "расстояние" между двумя словами. Например:
- Расстояние между словами "slob" и "slob" равно 0.
- Расстояние между словами "slob" и "5lob" равно 1.
- Расстояние между словами "slob" и "Flutter" - 6.
- Расстояние между словами "неряха" и "рынок" - 6.
Вы можете попробовать пары слов здесь. И вы, вероятно, погуглите код расстояния Левенштейна на выбранном вами языке программирования.
Альтернативой может быть использование FuzzyWuzzy в Python. Fuzzywuzzy - это библиотека Python, использующая расстояние Левенштейна для вычисления различий между последовательностями в простом в использовании пакете. Узнайте больше о FuzzyWuzzy здесь.