По сравнению со старшими товарищами, EasyOCR очень молодой проект, но с большими амбициями. В статье приводится сравнение качества работы, удобства работы, особенности установки и производительности трёх инструментов.

Одна из популярных задач в аудиторской практике – распознавание текста с документов. Казалось бы, инструменты для решения этой задачи давно известны, всё работает и ничего больше особо и не хочется: бесплатно и руками – Tesseract, платно и легко в использовании – FineReader.

Однако, недавняя статья удивила меня качеством работы и удобством использования инструмента EasyOCR. Разберёмся, насколько всё хорошо в сравнении с самыми популярными инструментами на примере нескольких задач и сравним удобство использования каждого инструмента.

ABBYY FineReader существует с 1993 года и, фактически, стал синонимом «распознавалки текста». Сама отечественная компания ABBYY, по некоторым данным, является лидером в области разработок инструментов интеллектуальной обработки текста. Проприетарная лицензия.

Tesseract разрабатывался Hewlett-Packard с 80-х, но на долгое время был заброшен, пока его не выкупил Google в 2006 году. На данный момент программа работает и продолжает развиваться. Свободно распространяется под лицензией Apache 2.0.

EasyOCR размещён на GitHub, по сведениям PyPI, версия 1.0 вышла 23.04.2020, проект активно развивается. Лицензия – Apache 2.0.

Кратко опишем процесс работы с каждым инструментом.

Для FineReader всё делается мышкой: установил, выбрал файл, нажал пару кнопок и получил результат. Инструмент Hot Folder позволяет создавать задачи по распознаванию с множеством параметров, например, самый банальный вариант: распознать все PDF в папке и для каждого записать текст в TXT с тем же названием. Причём, опять же, всё делается мышью, просто и понятно.

Для Tesseract примерный процесс: скачать Tesseract, установить pytesseract, понять, что Python не видит tesseract.exe, исправить, понять, что нет модели для русского языка в tessdata, скачать и кинуть куда надо. И, хотя, результаты работы местами оставляют желать лучшего и требуют дополнительных настроек, зато можно руками сделать инструмент для любой задачи распознавания. Самый простой вариант для получения текста:

import pytesseract
pytesseract.image_to_string(img, lang='rus+eng')

Для EasyOCR на Windows: установить torch и torchvision, установить EasyOCR, загрузить из Python модель нужного языка и использовать. Самый простой вариант для получения текста, разбитого по параграфам:

import easyocr
reader = easyocr.Reader(['ru', 'en'])
reader.readtext(img, detail=0, paragraph=True)

Далее представлены результаты работы инструментов. FineReader использовался на ПК с Ryzen 3200G, EasyOCR на ноутбуке с Core i3 4100m, Tesseract же запускался и там и там. Всё без видеоускорителей. Возьмём, в том числе, изображения из статьи. Все изображения в формате JPG.

Рисунок 1 — изображение 285х208.
Рисунок 1 — изображение 285х208.
FineReader:
САМАРСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ ИМЕНИ АКАДЕМИКА С.П. КОРОЛЕВА
Tesseract: не увидел текст.
EasyOCR:
«'сАмдрскии кациокдлькый',
'исследовапельский укиверсиле 5 окмудвелмкоспнк0P0л=84'»

Для того же изображения, что и выше, но в разрешении 1333х1000 результаты следующие:

FineReader:
САМАРСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ ИМЕНИ АКАДЕМИКА С.П. КОРОЛЁВА
Tesseract: снова не увидел текст. Видимо, для белого текста нужны дополнительные настройки.
EasyOCR:
['САМАРСкий НАционАльный',
 'исследовАтельский университет ИМЕНИ АКАДЕМИКАСП. Королёва',
 'r086"10=55',
 '8608',
 '']
Рисунок 2 – изображение попугайчика с наклонённым текстом.
Рисунок 2 – изображение попугайчика с наклонённым текстом.

Текст на изображении попугайчика с наклонённым текстом был успешно распознан только EasyOCR.

Рисунок 3 – изображение с плохим освещением, расфокусировкой, наклоном.
Рисунок 3 – изображение с плохим освещением, расфокусировкой, наклоном.
FineReader:
Bias (Сдвиг цветов спектра областей к тому или ииожуп диапазона шума);	'
g Edge (Ширина перепадов между светлыми и темными участка^
фильтр Lens Effects Focus
Фильтр Lens Effects Focus (Линзовые эффекты: фокусировка) поз| имитировать эффекты расфокусировки изображения или конечной г; резкости снимка, приводящей к тому, что в фокусе оказываются объекты на определен on лдыюсти от камеры. Для воспроизведения фекта расфокуепро в <	использует информацию об удалении
тов от съемочн	>си в/-буфере сцены.	'Яа
Для настройки	.к и служит окно диалога Lens Effects
(Линзовые эффск	• появляющееся после щелчка на кн
Setup Н..строп к	ciioia добавления или редактирования фг
НИЯ д рос МО гром эффекта, сохранением и загрузке энного окна аналогичны соответствующим эле]
.с окна диалога Lens Effects Flare (Линзовые
пжчЬокусировки, выполните в окне

Tesseract:

p Lens Effects Focus\n\nmp Lens Effects Focus\n\nBrosare эффек\nи снимка\nKTBI на опре\nса расфокус\nот съемоч\n\n \n\nокна J\n\n(Линзовые эффекты: фоку@\nировки изображения HIM\nтому, что в фокусе Okada\nru от камеры. Для BOCHP\nyer информацию об У\n1 в 7-буфере сцены\n\nь\nлужит окно диалога\nзляющееся после\n\n„вления или редактирс\n\n›уфекта, сохраненнО\n\nнотром\n\nго окна ана\nдиалога Lens Effects\n\x0c
OasyOCR:
["цветов спектра областей к Tonу H111 11110 Bins (Сдвиг днапазона шума) ; темными участками ). Edge (Ширина перепадов между светлыми Фильтр Lens Effects Focus эффскты :  фокусировка) позволяся Фильтр   Lens Effects Focus (Линзовыс изображсния или конечной глубины имитировать эффекты расфокусировки фокусс оказываются Толъ0 снимка , приводящей ToMу '10 резкостк от кямеры   Шля воспроизведения эф объекты ня определенной дальности используст информацию об удалении объек- ректа расфокуспровки фильр съемочной камеры , хранящуюся Z-буфере сцены. TOB Lens Effects Focus фокусировки служит окно диалога Для настройки фильтра появляющееся после щелчка на кнопке Линзовые эффекты: фокусироока добявления Цлк редактирования фильтра Sctup ( Настройка) 6 окне дналога IPИC  15.35). сохранением загрузкой I(;1- Элементы управления просмотром эффикна сораетствующим элементам окна аналогичны боре   парамстров ланного Lens Effects Flare (Линзовые эффекты: Bs !@ окна дналога DSCCу отрснного Окики ) выполните окне диалога Dens куспровки , 8"]

Для чистоты эксперимента, для того же изображения, что и выше, но c использованием инструмента из статьи результаты следующие:

FineReader:

rj Bias (Сдвиг цветов спектра областей к тому I0IVMH диапазона шума):
g Edge (Ширина перепадов между светлыми и темными \часткаЦ^^|
фильтр Lens Effects Focus
фильтр Lens Effects Focus (Линзовые эффекты: фокусировка) псц имитировать эффек	фовки и юбражения или конечной глуб!
резкости снимка, приво описи к тому, что в фокусе оказываются тол! объекты на опре й	юеш oi камеры. Для воспроизведения эф
фекта расфокхен?	ii.iyei информацию об удалении объек
тов от съемочной к \	о. юсн в Z-буфсре сцены.
Для настройки ф.	ки служит окно диалога I>ens Effects ft
(Линзовь. hJxJk ч	- появляющееся после щелчка на кно|
Setup
(рис 1
Эйсме
I $
Н	бавления или редактирования филы
5.35)
<ты . v	щюм >ффекта, сохранением и загрузкой
Ммепов данною окна аналогичны соответствующим эле!
ше окна диалога Lens Effects Flare (Линзовые
трен н<
Ь»
кчеировки. выполните в окне диалога
JlfllfT

Tesseract:

Lens Effects Focus\n\nр Lens Effects Focus (Линзовые эффекты: фокуб\nгровать эффек ›овки _ изображения HIM\nи CHUMK: тому, что в фокусе Okt\nти от камеры, Для Bom\npactoxyeup льзует информацию об\n\nот Chemo в 7-буфере сцены\n\nKUT окно диалога\nнвляющееся после,\n›бавления или редак!\n\nготром эффекта, сохранени\n\n \n\nъфаокт пасфокусировки,\n\x0c

EasyOCR:

['Bor$ Сдвиг цветов спсктра областей к Tоку 11."111 ;111()81 лнапазона шума  ; Edge ( Ширина перспадов между свстлыми # темными участками )',
 'Фильтр Lens Effects Focus Фильтр   Lens Effects Focus (Лннзовыс эораректы ; фокуснровка ) "10380) имитировать эффекты расфокусировки изображсния или консчной глубины резкостк сhнмкя привочяшей Tony \'110 фокусс оказываются Т(1ьк0 объскты Ня опрелеленнон пктьн1061\'11 Oт\' кямуры  Для поспронзведення 3 Фекта расфокуснровки Ффильр иепользуст информацию об удалении объек TOв от съсмочной камерыраняшуюся Z-буфере сцсны Яля нястройкн Фильр фокусиронкн служнт Окiо дналога Lens Effects Rocus Пинзовые эффекты  фокуснровка) полнляющееся послс щелчка Н8 кк0п Setup (Настройка) оkне лналога добянлення нли редактировання фильтра Iркс15 35) Элеуснты упракления просмотром эффекта, сохраненнем загрузкой на- борд окна аналогнчны соответствующим элеке парямстров ланного расечотренного Bbl0 окна диалога Lens Effects Flare (Линзовые эффектые Чкы ) окуснровкн, выпочннте окне дналога']
Рисунок 4 – Изображение, взятое из репозитория Tesseract.
Рисунок 4 – Изображение, взятое из репозитория Tesseract.

FineReader:

This is a lot of 12 point text to test the ocr code and see if it works on all types of file format.
The quick brown dog jumped over the lazy fox. The quick brown dog jumped over the lazy fox. The quick brown dog jumped over the lazy fox. The quick brown dog jumped over the lazy fox.

Tesseract:

This is a lot of 12 point text to test the\nocr code and see if it works on all types\nof file format.\n\nThe quick brown dog jumped over the\nlazy fox. The quick brown dog jumped\nover the lazy fox. The quick brown dog\njumped over the lazy fox. The quick\nbrown dog jumped over the lazy fox.\n\x0c

EasyOCR:

['This is a lot of 12 point text to test the ocr code and see if it works on all types of file format The quick brown dog jumped over the lazy fox The quick brown dog jumped over the lazy fox. The quick brown dog jumped over the lazy fox The quick brown dog jumped over the lazy fox']

При этом, время работы FineReader для 6 изображений, согласно логу, составило 13 секунд, Tesseract в среднем работает 0,5-3 секунды для изображения вне зависимости от платформы для запуска, а EasyOCR даже на последнем изображении работал почти 20 секунд! При наличии графического ускорителя с поддержкой CUDA время работы должно сократиться, однако, подобные требования делают использование EasyOCR на стандартном офисном «железе» практически невозможным для большинства задач.

Также, исходя из результатов, можно сделать вывод, что качество распознавания символов EasyOCR может посоревноваться с FineReader, а иногда и превосходить его, однако, в разбиении текста на параграфы, как FineReader, так и Tesseract всё ещё лучше. Это можно наблюдать в последнем примере, который является простейшим из всех: каждый инструмент верно распознал сам текст, но, в то время как FineReader  разбил текст на параграфы, а Tesseract позволяет даже увидеть где были переносы на новую строку внутри параграфа (‘\n’ и ‘\n\n’ в тексте), EasyOCR вернул результатом одну строку, в которой даже некоторые точки были потеряны.

Таким образом, по результатам сравнения трёх инструментов, можно сделать следующий вывод: EasyOCR, как инструмент распознавания текста обладает большим потенциалом и уже сейчас, при наличии мощной платформы для запуска, может составить конкуренцию FineReader и Tesseract.

Ссылки на используемые инструменты: FineReaderTesseractEasyOCR.

Комментарии (18)


  1. Daar
    19.08.2021 08:59

    Спасибо вам за ваш труд. У меня тут возникла подобная задача, теперь хоть будет меньше граблей на пути :)


    1. NewTechAudit Автор
      20.08.2021 21:52

      Спасибо


  1. MixaSg
    19.08.2021 09:13

    Навряд ли будет откровением то, что для удобоваримой работы tesseract необходимо предварительно готовить изображение - переводить в grayscale, потом в черно-белое (добиваясь черных букв на белом фоне). При необходимости, подгоняя под текст, можно сделать свой словарь или дополнить словарь требуемого языка и определить таблицу символов.


  1. nerudo
    19.08.2021 09:47
    +2

    Помню пользовался файнридером во времена раннего неолита — все было просто и удобно, и довольно качественно. С год назад опять понадобилось, озадачился и с удивлением обнаружил, что за столько лет ничего толкового так и не появилось, корячился с тессерактом.


    1. sexcalibur
      19.08.2021 20:16

      В общем-то, сейчас такой период, что все, кто не хочет ковырять Tesseract, свои OCR делают, благо ML доступен как никогда - взял MNIST (CoMNIST), обучил на нём модель, придумал систему для разбиения на буквы/слова и получил более-менее рабочий инструмент. Если добавить скрытую марковскую модель для угадывания следующих слов и проверку орфографии, может уже быть совсем хорошо. Некоторые вон, как автор EasyOCR даже выкладывают свои работы.


  1. kryvichh
    19.08.2021 10:08
    +2

    Итог: при всём богатстве выбора, выбора так и не появилось.

    P.S. Заголовок статьи исправьте, плохо распознался.


  1. MikhailZakharov
    19.08.2021 10:26

    Если рассматривать чисто OCR движки, то выбор больше, чем в списке на обзоре. Качество распознавания проверяется не только на разных типах картинок, но и на разных языках, включая смесь языков (например, английский - русский) в тексте. Так же проверка делается на таблицах, подписях к картинкам. Отдельной строкой тестов идут искажения: перспектива, расфокус, неоднородный фон.

    При анализе качества надо учитывать конечные цели. Если просто вытащить подпись - это один набор требований. Если распознать документ - то другой. Например, в документе могут быть таблицы, которые переходят со страницы на страницу.


  1. FForth
    19.08.2021 10:39

    FineReader используется в сервисе WebArxive
    — можно посмотреть множество результатов работы программы FineReader на загруженном в WebArxive контенте или на своих примерах добавив их в нём.

    P.S. Интересно, а FineReader уже научился правильно сохранять общий формат вёрстки страницы, например в формат Word, PDF как в оригинале распознаваемой страницы?


    1. NewTechAudit Автор
      19.08.2021 14:25

      Да, FineReader 14 точно умеет сохранять форматированный текст в Word и сохранять в PDF с возможностью поиска.


  1. wyfinger
    19.08.2021 13:54

    В Adobe Acrobat тоже есть функция распознавания текста, работает иногда прямо неплохо.


  1. e-zig
    19.08.2021 14:22

    Давно не пользовался ocr, но у меня сложилось (как оказалось ложное) впечатление, что с нступившей эпохой господства нейросетей они давно сделали ocr доступным всем и каждому, а finereader ушел в историю. А тут на тебе. Или всетаки есть облака, которые распознают лучше рассмотренных программ?


    1. NewTechAudit Автор
      19.08.2021 15:16

      Скорее, мало кто хочет делать хороший, комплексный OCR на нейросетях, в котором будут системы предсказания следующего вероятного слова, проверка орфографии и т.д. А FineReader и Tesseract, конечно же сложнее, чем просто обученные на датасете MNIST классификаторы, в них, вероятно, присутствуют скрытые марковские модели и многое другое. То есть, EasyOCR и другие новые системы на нейросетях могут отлично распознавать текст, но со структурой документов у них пока проблемы, что видно в последнем примере.


    1. darkms5
      19.08.2021 18:12

      FineReader вроде тоже нейросети использует в свежих версиях для некоторых языков, по крайней мере так они писали в release notes.


      1. NewTechAudit Автор
        20.08.2021 12:52

        Скорее всего, так и есть, FineReader - лидер рынка и определённо, будет использовать лучшие инструменты.


  1. vagon333
    19.08.2021 16:30

    У Tesseract были сложности со структурированными данными.

    Есть большой сектор в бизнесе по перегонке PDF форм в данные.
    Интересно было-бы прочитать опыт со структурированными данными.
    Пока ABBYY FC наиболее рабочее решение.


    1. NewTechAudit Автор
      20.08.2021 21:52

      Ответили в лс


  1. darkms5
    19.08.2021 18:25

    Мои коллеги недавно решили внедрять Spark OCR плагин от John Snow Labs. Если кто-нибудь пробовал, поделитесь пожалуйста опытом - как оно?

    Раньше использовали FineReader Server (14), но по результатам тестирования на реальных документах Spark плагин выдавал более качественные результаты (меньше и менее критические ошибки) при схожей производительности и заметно более выгодном ценнике на больших объёмах данных.


  1. splasher
    19.08.2021 20:16
    +2

    Несколько странное сравнение, но все равно интересно - спасибо. Если уж рассматривать коммерческие движки, коим является ABBYY, то сюда стоило бы включить решения от Гугл (Cloud Vision) и Amazon Textract...