Як вибрати між Tesseract та OpenCV? [зачинено]


94

Нещодавно я зіткнувся з Tesseract та OpenCV . Схоже, Tesseract - це повноцінний механізм OCR, і OpenCV може бути використаний як основа для створення програми / послуги OCR.

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

Мої конкретні запитання такі:

  • Як вибрати між Tesseract та використанням OpenCV для створення власної програми OCR?
  • Для Tesseract доступні набори навчальних даних для різних мов. Чи є у OpenCV щось подібне, щоб мені не довелося починати грунтову роботу для досягнення OCR?
  • Який із них краще для комерційного застосування?

Будь-які пропозиції?


8
Наведені нижче відповіді дійсно чудові, але, як той, хто працював з OCR, я можу сказати вам, що якість розпізнавання в Tesseract нижче очікувань комерційного користувача програми. Tesseract - це чудово, але OCR - це складно - такі речі, як онлайн-тренінги або вдосконалення на льоту - це hmmm ... все ще дослідження. Google, великий спонсор, який останнім часом займає TS, вирішив створити власний двигун - OCROpus. І хоча він пообіцяв відкрити його джерело, движок розпізнавання ядер ще не доступний - вони лише опублікували фреймворк - це api для tesseract.
Сем

3
@vasile: Це дуже інформативно. Я не знав про OCROpus. Дякую. Чи могли б ви запропонувати альтернативні варіанти, якщо моєю кінцевою метою буде сказати написати візитну картку OCR (або, скажімо, ту, яка читає квитанції АЗС, подібну до тієї, яку я зв’язав: upload.wikimedia.org/wikipedia/en/3/34/… )? Я запитую, бо мені просто цікаво, що численні мобільні програми використовують для цього. Я не проти зробити OCR на стороні сервера. У мене виник спокуса використовувати OpenCV, побачивши цю круту демонстрацію: youtube.com/watch?v=OkcOfS1lTxs
Легенда

6
Існує ряд комерційних механізмів OCR, просто погугл. OCR accuracy testsВи знайдете деякі діаграми. А якщо говорити про мобільні програми, то більшість із них використовують tesseract. Але якщо ви потрудитесь завантажити деякі з них, ви побачите, що результати дещо відрізняються від обіцянок. Зазвичай вони роблять відеодемонстрацію в ретельно контрольованому середовищі та публікують її на YouTube, але в дикій природі, якщо ви відскануєте сторінку / рецепт / картку / все, ви отримаєте кумедні результати.
Сем

1
@vasile: Дякую. Щось, щоб зайняти мене сьогодні ввечері. Дуже цінуємо свій час.
Легенда

Відповіді:


77
  • Tesseract - це механізм OCR. Він використовується, працює і фінансується Google спеціально для зчитування тексту із зображень, виконання базової сегментації документів та оперування певними введеннями зображень (окремим словом, рядком, абзацом, сторінкою, обмеженими словниками тощо).

  • З іншого боку, OpenCV - це бібліотека комп'ютерного зору, яка включає функції, що дозволяють виконувати деякі функції вилучення та класифікації даних. Ви можете створити простий сегментатор літер та класифікатор, який виконує базовий OCR, але це не дуже хороший механізм OCR (я вже робив його в Python з нуля. Це дійсно неточно для введення, яке відхиляється від ваших навчальних даних).

Якщо ви хочете отримати базове розуміння того, наскільки важким є OCR, спробуйте OpenCV. Tesseract - це справжнє OCR.


3
Це залежить від введених зображень. Tesseract найкраще працює, коли букви чіткі, у горизонтальній лінії, рознесені, не пов’язані та ідеально чорно-білі. Близько року я працював у спільноті сканування / збереження книг “Зроби сам” і у вільний час працював над програмним забезпеченням, щоб полегшити процес. Найкраще програмне забезпечення там (комерційна чи ні) для пост-обробки будь-яких зображень з текстом є Scan Tailor . У ньому є кілька варіантів CLI, але якщо ви витратите трохи часу, щоб побачити, як це працює, це досить дивно.
Blender

2
Я трохи працював над вихідним кодом Scan Tailor, і він не використовує OpenCV внутрішньо, але багато створених алгоритмів можна дуже легко переписати за допомогою функцій OpenCV. Якщо ваші зображення не деформовані і не погіршуються, вам дійсно потрібно просто застосувати адаптивну бінаризацію та кілька простих депеклів перед подачею вашого зображення в Tesseract.
Blender

1
Щодо вашого запитання, я вчора просто тестував кілька випадкових вхідних зображень. Я спробував отримання квитанції на автозаправній станції: upload.wikimedia.org/wikipedia/en/3/34/… Він визнав 0як 8(загалом 20,00 доларів США). Я визнаю, що цифру було важко навіть для мене розшифрувати, але я не був впевнений, що ще можна зробити, щоб адаптувати Tesseract до цих ситуацій або, можливо, ввести навчальний компонент, якщо я буду мати активну базу користувачів.
Легенда

5
Tesseract навчений читати певні набори шрифтів. Ці блокові літери - не один з них. Вам доведеться принести в жертву тваринам Google і спробувати навчити Тессеракт самостійно: code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender

1
Крім того, перед тим, як приступити до написання власного механізму OCR для читання цих листів, не сподівайтесь, що він буде точним. Я написав його для автоматизації Колеса Фортуни, а зразки зображень (скріншоти онлайн-гри) були JPEG. Артефактів від стиснення JPEG було достатньо, щоб зіпсувати класифікатор зображень, якщо я не надав близько 10-20 зразків зображень кожного окремого символу.
Blender

65

Я є автором того підручника з розпізнавання цифр, про який ви згадали, і я б сказав, що це жодним чином не замінить tesseract.

Tesseract - справді хороший механізм розпізнавання текстів, можливо, найкращий механізм розпізнавання текстів OpenSource.

Підручник, про який ви згадали, - це лише спроба зрозуміти найбільш просту роботу OCR.

Отже, якщо ви шукаєте програму OCR, я рекомендую вам використовувати OpenCV для попередньої обробки зображення, а потім застосувати механізм tesseract.


1
+1 Дякую. Перш за все, дякую за підручник :) Це було справді цікаве читання. Чи знаєте ви про будь-які посилання / навчальні посібники з використання OpenCV разом із Tesseract? Не говорячи про взаємодію, а про тип перетворення зображень або попередню обробку, яку потрібно зробити для підвищення точності Tesseract?
Легенда

2
Я хотів би лише сказати, що, хоча Tesseract - це хороший механізм розпізнавання тексту в порівнянні з іншими, він все ще досить неточний, я мав близько 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 для перетворення зображення в текст.


3

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

З OpenCV.org

..... використовується для виявлення та розпізнавання облич, ідентифікації об'єктів, класифікації людських дій у відео, відстеження рухів камери, відстеження рухомих об'єктів, вилучення 3D-моделей об'єктів, створення 3D-хмар точок зі стереокамер, зшивання зображень для отримання високого роздільна здатність зображення цілої сцени, знайти подібні зображення з бази даних зображень, видалити червоні очі із зображень, зроблених за допомогою спалаху, стежити за рухами очей, розпізнавати декорації та встановлювати маркери, щоб накласти їх на доповнену реальність тощо.

Від Tesseract Github :

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.