zaLinux.ru

Распознавание текста в Linux (OCR)


Оглавление

1. OCR программы в Linux с графическим интерфейсом

1.1 OCRFeeder

1.2 gImageReader

1.3 ocrgui

1.4 screentranslator

2. Утилиты командной строки для OCR

2.1 Tesseract

2.2 Ocrad

2.3 gocr

2.4 Cuneiform

2.5 ocropy


Для Linux имеются разнообразные инструменты командной строки и с графическим интерфейсом для преобразования изображений в текст. В этой статье будут рассмотрены программы, с помощью которых вы можете после сканирования страниц книги или документов перевести их в текстовый формат.

OCR программы в Linux с графическим интерфейсом

OCRFeeder

OCRFeeder — это система анализа макета документов и оптического распознавания символов.

Откройте в этой программе изображения и она автоматически определит контуры областей, в которых находятся изображения и текст и выполнит OCR (распознавание текста) этого документа. Программа может сохранять полученные результаты в разные форматы, главным из них является ODT.

Программа имеет законченный GTK+ графический пользовательский интерфейс, который позволяет пользователям корректировать любые нераспознанные символы, определять или корректировать границы областей текста, устанавливать стили параграфов, очищать введённые изображения, импортировать PDF, сохранять и загружать проект, экспортировать всё в несколько форматов и так далее.

В общем, это программа по функциям схожая с Abbyy FineReader, в некотором смысле, можно сказать, что OCRFeeder это аналог Abbyy FineReader для Linux, по крайней мере, в его базовой функциональности.

Установка OCRFeeder

В своей работе OCRFeeder использует сторонние движки оптического распознавания символов, например, по умолчанию она использует Tesseract. Для установки нужно установить и графический интерфейс OCRFeeder и Tesseract. В Debian и производных Tesseract устанавливается в качестве зависимости, поэтому необязательно указывать этот пакет явно. Но при этом помните, что вместе с Tesseract устанавливается по умолчанию только распознавание английского языка, для дополнительной поддержки русского, нужно явно указать этот пакет. Про распознавание других языков, а также про работу с Tesseract будет рассказано в этой же статье далее.

Установка OCRFeeder в Ubuntu, Linux Mint, Debian, Kali Linux и их производные:

sudo apt install ocrfeeder tesseract-ocr-rus

Установка OCRFeeder в Arch Linux, BlackArch и их производные:


sudo pacman -S ocrfeeder tesseract-data-eng tesseract-data-rus

Как пользоваться OCRFeeder

Для запуска программы найдите её в меню (скорее всего, в разделе Офис):

Или в командной строке выполните команду:

ocrfeeder

Внешний вид программы:

Для анализа у меня есть тестовое изображение:

Загрузим его в программу (для этого нажмите знак плюс +). Вам необязательно добавлять изображения по одному — можно добавлять целыми папками или импортировать PDF документ.

Для распознавания в меню Документ выберем «Распознать документ» (будут распознаны все страницы, которые загружены в программу), либо «Распознать страницу» (будет распознана страница, которая выделена в данный момент).


В правом нижнем углу появляются результаты распознавания текста:

С моим тестовым файлом, результаты неудовлетворительные, поскольку программа неудачно выбрала области для распознавания. Это исправить легко, просто выбираем новую область и выбираем «Распознать выделенную область»:

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

Как обычно с системами OCR — чем лучше качество исходного текста (имеют значение ровность, размер, контрастность и другое), тем лучше получается результат (хотя в любом случае требуется вычитка и корректировка полученного при распознавании текста):

По умолчанию языком для распознавания установлен тот же язык, что имеет ваша система, то есть, скорее всего, русский язык. Вы можете изменить язык в Меню → Настройки → Распознавание → Default language. Если вы выбрали неверный язык, то движок оптического распознавания символов вернёт плохие результаты. Если вы выбрали язык, который не поддерживается движком, то он может вернуть пустую страницу.

Вы можете экспортировать для распознавания PDF документы. А полученные результаты сохранять в различных форматах:

  • ODT
  • HTML
  • PDF
  • Простой текст

Также вы можете сохранить весь проект целиком в собственном формате программы.

Если вы запускаете OCRFeeder из командной строки, то вы можете использовать несколько опций для ускорения процесса добавления изображений.

Использование:

ocrfeeder [опции]

Опции:

  --version             показать версию программы и выйти
  -h, --help            показать справку и выйти
  -i ИЗОБРАЖЕНИЕ1 [ИЗОБРАЖЕНИЕ2, ...], --images=ИЗОБРАЖЕНИЕ1 [ИЗОБРАЖЕНИЕ2, ...]
                        изображения, которые будут автоматически добавлены при запуске программы.
                        Используйте эту опцию перед каждым изображением для добавления.
  -d ДИРЕКТОРИЯ, --dir=ДИРЕКТОРИЯ
                        директория с изображениями, которая будет добавлена 
                        автоматически при запуске программы.

gImageReader

gImageReader — это графический GTK+ интерфейс для tesseract-ocr.

Tesseract — пожалуй, самое точное программное обеспечение с открытым исходным кодом для оптического распознавания символов (OCR) и может распознавать текст на более чем 60 языках.

gImageReader поддерживает автоматическое определение макета страницы, но пользователь также может вручную задать и отредактировать области распознавания. Есть возможность импортировать изображения с диска, устройств сканирования, буфера обмена и скриншотов. gImageReader также поддерживает многостраничные документы PDF. Распознанный текст отображается непосредственно рядом с изображением и базовое редактирование текста включает поиск/замену и удаление сломанных строк если это возможно. Также поддерживается проверка орфографии для выводимого текста если установлены соответствующие словари.

Особенности:

  • Импорт PDF документов и изображений с диска, сканирующих устройств, буфера обмена и скриншотов
  • Обработка нескольких изображений и документов за один проход
  • Ручное или автоматическое определение области распознавания
  • Распознавание в простой текст или в документ hOCR
  • Распознанный текст отображается рядом с исходным изображением
  • Последующая обработка текста, включая проверку орфографии
  • Геренирование PDF документов из hOCR документов

Установка OCRFeeder в Ubuntu, Linux Mint, Debian, Kali Linux и их производные:

sudo apt install gimagereader

Установка OCRFeeder в Arch Linux, BlackArch и их производные:


git clone https://aur.archlinux.org/gtkspellmm.git
cd gtkspellmm
makepkg -si

cd ..

git clone https://aur.archlinux.org/gimagereader.git
cd gimagereader
makepkg -si

ocrgui

ocrgui — это графический интерфейс для OCR программ (Tesseract, GOCR). Программа давно не обновлялась и может отсутствовать в стандартных репозиториях.

Установка OCRFeeder в Arch Linux, BlackArch и их производные:

git clone https://aur.archlinux.org/ocrgui.git
cd ocrgui
makepkg -si

screentranslator

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

Установка OCRFeeder в Arch Linux, BlackArch и их производные:

git clone https://aur.archlinux.org/screentranslator.git
cd screentranslator
makepkg -si

В настройках укажите путь к tesseract: /usr/bin/tesseract

Утилиты командной строки для OCR

Далее будут рассмотрены движки оптического распознавания символов, которые имеют интерфейс командной строки. Эта информация может пригодиться продвинутым пользователям, привыкшим иметь дело с консолью, а также пользователям OCRFeeder, поскольку эта программа умеет работать с каждым из рассмотренных ниже OCR инструментов, и знание их особенностей и различий помогут вам правильно выбрать используемый движок OCR:

Tesseract

Tesseract — это движок оптического распознавания символов (OCR) с открытым исходным кодом. Его можно использовать напрямую, с помощью API для извлечения печатного текста из изображений, а также программы с графическим интерфейсом, такие как OCRFeeder, могут использовать Tesseract. Этот движок поддерживает большое количество языков. Пакет включает в себя утилиту командной строки.

Использование:

  tesseract --help | --help-psm | --help-oem | --version
  tesseract --list-langs [--tessdata-dir ПУТЬ]
  tesseract --print-parameters [опции...] [конфигурационный файл...]
  tesseract имя_изображения|stdin вывод|stdout [опции...] [конфигурационный файл...]

OCR опции:

  --tessdata-dir ПУТЬ   Указать путь расположения tessdata.
  --user-words ПУТЬ     Указать расположение пользовательского файла со словами.
  --user-patterns ПУТЬ  Указать расположение пользовательского файла с образцами.
  -l ЯЗЫК[+ЯЗЫК]        Указать язык(и), используемые для OCR.
  -c ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ          Установить значения конфигурационных переменных.
                        Разрешено использовать аргумент -c несколько раз.
  --psm ЧИСЛО             Указать режим сегментации страницы.
  --oem ЧИСЛО             Указать режим движка OCR.
ПРИМЕЧАНИЕ: Эти опции должны идти перед любым конфигурационным файлом.

Режимы сегментации страницы:
  0    Только ориентация и обнаружение скриптом (OSD).
  1    Автоматическая сегментация страницы с OSD.
  2    Автоматическая сегментация страницы но без OSD или OCR.
  3    Полностью автоматическая сегментация страницы, но без OSD. (По умолчанию)
  4    Предполагается единичная колонка текста переменной длины.
  5    Предполагается единый унифицированный блок вертикально выравненного текста.
  6    Предполагается единый унифицированный блок текста.
  7    Обрабатывать изображение как единичную текстовую строку.
  8    Обрабатывать изображение как единичное слово.
  9    Обрабатывать изображение как единичное слово в круге.
 10    Обрабатывать изображение как единичный символ.
 11    Разреженный текст. Найти столько текста, сколько возможно без особого порядка.
 12    Разреженный текст с OSD.
 13    Сырая строка. Обрабатывать изображение как единичную текстовую строку,
			обход специфичных для Tesseract хаков.
Режимы движка OCR:
  0    Только оригинальный Tesseract.
  1    Только Cube.
  2    Tesseract + cube.
  3    По умолчанию, основан на том, что доступно.

Единичные опции:
  -h, --help            Показать справку.
  --help-psm            Показать режимы сегментации страницы.
  --help-oem            Показать режимы движка OCR.
  -v, --version         Показать информацию о версии.
  --list-langs          Вывести список доступных языков для движка tesseract.
  --print-parameters    Напечатать параметры tesseract в stdout (стандартный вывод).

Обратите внимание на опцию -l, после которой нужно указать используемый язык. Если он не указан, то подразумевается английский. Можно указать несколько языков, разделённых знаком плюс. Tesseract использует 3-символьные коды языков ISO 639-2.


Доступны следующие языки:

  • afr (африканские)
  • amh (амхарский)
  • ara (арабский)
  • asm (ассамский)
  • aze (азербайджанский)
  • aze_cyrl (азербайджанский — кириллица)
  • bel (белорусский)
  • ben (бенгальский)
  • bod (тибетский)
  • bos (боснийский)
  • bul (болгарский)
  • cat (каталанский; валенсийский)
  • ceb (кебуанский)
  • ces (чешский)
  • chi_sim (китайский упрощённый)
  • chi_tra (китайский традиционный)
  • chr (Cherokee)
  • cym (валлийский)
  • dan (датский)
  • dan_frak (датский — Fraktur)
  • deu (германский)
  • deu_frak (германский — Fraktur)
  • dzo (Dzongkha)
  • ell (греческий, современный (1453-))
  • eng (английский)
  • enm (английский, средние века (1100-1500))
  • epo (эсперанто)
  • equ (математика / модуль распознавания уровнений)
  • est (эстонский)
  • eus (баскский)
  • fas (перситский)
  • fin (финский)
  • fra (французский)
  • frk (франкский)
  • frm (французский, средние века (ca.1400-1600))
  • gle (ирландский)
  • glg (галисийский)
  • grc (чреческий, древний (до 1453))
  • guj (гуджаратский)
  • hat (гаитянский; гаитянский креольский)
  • heb (иврит)
  • hin (хинди)
  • hrv (хорватский)
  • hun (венгерский)
  • iku (язык инуктитут)
  • ind (индонезийский)
  • isl (исландский)
  • ita (итальянский)
  • ita_old (итальянский старый)
  • jav (яванский)
  • jpn (японский)
  • kan (язык каннада)
  • kat (грузинский)
  • kat_old (грузинский старый)
  • kaz (казахский)
  • khm (центральный кхмерский)
  • kir (киргизский)
  • kor (корейский)
  • kur (курдский)
  • lao (лаосский)
  • lat (латинский)
  • lav (латышский)
  • lit (литовский)
  • mal (малаялам)
  • mar (маратхи)
  • mkd (македонский)
  • mlt (мальтийский)
  • msa (малайский)
  • mya (бирманский)
  • nep (непальский)
  • nld (голландский, фламандский)
  • nor (норвежский)
  • ori (ория)
  • osd (модуль определения ориентации и скриптов)
  • pan (пенджабский)
  • pol (польский)
  • por (португальский)
  • pus (пушту; пушто)
  • ron (румынский, молдавский)
  • rus (русский)
  • san (санскит)
  • sin (сингаль, сингальский)
  • slk (словацкий)
  • slk_frak (словацкий — Fraktur)
  • slv (словенский)
  • spa (испанский, кастильский)
  • spa_old (испанский, кастильский — старые)
  • sqi (албанский)
  • srp (сербский)
  • srp_latn (сербский — латинский)
  • swa (суахили)
  • swe (шведский)
  • syr (сирийский)
  • tam (тамильский)
  • tel (телугу)
  • tgk (таджикский)
  • tgl (тагальский)
  • tha (тайский)
  • tir (тигринья)
  • tur (турецкий)
  • uig (уйгуро; уйгурский)
  • ukr (украинский)
  • urd (урду)
  • uzb (узбекский)
  • uzb_cyrl (узбекский - кириллица)
  • vie (вьетнамский)
  • yid (идиш)

Ocrad

GNU Ocrad это OCR (Optical Character Recognition — оптическое распознавание символов) программа, основывающаяся на методе извлечения признаков. Она считывает битовую карту изображения в формате pgm/pbm и выдаёт текств в байтовом (8-бит) или UTF-8 форматах.

Ocrad включает анализатор разметки, способный разделять столбцы или блоки текста, какие обычно бывают на печатных страницах.

Для лучшего результата символы должны быть по крайней мере 20 пикселей в высоту. Если они меньше, попробуйте опцию --scale. Сканированные изображения на 300 dpi обычно дают размер символов достаточно хорошего размера для ocrad.

Слитые, очень смелые или очень светлые (сломанные) символы обычно не распознаются правильно. Старайтесь избегать их.

Использование:

ocrad [опции] [файлы]

Опции:

  -h, --help                показать справку и выйти
  -V, --version             вывести информацию о версии и выйти
  -a, --append              добавить текст к файлу вывода
  -c, --charset=<имя>       попробуйте '--charset=help' для получения списка имён
  -e, --filter=<имя>         попробуйте '--filter=help' для получения списка имён
  -E, --user-filter=<файл>   определённый пользователем фильтр, смотрите мануал для получения форматов
  -f, --force               принудительно переписать файл вывода
  -F, --format=<fmt>        формат вывода (byte, utf8)
  -i, --invert              инвертировать уравни изображения (белый на чёрном)
  -l, --layout              выполнить анализ макета
  -o, --output=<файл>       поместить вывод в <файл>
  -q, --quiet               подавить все сообщения
  -s, --scale=[-]           масштабировать входное изображение на [1/]<n>
  -t, --transform=<имя>     попробуйте '--transform=help' для получения списка имён
  -T, --threshold=<n%>      порог для бинаризации (0-100%)
  -u, --cut=<l,t,w,h>       обрезать входное изображение по заданному прямоугольнику
  -v, --verbose             быть вербальной
  -x, --export=<файл>       экспортировать результаты в формат ORF в <файл>

Если файлы не указаны, то ocrad считывает изображения из стандартного ввода. Если опция -o не указана, ocrad отправляет текст в стандартный вывод.

Статусы выхода: 0 для нормального выхода, 1 при проблемах в среде (файл не найден, неверные флаги, ошибки ввода/вывода и т.д.), 2 говорит о повреждённом или неверном файле ввода, 3 для ошибки внутренней консистенции (например, баг), которая вызвала панику в ocrad.

gocr

gocr — это мультиплатформенная программа распознавания текстов (OCR). Она принимает файлы изображений pnm, pbm, pgm, ppm, some pcx и tga. В настоящее время программа должна быть способна хорошо работать со сканами, в которых есть текст в один столбец и нет таблиц. Поддерживается размер шрифта от 20 до 60 пикселей.

Использование:

gocr [options] pnm_file_name # use - for stdin

Опции (больше подробностей в мануале man gocr):

 -h, --help
 -i имя   - файл с изображением ввода (pnm,pgm,pbm,ppm,pcx,...)
 -o имя   - файл вывода  (перенаправление stdout)
 -e имя   - файл журналирования (перенаправление stderr)
 -x имя   - перенаправление прогресса в fifo (смотрите мануал)
 -p имя   - путь базы данных включает конечный слэш (по умолчанию это ./db/)
 -f формат    - формат вывода (ISO8859_1 TeX HTML XML UTF8 ASCII)
 -l число    - пороговый уровень серого 0<160<=255 (0 = автоопределение)
 -d число    - dust_size (удаление маленьких кластеров, -1 = автоопределение)
 -s число    - spacewidth/dots (0 = автоопределение)
 -v число    - вербальность (смотрите мануал)
 -c строка - список символов (отладка, смотрите мануал)
 -C строка - фильтр символов (к примеру, шестнадцатеричные: 0-9A-Fx, только ASCII)
 -m число    - режимы работы (bitpattern, смотрите мануал)
 -a число    - величина точности (в процентах, 0..100, по умолчанию=95)
 -u строка - вывести эту строку для каждого нераспознанного символа

Примеры:

Провести анализ разметки:

gocr -m 4 text1.pbm

Расширенная база данных:

gocr -m 130 -p ./database/ text1.pbm

Использовать файл jpeg переданный по трубе:

djpeg -pnm -gray text.jpg | gocr

Cuneiform

Cuneiform — это многоязычная система OCR (распознавания текста). В дополнении к распознаванию текста, она также анализирует разметку и распознаёт формат текста.

Поддерживаются следующие языки: болгарский, хорватский, чешский, датский, голландский, английский, эстонский, французский, немецкий, венгерский, итальянский, латышский, литовский, польский, португальский, румынский, русский, сербский, словенский, испанский, шведский, турецкий и украинский.

Использование:

cuneiform [-l имя_языка -f формат --dotmatrix --fax --singlecolumn -o result_file] imagefile

Опции:

--dotmatrix

Режим распознавания оптимизирован для текстов, напечатанных на принтерах с точечной матрицей

--fax

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

--singlecolumn

Отключить анализ разметки страницы и исходить из того, что изображение состоит из одной колонки текста.

-f формат

Выбрать формат вывода. Доступны следующие форматы:

  • html (HTML формат),
  • hocr (hOCR HTML формат),
  • native (родной формат Cuneiform 2000),
  • rtf (RTF формат),
  • smarttext (простой текст с TeX параграфами),
  • text (простой текст).

По умолчанию это plain text.

-l язык

По умолчанию Cuneiform распознаёт английский текст. Для изменения языка используйте переключатель командной строки, после -l после которого следует код языка (обычно трёхбуквенный код ISO 639-2).

Поддерживаются следующие языки:

           bul      Болгарский
           cze      Чешский
           dan      Датский
           dut      Голландский
           eng      Английский
           est      Эстонский
           fra      Французский
           ger      Немецкий
           hrv      Хорватский
           hun      Венгерский
           ita      Итальянский
           lav      латышский
           lit      Литовский
           pol      Польский
           por      Португальский
           rum      Румынский
           rus      Русский
           ruseng   смешанный Русский/Английский
           slv      Словенский
           spa      Испанский
           srp      Сербский
           swe      Шведский
           tur      Турецкий
           ukr      Украинский

-o вывод

Если вы не указали файл вывода с переключателем -o, то Cuneiform запишет результаты в файл ‘cuneiform-out.format’. Расширение файла зависит от вашего формата вывода.

Форматы ввода

Cuneiform может обрабатывать любые изображения с единичной страницой, которые GraphicsMagick знает как открывать. Посмотрите мануала gm(1) для полного списка поддерживаемых форматов изображений.

ocropy

ocropy — это написанный на Python OCR пакет, использующий рекуррентные нейронные сети (ранее назывался OCRopus).

ocropy — это коллекция программ для анализа документов, это не простая OCR система, которая распознаёт тексты в графическом интерфейсе или с запуском одной команды. Функции ocropy разбиты на отдельные модули и, например, для простого распознавания текста может потребоваться ввести несколько команд для подготовки документа.

В дополнении к самим скриптам распознавания, имеется ряд скриптов для базового редактирования и коррекции, измерению процента ошибок, определению матриц путаницы и т. п.

Установка OCRFeeder в Arch Linux, BlackArch и их производные:

git clone https://aur.archlinux.org/ocropy.git
cd ocropy
makepkg -si

Рекомендуемые статьи:

4 Комментарии

  1. NoZombies

    говорят на линуксе нет вирусов, что тут делает  Z ???

    1. Alexey (Автор записи)

      Мдаааааааа… сайт что-ли теперь переименовывать?

    2. Peter

      Тонко

      Межпрочим у вас в нике тоже вирус

  2. Peter

    Извините, но приведённые программы просто туфта для ребёнка побаловаться. Ну или что то очень неприхотливое расподнать… листик с текстом.

    Таблицы и пр. они несдюжать. Видать , придётся и тут wine расчехлять. Без abbyy никуда не деться ¯\_(ツ)_/¯

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *