Я пишу приложение для Android, чтобы извлечь головоломку Sudoku из картинки. Для каждой ячейки сетки Sudoku 9x9 мне нужно определить, содержит ли она одну из цифр с 1 по 9 или пусто. Я начинаю с судоку следующим образом:
Я предварительно обрабатываю Sudoku с помощью OpenCV, чтобы извлекать черно-белые изображения отдельных цифр, а затем помещать их через Tesseract. Тем не менее, существует несколько ограничений для Tesseract:
- Tesseract большой, содержит много функциональности, в которой я не нуждаюсь (I.e. Полное распознавание текста), и для обучения требуются данные обучения на английском языке, которые, как мне кажется, должны поступать на SD-карту устройства. По крайней мере, я могу сказать, что нужно искать цифры только с помощью
tesseract.setVariable("tessedit_char_whitelist", "123456789");
- Tesseract часто неправильно интерпретирует отдельные цифры в виде строки цифр, часто содержащих символы новой строки. Иногда это просто неправильно. Вот несколько примеров из вышеупомянутого судоку:
У меня есть три вопроса:
- Есть ли способ преодолеть ограничения Tesseract?
- Если нет, то какой полезный и точный метод обнаружения отдельных цифр (а не ближайших соседей), которые можно реализовать на Android - это может быть бесплатная библиотека или решение для DIY.
- Как я могу улучшить предварительную обработку, чтобы настроить этот метод? Одна из возможностей, которую я рассмотрел, - это использовать алгоритм прореживания, как это было предложено этим сообщением, но я не буду пытаться его реализовать, если это не изменит ситуацию.