Як зробити OCR з командного рядка Linux за допомогою Tesseract

Ви можете витягти текст із зображень у командному рядку Linux за допомогою механізму OCR Tesseract. Він швидкий, точний і працює приблизно на 100 мовах. Ось як це використовувати.

Оптичне розпізнавання символів

Оптичне розпізнавання символів (OCR) — це можливість переглядати та знаходити слова на зображенні, а потім витягувати їх як текст, який можна редагувати. Це просте завдання для людей дуже важко виконати для комп’ютерів. Перші спроби були, м’яко кажучи, громіздкими. Комп’ютери часто плутали, якщо шрифт або розмір не подобалися програмному забезпеченню розпізнавання.

Тим не менш, піонери в цій галузі все ще користувалися великою повагою. Якщо ви втратили електронну копію документа, але все ще маєте друковану версію, OCR може повторно створити електронну версію, яку можна редагувати. Навіть якщо результати не були на 100 відсотків точними, це все одно чудово заощадило час.

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

Відтоді справи значно покращилися. Додаток Tesseract OCR, написаний Hewlett Packard, започаткований у 1980-х роках як комерційний додаток. Він був відкритий у 2005 році, і зараз він підтримується Google. Він має багатомовні можливості, вважається однією з найточніших доступних систем OCR, і ви можете використовувати його безкоштовно.

Встановлення Tesseract OCR

Щоб встановити Tesseract OCR на Ubuntu, скористайтеся цією командою:

sudo apt-get install tesseract-ocr

У Fedora команда:

sudo dnf install tesseract

На Manjaro вам потрібно ввести:

sudo pacman -Syu tesseract

Використання Tesseract OCR

Ми збираємося поставити ряд проблем для Tesseract OCR. Наше перше зображення, яке містить текст, є витягом із Рекламної заяви 63 Загальні положення про захист даних. Давайте подивимося, чи зможе OCR прочитати це (і не спати).

  Як налаштувати робоче середовище Deepin на Arch Linux

Це складне зображення, тому що кожне речення починається слабким надрядковим номером, що є типовим у законодавчих документах.

Нам потрібно надати команді тессеракту деяку інформацію, зокрема:

Ім’я файлу зображення, яке ми хочемо обробити.
Ім’я текстового файлу, який він створить для зберігання витягненого тексту. Нам не потрібно надавати розширення файлу (це завжди буде .txt). Якщо файл з таким іменем уже існує, він буде перезаписаний.
Ми можемо використовувати параметр –dpi, щоб сказати тессеракту, що саме точок на дюйм (dpi) роздільна здатність зображення. Якщо ми не надамо значення dpi, tesseract спробує це визначити.

Наш файл зображення має назву “recital-63.png”, а його роздільна здатність становить 150 dpi. Ми збираємося створити з нього текстовий файл під назвою «recital.txt».

Наша команда виглядає так:

tesseract recital-63.png recital --dpi 150

Результати дуже хороші. Єдина проблема — це верхні індекси — вони були занадто слабкі, щоб їх правильно прочитати. Для отримання хороших результатів життєво важливою є якісне зображення.

Tesseract інтерпретував номери надрядкового рядка як лапки (“) і символи градуса (°), але фактичний текст був витягнутий ідеально (права сторона зображення мала бути обрізана, щоб поміститися тут).

Кінцевим символом є байт із шістнадцятковим значенням 0x0C, що є поверненням каретки.

Нижче наведено інше зображення з текстом різного розміру, напівжирним та курсивом.

Ім’я цього файлу – «bold-italic.png». Ми хочемо створити текстовий файл під назвою «bold.txt», тому наша команда:

tesseract bold-italic.png bold --dpi 150

Цей не створив жодних проблем, і текст витягнуто ідеально.

Використання різних мов

Підтримка Tesseract OCR близько 100 мов. Щоб використовувати мову, спочатку її потрібно встановити. Коли ви знайдете у списку мову, яку хочете використовувати, зверніть увагу на її абревіатуру. Ми збираємося встановити підтримку для валлійської мови. Його абревіатура — «cym», що скорочується від «Cymru», що означає валлійська мова.

  Як відновити втрачені дані в Linux

Інсталяційний пакет називається «tesseract-ocr-» з абревіатурою мови в кінці. Щоб встановити файл валлійської мови в Ubuntu, ми будемо використовувати:

sudo apt-get install tesseract-ocr-cym

Зображення з текстом нижче. Це перший куплет національного гімну Уельсу.

Давайте подивимося, чи витримає Tesseract OCR. Ми будемо використовувати параметр -l (мова), щоб дати тессеракту мову, якою ми хочемо працювати:

tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150

tesseract відмінно справляється, як показано у витяганому тексті нижче. Да йон, Tesseract OCR.

Якщо ваш документ містить дві або більше мов (наприклад, валлійсько-англійський словник), ви можете використовувати знак плюс (+), щоб повідомити teseract додати іншу мову, наприклад:

tesseract image.png textfile -l eng+cym+fra

Використання Tesseract OCR з PDF-файлами

Команда tesseract призначена для роботи з файлами зображень, але вона не може читати PDF-файли. Однак, якщо вам потрібно витягти текст з PDF-файлу, ви можете спочатку скористатися іншою утилітою для створення набору зображень. Одне зображення представлятиме одну сторінку PDF-файлу.

Потрібна вам утиліта pdftppm вже має бути встановлено на вашому комп’ютері Linux. PDF-файл, який ми будемо використовувати для нашого прикладу, є копією основоположної статті Алана Тьюринга про штучний інтелект «Обчислювальна техніка та інтелект».

PDF титульної сторінки

Ми використовуємо параметр -png, щоб вказати, що ми хочемо створювати файли PNG. Ім’я файлу нашого PDF-файлу «turing.pdf». Ми будемо називати наші файли зображень «turing-01.png», «turing-02.png» тощо:

pdftoppm -png turing.pdf turing

Щоб запустити тессеракт для кожного файлу зображення за допомогою однієї команди, нам потрібно використовувати a цикл for. Для кожного з наших файлів «turing-nn.png» ми запускаємо teseract і створюємо текстовий файл під назвою «text-» плюс «turing-nn» як частину назви файлу зображення:

for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;

for i in turing-??.png;  зробити тессеракт

Щоб об’єднати всі текстові файли в один, ми можемо використовувати cat:

cat text-turing* > complete.txt

cat text-turing* > complete.txt у вікні терміналу».  width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<div style=

Отже, як це вдалося? Дуже добре, як ви можете побачити нижче. Однак перша сторінка виглядає досить складною. Він має різні стилі та розміри тексту, а також оздоблення. На правому краю сторінки також є вертикальний «водяний знак».

Однак вихідний текст близький до оригіналу. Очевидно, форматування було втрачено, але текст правильний.

Вертикальний водяний знак був транскрибований як рядок тарабарщини внизу сторінки. Текст був занадто малим, щоб його точно прочитав тессеракт, але його було б досить легко знайти та видалити. Найгіршим результатом були б випадкові символи в кінці кожного рядка.

Цікаво, що окремі літери на початку списку запитань і відповідей на другій сторінці були проігноровані. Розділ із PDF-файлу показано нижче.

Як ви можете бачити нижче, питання залишаються, але «Q» і «A» на початку кожного рядка були втрачені.

Діаграми також не будуть правильно транскрибуватися. Давайте подивимося, що відбувається, коли ми намагаємося витягти наведений нижче з PDF-файлу Тьюринга.

Діаграма з

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

Знову ж таки, тессеракт боровся з малим розміром індексів, і вони були відтворені неправильно.

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

Гарне рішення, коли воно вам потрібно

OCR — це не те, що вам потрібно буде використовувати щодня. Однак, коли виникне така потреба, приємно знати, що у вашому розпорядженні є один з найкращих механізмів OCR.