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.

Используйте расстояние Левенштейна. Это дает "расстояние" между двумя словами. Например:

  1. Расстояние между словами "slob" и "slob" равно 0.
  2. Расстояние между словами "slob" и "5lob" равно 1.
  3. Расстояние между словами "slob" и "Flutter" - 6.
  4. Расстояние между словами "неряха" и "рынок" - 6.

Вы можете попробовать пары слов здесь. И вы, вероятно, погуглите код расстояния Левенштейна на выбранном вами языке программирования.

Альтернативой может быть использование FuzzyWuzzy в Python. Fuzzywuzzy - это библиотека Python, использующая расстояние Левенштейна для вычисления различий между последовательностями в простом в использовании пакете. Узнайте больше о FuzzyWuzzy здесь.

Другие вопросы по тегам