Время прочтения: 9 мин.

По сравнению со старшими товарищами, 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.
FineReader:
САМАРСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ ИМЕНИ АКАДЕМИКА С.П. КОРОЛЕВА
Tesseract: не увидел текст.
EasyOCR:
«'сАмдрскии кациокдлькый',
'исследовапельский укиверсиле 5 окмудвелмкоспнк0P0л=84'»

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

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

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

Рисунок 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.

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.

Ссылки на используемые инструменты: FineReader, Tesseract, EasyOCR.