Как выбрать между Tesseract и OpenCV? [закрыто]

94

Недавно я наткнулся на Tesseract и OpenCV . Похоже, что Tesseract - это полноценный движок OCR, а OpenCV можно использовать в качестве основы для создания приложения / сервиса OCR.

Я пробовал использовать Tesseract на некоторых своих изображениях, и его точность кажется приличной. Позже я наткнулся на очень простой учебник по использованию OpenCV для OCR с использованием Python и был впечатлен. Через несколько минут я закончил обучение системы, и ее точность была хорошей. Но, конечно, такой подход означает, что мне нужно тщательно обучить мою систему, используя большой обучающий набор.

Мои конкретные вопросы следующие:

  • Как выбрать между Tesseract и OpenCV для создания собственного приложения OCR?
  • Для Tesseract доступны наборы обучающих данных для разных языков. Есть ли в OpenCV что-то подобное, чтобы мне не нужно было начинать с нуля, чтобы достичь OCR?
  • Какой вариант лучше для коммерческого приложения?

Какие-либо предложения?

Легенда
источник
8
Приведенные ниже ответы действительно хороши, но как человек, который работал с OCR, я могу сказать вам, что качество распознавания в Tesseract ниже ожиданий пользователя коммерческого приложения. Tesseract - это здорово, но OCR сложно - такие вещи, как онлайн-обучение или улучшения на лету, хммм ... все еще исследуются. Google, крупный спонсор TS в последнее время, решил создать свой собственный движок - OCROpus. И хотя он обещал открыть его исходный код, движок распознавания ядра еще не доступен - они опубликовали только фреймворк - это api для tesseract.
Сэм
3
@vasile: Это очень информативно. Я не знал об OCROpus. Спасибо. Не могли бы вы предложить альтернативы, если моя конечная цель - написать оптическое распознавание символов для визитных карточек (или, скажем, такую, которая считывает квитанции заправочных станций, как та, которую я указал : upload.wikimedia.org/wikipedia/en/3/34/… )? Я спрашиваю, потому что мне просто любопытно, какие многочисленные мобильные приложения используют для этого. Я не против делать OCR на стороне сервера. У меня возникло искушение использовать OpenCV после просмотра этой классной демонстрации: youtube.com/watch?v=OkcOfS1lTxs
Legend
6
Существует ряд коммерческих систем распознавания текста, просто погуглите, OCR accuracy testsи вы найдете несколько диаграмм. Что касается мобильных приложений, большинство из них используют тессеракт. Но если вы потрудитесь загрузить некоторые из них, вы увидите, что результаты немного отличаются от обещаний. Обычно они делают видео-демонстрацию в тщательно контролируемой среде и размещают ее на YouTube, но если вы просканируете страницу / рецепт / карточку / что угодно, вы получите забавные результаты.
Сэм
1
@vasile: Спасибо. Что-нибудь, чтобы занять меня сегодня вечером. Очень цените ваше время.
Legend

Ответы:

77
  • Tesseract - это движок OCR. Он используется, работает и финансируется Google специально для чтения текста с изображений, выполнения базовой сегментации документа и работы с конкретными входными данными (одно слово, строка, абзац, страница, ограниченные словари и т. Д.).

  • OpenCV, с другой стороны, представляет собой библиотеку компьютерного зрения, которая включает функции, позволяющие выполнять извлечение некоторых функций и классификацию данных. Вы можете создать простой сегментатор букв и классификатор, который выполняет базовое распознавание текста, но это не очень хороший механизм распознавания (я делал его раньше на Python с нуля. Это действительно неточно для ввода, который отличается от ваших данных обучения).

Если вы хотите получить общее представление о сложности распознавания текста, попробуйте OpenCV. Tesseract предназначен для реального распознавания текста.

Блендер
источник
3
Это зависит от ваших входных изображений. Тессеракт лучше всего работает, когда буквы четкие, выстроены в горизонтальную линию, разнесены, не соединены и идеально черно-белые. Я возился в сообществе DIY-сканирования / сохранения книг около года, а в свободное время работал над программным обеспечением, чтобы облегчить этот процесс. Лучшее программное обеспечение там (коммерческая или нет) для пост-обработки любых изображений с текстом является Scan Tailor . У него есть несколько параметров интерфейса командной строки, но если вы потратите некоторое время, чтобы увидеть, как он работает, это будет потрясающе.
Blender
2
Я немного поработал над исходным кодом Scan Tailor, и он не использует внутренне OpenCV, но многие из созданных алгоритмов можно очень легко переписать с помощью функций OpenCV. Если ваши изображения не деформированы и не ухудшены, вам просто нужно реализовать адаптивную бинаризацию и некоторое простое удаление пятен перед загрузкой изображения в Tesseract.
Blender
1
Что касается вашего вопроса, я просто вчера тестировал несколько случайных входных изображений. Я попробовал квитанцию ​​от заправочной станции: upload.wikimedia.org/wikipedia/en/3/34/… Он распознал 0как 8(в общей сложности 20 долларов США). Я признаю, что эту цифру даже мне было трудно расшифровать, но я не был уверен, что еще можно сделать, чтобы адаптировать Tesseract к этим ситуациям или, возможно, ввести обучающий компонент, если у меня будет активная база пользователей.
Legend
5
Tesseract обучен чтению определенных наборов шрифтов. Эти квадратные буквы не из их числа. Вам нужно будет представить Google жертвоприношение животных и попробовать обучить Tesseract самостоятельно: code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender
1
Кроме того, прежде чем приступить к написанию собственного механизма распознавания текста для чтения этих букв, не ожидайте, что он будет точным. Я написал один для автоматизации Колеса фортуны, и образцы изображений (скриншоты онлайн-игры) были в формате JPEG. Артефактов от сжатия JPEG было достаточно, чтобы испортить классификатор изображений, если я не предоставил около 10-20 образцов изображений каждого отдельного символа.
Blender
65

Я являюсь автором упомянутого вами учебника по распознаванию цифр, и я бы сказал, что это никоим образом не заменяет tesseract.

Tesseract - действительно хороший движок OCR, возможно, лучший движок OCR с открытым исходным кодом.

Упомянутый вами учебник - это всего лишь попытка понять наиболее простую работу OCR.

Итак, если вы ищете приложение OCR, я бы порекомендовал вам использовать OpenCV для предварительной обработки изображения, а затем применить механизм tesseract.

Абид Рахман К.
источник
1
+1 Спасибо. Прежде всего, спасибо за урок :) Это было действительно интересное чтение. Известны ли вам какие-либо ссылки / руководства по использованию OpenCV вместе с Tesseract? Не говоря уже о взаимодействии, а о типе преобразования изображения или предварительной обработки, которая должна быть сделана для повышения точности Tesseract?
Legend
2
Я просто хотел бы сказать, что хотя Tesseract - хороший движок OCR по сравнению с другими, он все еще довольно неточен, у меня было около 40% успеха в распознавании правильного текста. Надеюсь, через пару лет станет лучше.
GangstaGraham
4
@GangstaGraham Вам просто нужно обучить тессеракт, и вы сможете добиться лучших результатов за несколько часов или дней, а не лет. opensource.newmediaist.com/tesseract-training.html
valentt
1
Я использую PyTesseract для извлечения текста в реальном времени. Он отлично работает на ПК с Linux, но очень медленно в среде Raspberry Pi ... Есть ли способ установить облегченную версию? Например, обрабатывать только цифры и заглавные буквы английского алфавита?
Юрий Чернышов
9

Эти два могут дополнять друг друга. Если вы читали статью об OpenCV: https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

В нем подчеркивается, что «поскольку у HP была независимо разработанная технология анализа макета страницы, которая использовалась в продуктах (и, следовательно, не была выпущена для открытого исходного кода), Tesseract никогда не нуждался в собственном анализе макета страницы. Поэтому Tesseract предполагает, что его входные данные представляют собой двоичное изображение с определены дополнительные полигональные текстовые области ".

Этот тип задач может быть выполнен OpenCV, а полученное изображение передано в Tesseract. Вы можете найти образец кода этого типа в репозитории Git: https://github.com/Itseez/opencv_contrib/tree/master/modules/text/samples В примерах используются API Tesseract для преобразования изображения в текст.

user2957542
источник
3

OpenCV - это библиотека для резюме , используемая для анализа и обработки изображений в целом. Tesseract - это библиотека для OCR , которая представляет собой специализированное подмножество резюме, предназначенное для извлечения текста из изображений.

Из OpenCV.org

..... используется для обнаружения и распознавания лиц, идентификации объектов, классификации действий человека в видеороликах, отслеживания движений камеры, отслеживания движущихся объектов, извлечения трехмерных моделей объектов, создания трехмерных облаков точек из стереокамер, сшивания изображений для получения высокого разрешение изображения всей сцены, найти похожие изображения в базе данных изображений, удалить эффект красных глаз с изображений, снятых с использованием вспышки, следить за движениями глаз, распознавать пейзаж и устанавливать маркеры, чтобы наложить их на дополненную реальность и т. д.

Из Tesseract Github :

..... может использоваться напрямую или (для программистов) с помощью API для извлечения печатного, рукописного или напечатанного текста из изображений. Он поддерживает множество языков.

Анируддха Варма
источник