Как сделать OCR из командной строки Linux с помощью Tesseract
Опубликовано: 2022-01-29Вы можете извлекать текст из изображений в командной строке Linux, используя механизм распознавания текста Tesseract. Это быстро, точно и работает примерно на 100 языках. Вот как это использовать.
Оптическое распознавание символов
Оптическое распознавание символов (OCR) — это возможность просматривать и находить слова на изображении, а затем извлекать их в виде редактируемого текста. Эта простая задача для людей очень сложна для компьютеров. Первые попытки были, мягко говоря, неуклюжими. Компьютеры часто сбивались с толку, если шрифт или размер не нравились программному обеспечению OCR.
Тем не менее пионеры в этой области по-прежнему пользовались большим уважением. Если вы потеряли электронную копию документа, но сохранили печатную версию, OCR может воссоздать электронную редактируемую версию. Даже если результаты не были точными на 100 %, это все равно значительно экономило время.
При некоторой ручной очистке вы получите свой документ обратно. Люди прощали сделанные им ошибки, потому что понимали сложность задачи, стоящей перед пакетом OCR. Кроме того, это было лучше, чем перепечатывать весь документ.
С тех пор дела значительно улучшились. Приложение Tesseract OCR, написанное Hewlett Packard, началось в 1980-х годах как коммерческое приложение. Он был открыт в 2005 году и теперь поддерживается Google. Он поддерживает несколько языков, считается одной из самых точных доступных систем распознавания текста, и вы можете использовать его бесплатно.
Установка Tesseract OCR
Чтобы установить Tesseract OCR в Ubuntu, используйте эту команду:
sudo apt-get установить tesseract-ocr
В Fedora команда такая:
sudo dnf установить тессеракт
На Manjaro вам нужно ввести:
sudo pacman -Сью тессеракт
Использование Tesseract OCR
Мы собираемся поставить ряд задач перед Tesseract OCR. Наше первое изображение, содержащее текст, — это выдержка из Декларации 63 Общих правил защиты данных. Посмотрим, сможет ли OCR прочитать это (и не заснуть).
Это хитрый образ, потому что каждое предложение начинается со слабого надстрочного числа, что типично для законодательных документов.
Нам нужно предоставить команде tesseract
некоторую информацию, в том числе:
- Имя файла изображения, которое мы хотим обработать.
- Имя текстового файла, который будет создан для хранения извлеченного текста. Нам не нужно указывать расширение файла (это всегда будет .txt). Если файл с таким именем уже существует, он будет перезаписан.
- Мы можем использовать параметр
--dpi
, чтобы указатьtesseract
разрешение изображения в точках на дюйм (dpi). Если мы не укажем значение dpi,tesseract
попытается его вычислить.
Наш файл изображения называется «recital-63.png» и имеет разрешение 150 dpi. Мы собираемся создать из него текстовый файл под названием «recital.txt».
Наша команда выглядит так:
tesseract recital-63.png сольный концерт --dpi 150
Результаты очень хорошие. Единственная проблема — это верхние индексы — они были слишком слабыми, чтобы их можно было правильно прочитать. Изображение хорошего качества жизненно важно для получения хороших результатов.
tesseract
интерпретировал надстрочные числа как кавычки (") и символы степени (°), но фактический текст был извлечен идеально (правая сторона изображения должна была быть обрезана, чтобы соответствовать этому).
Последний символ — это байт с шестнадцатеричным значением 0x0C, который представляет собой возврат каретки.
Ниже приведено еще одно изображение с текстом разных размеров, выделенным жирным шрифтом и курсивом.
Имя этого файла — «bold-italic.png». Мы хотим создать текстовый файл с именем «bold.txt», поэтому наша команда:
tesseract bold-italic.png полужирный --dpi 150
С этим проблем не возникло, и текст был извлечен отлично.
Использование разных языков
Tesseract OCR поддерживает около 100 языков. Чтобы использовать язык, его необходимо сначала установить. Когда вы найдете в списке язык, который хотите использовать, обратите внимание на его аббревиатуру. Мы собираемся установить поддержку валлийского языка. Его аббревиатура — «cym», что является сокращением от «Cymru», что означает валлийский.
Установочный пакет называется «tesseract-ocr-» с аббревиатурой языка в конце. Чтобы установить файл валлийского языка в Ubuntu, мы будем использовать:
sudo apt-get установить tesseract-ocr-cym
Изображение с текстом ниже. Это первый куплет национального гимна Уэльса.
Давайте посмотрим, справится ли Tesseract OCR с этой задачей. Мы будем использовать параметр -l
(язык), чтобы сообщить tesseract
язык, на котором мы хотим работать:
tesseract hen-wlad-fy-nhadau.png гимн -l cym --dpi 150
tesseract
отлично справляется, как показано в извлеченном тексте ниже. Дайон , Tesseract OCR.
Если ваш документ содержит два или более языков (например, словарь с валлийского на английский), вы можете использовать знак плюса ( +
), чтобы указать tesseract
добавить еще один язык, например:
tesseract image.png textfile -l eng+cym+fra
Использование Tesseract OCR с PDF-файлами
Команда tesseract
предназначена для работы с файлами изображений, но не может читать PDF-файлы. Однако, если вам нужно извлечь текст из PDF-файла, вы можете сначала использовать другую утилиту для создания набора изображений. Одно изображение будет представлять одну страницу PDF.
Необходимая вам утилита pdftppm
уже должна быть установлена на вашем компьютере с Linux. PDF-файл, который мы будем использовать для нашего примера, — это копия основополагающей статьи Алана Тьюринга об искусственном интеллекте «Вычислительные машины и интеллект».
Мы используем параметр -png
, чтобы указать, что мы хотим создавать файлы PNG. Имя файла нашего PDF-файла — «turing.pdf». Мы будем называть наши файлы изображений «turing-01.png», «turing-02.png» и так далее:
pdftoppm -png тьюринг.pdf тьюринг
Чтобы запустить tesseract
для каждого файла изображения с помощью одной команды, нам нужно использовать цикл for. Для каждого из наших файлов «turing- nn .png» мы запускаем tesseract
и создаем текстовый файл с именем «text-» плюс «turing- nn » как часть имени файла изображения:
для i в turing-??.png; do tesseract "$i" "text-$i" -l eng; Выполнено;
Чтобы объединить все текстовые файлы в один, мы можем использовать cat
:
кот text-turing* > complete.txt
Итак, как это было сделано? Очень хорошо, как вы можете видеть ниже. Однако первая страница выглядит довольно сложной. Он имеет различные стили и размеры текста, а также оформление. Также есть вертикальный «водяной знак» на правом краю страницы.
Однако результат близок к оригиналу. Очевидно, сбилось форматирование, но текст правильный.
Вертикальный водяной знак был расшифрован как строка тарабарщины внизу страницы. Текст был слишком мал, чтобы tesseract
мог его точно прочитать, но его было достаточно легко найти и удалить. Худшим результатом были бы случайные символы в конце каждой строки.
Любопытно, что отдельные буквы в начале списка вопросов и ответов на второй странице были проигнорированы. Раздел из PDF показан ниже.
Как вы можете видеть ниже, вопросы остались, но «Q» и «A» в начале каждой строки были потеряны.
Диаграммы также не будут расшифрованы правильно. Давайте посмотрим, что происходит, когда мы пытаемся извлечь показанный ниже файл из Turing PDF.
Как вы можете видеть в нашем результате ниже, символы были прочитаны, но формат диаграммы был потерян.
Опять же, tesseract
боролся с маленьким размером индексов, и они отображались неправильно.
Но, справедливости ради, это все равно был хороший результат. Нам не удалось извлечь простой текст, но этот пример был выбран намеренно, потому что он представляет собой проблему.
Хорошее решение, когда оно вам нужно
OCR — это не то, что вам нужно использовать ежедневно. Однако, когда возникает необходимость, хорошо знать, что в вашем распоряжении есть один из лучших механизмов OCR.