Как сделать OCR из командной строки Linux с помощью Tesseract

Опубликовано: 2022-01-29
Окно терминала на ноутбуке с Linux.
Фатмавати Ахмад Заэнури/Shutterstock

Вы можете извлекать текст из изображений в командной строке 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 прочитать это (и не заснуть).

выдержка из Декламации 63 GDPR

Реклама

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

Нам нужно предоставить команде tesseract некоторую информацию, в том числе:

  • Имя файла изображения, которое мы хотим обработать.
  • Имя текстового файла, который будет создан для хранения извлеченного текста. Нам не нужно указывать расширение файла (это всегда будет .txt). Если файл с таким именем уже существует, он будет перезаписан.
  • Мы можем использовать параметр --dpi , чтобы указать tesseract разрешение изображения в точках на дюйм (dpi). Если мы не укажем значение dpi, tesseract попытается его вычислить.

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

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

 tesseract recital-63.png сольный концерт --dpi 150 

Результаты очень хорошие. Единственная проблема — это верхние индексы — они были слишком слабыми, чтобы их можно было правильно прочитать. Изображение хорошего качества жизненно важно для получения хороших результатов.

Извлеченный текст из концерта 63.

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-файл, который мы будем использовать для нашего примера, — это копия основополагающей статьи Алана Тьюринга об искусственном интеллекте «Вычислительные машины и интеллект».

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 

Итак, как это было сделано? Очень хорошо, как вы можете видеть ниже. Однако первая страница выглядит довольно сложной. Он имеет различные стили и размеры текста, а также оформление. Также есть вертикальный «водяной знак» на правом краю страницы.

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

Первая страница извлеченного текста из файла Turing PDF.

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

Реклама

Любопытно, что отдельные буквы в начале списка вопросов и ответов на второй странице были проигнорированы. Раздел из PDF показан ниже.

Список вопросов и ответов из PDF-файла статьи Тьюринга.

Как вы можете видеть ниже, вопросы остались, но «Q» и «A» в начале каждой строки были потеряны.

Извлеченный текст со страницы вопросов и ответов в PDF-файле Тьюринга.

Диаграммы также не будут расшифрованы правильно. Давайте посмотрим, что происходит, когда мы пытаемся извлечь показанный ниже файл из Turing PDF.

Диаграмма «Ввод» и «Последнее состояние» из PDF-файла Тьюринга.

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

Извлеченный текст из диаграммы в Turing PDF.

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

Реклама

Но, справедливости ради, это все равно был хороший результат. Нам не удалось извлечь простой текст, но этот пример был выбран намеренно, потому что он представляет собой проблему.

Хорошее решение, когда оно вам нужно

OCR — это не то, что вам нужно использовать ежедневно. Однако, когда возникает необходимость, хорошо знать, что в вашем распоряжении есть один из лучших механизмов OCR.