Витягування текстової інформації з графічних зображень у середовищі Linux можна здійснити за допомогою технології оптичного розпізнавання символів (OCR), зокрема, використовуючи Tesseract. Цей інструмент відзначається швидкістю, точністю та підтримкою близько 100 мов. Розглянемо, як його застосовувати.
Оптичне розпізнавання тексту
Оптичне розпізнавання тексту (OCR) – це технологія, що дозволяє ідентифікувати текстові елементи на зображеннях і перетворювати їх у редагований текстовий формат. Для людського ока це досить просте завдання, але для комп’ютерів воно довгий час було досить складним. Перші спроби реалізації цієї технології часто виявлялися невдалими, оскільки системи розпізнавання погано справлялися зі зміною шрифтів та розмірів символів.
Проте першопрохідці у цій сфері заслуговують на повагу. У випадку втрати електронної копії документа, наявність його друкованої версії дозволяє відновити його цифрову форму за допомогою OCR. Навіть якщо розпізнавання не було бездоганним, це значно скорочувало час, необхідний для створення електронної версії.
Коригування помилок вручну дозволяло отримати необхідний документ. Недоліки програм OCR були зрозумілі користувачам, оскільки складність задачі була очевидна. Крім того, це було значно швидше, ніж повне перенабирання тексту.
З часом технології OCR досягли значних успіхів. Програма Tesseract OCR, розроблена Hewlett Packard і започаткована в 1980-х як комерційний продукт, була відкрита у 2005 році. Зараз її підтримкою займається Google. Tesseract має багатомовну підтримку, вважається однією з найточніших систем 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 розпізнати текст (і не втратити його структуру).
Це зображення є досить складним через наявність надрядкових номерів на початку кожного речення, що є типовим для законодавчих документів.
Для ефективної роботи з Tesseract необхідно вказати таку інформацію:
- Назву файлу зображення, який потрібно обробити.
- Назву текстового файлу, куди буде збережено розпізнаний текст. Розширення файлу (.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” – валлійська назва країни).
Для встановлення пакету необхідна назва “tesseract-ocr-“, до якої додається абревіатура мови. У випадку Ubuntu, для встановлення валлійської мови команда буде виглядати так:
sudo apt-get install tesseract-ocr-cym
Зображення нижче містить перший куплет національного гімну Уельсу.
Давайте перевіримо, як Tesseract OCR впорається із цим текстом. Використаємо параметр -l (мова), щоб вказати Tesseract, якою мовою необхідно працювати:
tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150
Tesseract чудово впорався із завданням, як видно з результату. Так, Tesseract OCR — це дійсно потужний інструмент.
Якщо документ містить текст двома або більше мовами (наприклад, валлійсько-англійський словник), можна використовувати знак плюс (+), щоб вказати Tesseract необхідні мови, наприклад:
tesseract image.png textfile -l eng+cym+fra
Використання Tesseract OCR з PDF-файлами
Команда Tesseract розроблена для роботи з файлами зображень, а не з PDF. Однак, для вилучення тексту з PDF-файлу можна скористатися іншою утилітою для конвертації сторінок PDF у набір зображень. Кожне зображення буде представляти окрему сторінку PDF-файлу.
Необхідна утиліта pdftoppm зазвичай вже встановлена в Linux. Для прикладу ми скористаємося копією основоположної статті Алана Тюрінга про штучний інтелект “Обчислювальна техніка та інтелект”.
Використовуючи параметр -png, ми вказуємо, що хочемо створити файли PNG. Наш PDF-файл має назву “turing.pdf”. Зображення будуть називатися “turing-01.png”, “turing-02.png” і так далі:
pdftoppm -png turing.pdf turing
Щоб запустити Tesseract для кожного зображення за допомогою однієї команди, ми скористаємося циклом for. Для кожного файлу “turing-nn.png” буде запущено Tesseract і створено текстовий файл з назвою “text-” плюс “turing-nn”, що є частиною імені файлу зображення:
for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;
Щоб об’єднати всі текстові файли в один, скористаємося командою cat:
cat text-turing* > complete.txt
Незважаючи на це, отриманий текст є досить близьким до оригіналу. Звичайно, форматування було втрачено, але сам текст розпізнано правильно.
Вертикальний водяний знак був транскрибований як рядок незрозумілих символів внизу сторінки. Текст був занадто малим для точного розпізнавання, але його можна легко ідентифікувати і видалити. Найгіршим результатом були б випадкові символи в кінці кожного рядка.
Цікаво, що окремі літери на початку списку питань та відповідей на другій сторінці були проігноровані. Нижче показано фрагмент з PDF-файлу.
Як видно нижче, питання розпізнано, але “Q” та “A” на початку кожного рядка було втрачено.
Діаграми також не будуть правильно транскрибовані. Давайте розглянемо, що станеться при спробі вилучення діаграми з PDF-файлу Тюрінга.
Як бачимо нижче, символи були розпізнані, але формат діаграми було втрачено.
Знову ж таки, Tesseract не впорався з розпізнаванням малих індексів і відтворив їх невірно.
Справедливості заради, це все-таки непоганий результат. Можливо, не вдалося витягнути ідеальний текст, але цей приклад був навмисно обраний, щоб показати певні проблеми.
Ефективне рішення в потрібний момент
OCR не є інструментом, який потрібен для щоденного використання. Однак, коли виникає необхідність, важливо знати, що один з найкращих інструментів OCR завжди є у вашому розпорядженні.