Как дать наибольшие шансы на успех программному обеспечению для распознавания текста?
Вопрос
Я использую Распознавание текста в Тессеракте (через пытессер) и PIL (библиотека изображений Python) для автоматического тестирования приложения.
Я проверяю, что отображаемый текст в порядке, делая снимок экрана и получая текст благодаря tesseract.
Вначале у меня были некоторые проблемы, и, похоже, это работает лучше, так как я увеличил размер скриншота благодаря бикубической интерполяции PIL.
К сожалению, у меня все еще есть некоторые ошибки, такие как путаница между '0' и 'O'.Я могу себе представить, что в будущем у меня возникнут и другие подобные проблемы.
Я хотел бы знать, существуют ли какие-либо методы подготовки изображения, чтобы помочь распознаванию текста.Любая идея приветствуется.
Заранее спасибо
Решение
Бесстыдный плагин и отказ от ответственности: моя компания пакеты Tesseract для использования в .NET
Tesseract - это нормальный движок распознавания текста.Он может многое пропустить и легко запутывается в нетексте.Лучшее, что вы можете для этого сделать, - это убедиться, что он получает только текст.Следующая лучшая вещь - придать ему что-то разумно бинаризованное (адаптивный или динамический порог для достижения этого) или оттенки серого и позволить ему попытаться выполнить бинаризацию.
Другие советы
- Обучите tesseract распознавать ваш шрифт
- Сделайте изображение более чистым и с достаточным количеством свободного места вокруг символов
- Прибыль :)
Вот несколько примеров из реального мира.
- Первое изображение - исходное изображение (обрезанные номера измерителей мощности).
- Второе изображение - это слегка очищенное изображение в GIMP, точность распознавания около 50% в tesseract
- Третье изображение - полностью очищенное изображение - 100% распознавание текста без какой-либо подготовки!
Даже при наилучших условиях варианты распознавания будут незаметно подкрадываться к вам.Вашим лучшим вариантом будет разработать свои тесты таким образом, чтобы быть в курсе их.
Для различения между 0 и O одним простым решением является выбор шрифта, который различает оба (например:0 имеет черточку или точку в середине).Было бы это приемлемо в вашем приложении?
Другим решением является применение шага на основе словаря после посимвольного анализа текста - загрузка распознанного текста в какую-либо форму проверки орфографии или валидатора для различения сложных символов.
Например, круглый символ, за которым следуют другие цифры, скорее всего, будет нулем, в то время как тот же символ, за которым следуют буквы, скорее всего, будет заглавной "о".Это тривиальный пример, но он показывает, насколько контекст необходим для создания более надежной системы распознавания.