Tesseract — это движок оптического распознавания символов (OCR) с открытым исходным кодом, является самой популярной и качественной OCR-библиотекой.
OCR использует нейронные сети для поиска и распознавания текста на изображениях.
Tesseract ищет шаблоны в пикселях, буквах, словах и предложениях, использует двухэтапный подход, называемый адаптивным распознаванием. Требуется один проход по данным для распознавания символов, затем второй проход, чтобы заполнить любые буквы, в которых он не был уверен, буквами, которые, скорее всего, соответствуют данному слову или контексту предложения.
На одном из проектов стояла задача распознать чеки с фотографий.
Инструментом для распознавания был использован Tesseract OCR. Плюсами данной библиотеки можно отметить обученные языковые модели (>192), разные виды распознавания (изображение как слово, блок текста, вертикальный текст), легкая настройка. Так как Tesseract OCR написан на языке C++, был использован сторонний wrapper c github.
Tesseract OCR: Extract Text From Any Image
Различиями между версиями являются разные обученные модели (версия 4 имеет большую точность, поэтому мы использовали её).
Нам потребуются файлы с данными для распознавания текста, для каждого языка свой файл. Скачать данные можно по ссылке.
Чем лучше качество исходного изображения (имеют значение размер, контрастность, освещение), тем лучше получается результат распознавания.
Также был найден способ обработки изображения для его дальнейшего распознавания путем использования библиотеки OpenCV. Так как OpenCV написан на языке C++, и не существует оптимального для нашего решения написанного wrapper’а, было решено написать собственный wrapper для этой библиотеки с необходимыми для нас функциями обработки изображения. Основной сложностью является подбор значений для фильтра для корректной обработки изображения. Также есть возможность нахождения контуров чеков/текста, но не изучено до конца. Результат получился лучше (на 5-10%).
language — язык текста с картинки, можно выбрать несколько путем их перечисления через «+»;
pageSegmentationMode — тип расположения текста на картинке;
charBlacklist — символы, которые будут игнорироваться ignoring characters.
Использование только Tesseract дало точность ~70% при идеальном изображении, при плохом освещении/качестве картинки точность была ~30%.
Vision + Tesseract OCR
Так как результат был неудовлетворителен, было решено использовать библиотеку от Apple — Vision. Мы использовали Vision для нахождения блоков текста, дальнейшего разделения изображения на отдельные блоки и их распознавания. Результат был лучше на ~5%, но и появлялись ошибки из-за повторяющихся блоков.
Недостатками этого решения были:
- Скорость работы. Скорость работы уменьшилась >4 раза (возможно, существует вариант распоточивания)
- Некоторые блоки текста распознавались более 1 раза
- Текст распознается справа налево, из-за чего текст с правой части чека распознавался раньше, чем текст слева.
What Exactly is a Tesseract? (Hint: Not a Superhero Stone)
MLKit
Еще одним из методов определения текста является MLKit от Google, развернутый на Firebase. Данный метод показал наилучшие результаты (~90%), но главным недостатком этого метода является поддержка только латинских символов и сложная обработка разделенного текста в одной строке (наименование — слева, цена — справа).
В итоге можно сказать, что распознать текст на изображениях — задача выполнимая, но есть некоторые трудности. Основной проблемой является качество (размер, освещенность, контрастность) изображения, которую можно решить путем фильтрации изображения. При распознавании текста при помощи Vision или MLKit были проблемы с неверным порядком распознавания текста, обработкой разделенного текста.
Распознанный текст может быть в ручную откорректирован и пригоден к использованию; в большинстве случаев при распознавании текста с чеков итоговая сумма распознается хорошо и не нуждается в корректировках.
- C++
- Обработка изображений
Источник: habr.com
Установка Tesseract для OCR
OCR — механический или электронный перевод изображений рукописного, машинописного или печатного текста в текстовые данные, использующихся для представления символов в компьютере.
Знакомство с программой
Tesseract первоначально разработана Hewlett Packard в 1980-х годах, в 2005 году был опубликован её исходный код. В августе 2006 г. Google купил её и открыл исходные тексты под лицензией Apache 2.0 для последующей разработки.
Программное обеспечение Tesseract работает со многими естественными языками от английского (первоначально) до панджаби. С момента обновления в 2015 году он поддерживает более 100 письменных языков и содержит обучаемый код для других языков. Поддержка русского языка реализована подключением дополнительных модулей.
Первоначально программа была написана на C, в 1998 году была перенесена на C++. У неё нет графического интерфейса, но есть сторонние программные проекты, которые обертывают Tesseract для предоставления графического интерфейса пользователя.
Установка Tesseract
Чтобы использовать библиотеку Tesseract, необходимо установить её в операционную систему.
Для пользователей MacOS воспользуемся brew:
$ brew install tesseract
Если используется операционная система Ubuntu:
$ sudo apt-get install tesseract-ocr
Пользователям Windows официальных бинарных сборок Tesseract не предоставляется, поэтому рекомендуется воспользоваться поисковыми системами для поисков сторонних сборок.
Проверка правильности установки
Чтобы проверить, что Tesseract был успешно установлен, выполним следующую команду:
$ tesseract -v tesseract 3.05.00 leptonica-1.74.1 libjpeg 8d : libpng 1.6.29 : libtiff 4.0.7 : zlib 1.2.8
В командную строку должна распеваться версия Tesseract, а также список совместимых библиотек форматов файлов изображений.
Если появилась ошибка:
-bash: tesseract: command not found
тогда вернитесь к предыдущему шагу и устраните ошибки установки. Кроме того, может потребоваться обновить переменную окружения PATH (только для продвинутых пользователей).
Проверка Tesseract OCR
Для того чтобы получить разумные результаты в Tesseract OCR нужно предварительно обработать цифровыми фильтрами поступающие изображения.
При использовании Tesseract рекомендуется:
- Использовать входные изображения с максимально высоким разрешением и DPI;
- Применение пороговых фильтров для выделения текста из фона;
- Максимально чёткое сегментирование переднего плана по сравнению с задним фоном, без пикселяции или деформаций символов.
- Применение коррекции текста к входному изображению для обеспечения правильного выравнивания текста.
Отклонения от этих рекомендаций могут привести к неправильным результатам OCR.
Теперь применим OCR к следующему изображению:
Запустим команду в терминале:
$ tesseract tesseract_inputs/example_01.png stdout Warning in pixReadMemPng: work-around: writing to a temp file Testing Tesseract OCR
Tesseract правильно распознал текст «Testing Tesseract OCR» и распечатал его в терминале.
Ограничения Tesseract
К сожалению, этот синтетический пример достаточно далёк от реальности. Если распознаваемый текст плохо отделим от фона или он сильно пикселирован, то Tesseract скорее всего вернёт ошибочные результаты. Tesseract лучше всего подходит для конвейерной обработки документов, в которых изображения сканируются, обрабатываются цифровыми фильтрами, а затем к ним применяется оптическое распознавание символов.
Следует отметить, что Tesseract не является готовым решением для OCR, которое сможет работать во всех приложениях обработки изображений и компьютерного зрения. Для сложных частных случаев необходимо применить методы извлечения признаков, машинное обучение и искусственный интеллект.
Резюме
Если обрабатываемые изображения не будут содержать чёткого текста, Tesseract даст плохие результаты. В случае зашумлённых входных изображений, получить лучшую точность можно обучая пользовательскую модель машинного обучения.
Tesseract лучше всего подходит для ситуаций с изображениями высокого разрешения, где текст переднего плана чётко отделим от фона.
Источник: digitology.tech
Русские Блоги
Трансфер из
Tesseract, OCR (Оптическое распознавание символов, оптическое распознавание символов) с открытым исходным кодом, разработанный HP Labs, поддерживаемый Google Продолжайте совершенствовать, если команде это необходимо, вы также можете использовать его в качестве шаблона для разработки механизма распознавания, который соответствует вашим потребностям.
Далее мы установим Tesseract под Windows и осуществим простое преобразование и обучение:
Реализация Тессеракта
Общий процесс: установка Tesseract-> открыть командную строку-> создать целевой файл
Тессеракт установка
Загрузите установочный пакет tesseract-ocr-setup-3.02.02.exe. После успешной установки на соответствующем диске будет находиться папка Tesseract-OCR, как показано на рисунке.
Откройте командную строку
Откройте командную строку, введите tesseract и нажмите Enter, общий вид tesseract следующий:
Создать объектный файл
Сначала подготовьте файл изображения, например test.png
Переключите командную строку в каталог целевого файла изображения, например, мы конвертируем файл в test.png (файл изображения поддерживает несколько форматов), расположенный в C: Users Lian Desktop test, а затем введите его в командной строке
tesseract test.png output_1 –l eng
[Синтаксис]: база данных вывода tesseract imagename [-l lang] [-psm pagesegmode] [configfile…]
imagename — это имя целевого файла изображения, и необходимо добавить суффикс формата; outputbase — имя файла результата преобразования; lang — имя языка (вы можете увидеть языковой файл eng.traineddata, начинающийся с eng, в папке tessdata в Tesseract-OCR), если не l eng по умолчанию англ.
Откройте файл output_1.txt и найдите, что tesseract успешно преобразовал изображение в152408。
Приятно показать, что старый бренд тессеракт все еще очень силен! Но это все еще недостаточно точно, так есть ли способ улучшить точность распознавания символов тессерактом? Далее мы будем использовать вспомогательные средства обученияjTessBoxEditorПриходите на тренировочные образцы, чтобы улучшить нашу точность!
Тессеракт тренинг:
Общий процесс: установить jTessBoxEditor-> получить пример файла-> объединить файл примера-> создать файл BOX-> определить файл конфигурации символа-> исправить символ—> выполнить пакетный файл-> поместить сгенерированные обученные данные в tessdata
Установите jTessBoxEditor
Скачать jTessBoxEditor, адресhttps://sourceforge.net/projects/vietocr/files/jTessBoxEditor/; После распаковки получите jTessBoxEditor, потому что он разработан Java, поэтому мы должны убедиться, что установили JRE (среда выполнения Java, среда выполнения Java) перед запуском jTessBoxEditor.