Тема: Распознавание текстов в Ubuntu

Недавно перешёл с Windows на Ubuntu 18, возникла необходимость решить вопрос с распознаванием текстов из книжек в формате DjVu.

Попробовал несколько смотрелок для DjVu. Наиболее удобным нашёл Okular. Что важно, он позволяет выделать фрагменты текста и сохранять из в формате PNG.

Распознавание как и раньше под Windows выполняю с помощью Cuneiform, но в этот раз - из консоли.

Итого, по шагам.

1. Открываю в Okular нужную страницу текста, увеличиваю масштаб просмотра по максимуму, чтобы сохранённая картинка была максимального размера (мелкий текст практически не распознаётся). Получаю картинку шириной чуть более 1000 px.

2. Выбираю Tools | Area selection (достаточно сделать один раз, выбор затем сохраняется). Выделяю прямоугольник, охватывающий текст и сохраняю как картинку в формате PNG (для удобства - в один и тот же файл "text.png").

3. Если исходная страница перекошена, поворачиваю картинку в "text.png" до горизонтального положения строк (с обрезкой полей) в XnView.

4. Открываю консоль, перехожу в папку с "text.png" и запускаю Cuneiform:

cuneiform -l ruseng --singlecolumn -o result.txt text.png

5. Открываю в той же папке файл с распознанным текстом ("result.txt") в текстовом редакторе, исправляю ошибки распознавания и копирую  текст на сайт. Обычная проблема - путаются буквы "и" и "н" и почему-то вместо символа тире выводится странная последовательность символов (—). Но в принципе, работы не больше, чем раньше.

Re: Распознавание текстов в Ubuntu

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

Как это делается:

1) Нужно поставить DjView4, последний tesseract (это система распознавания от Google) со всеми языками, и ocrodjvu. Как это все ставить -- можно нагуглить, но если нужна инструкция, напишите.

2) Берем DjVu файл, понимаем какие там языки, запускаем в консоли:

ocrodjvu --in-place -j 4 -l eng file.djvu

и ждем. По умолчанию запускается tesseract, поэтому его указывать не надо. tesseract медленный, но _очень_ качественный, по многим тестам лучше FineReader, и уж куда лучше cuneiform. Кроме того, он развивается, то есть постоянно выходят новые версии (а cuneiform нет).

"-j 4" значит, что распознавать надо в четыре потока (а если в системе процессоров больше, то лучше всегда ставить максимальное значение). Можно комбинировать языки, причем по три или даже четыре! Например, "-l chi-sim+lat+rus" скомбинирует китайский упрощенный (материковый Китай), латиницу и русскую кириллицу. Есть и другие опции, но эти важнее всего.

3) Как только файл готов, открываем его в DjView4, нажимаем F2, выделяем любой фрагмент и по контекстному меню копируем текст в буфер. Что важно, теперь можно в DjVu файле искать (Crtl+F). А можно выделить весь текст, это лучше делать в консоли:

djvutxt file.djvu > file.txt

Получается текстовый файл со всем текстом из книги.

Отредактировано Алексей Шипунов (2020-04-06 10:10:40)

Re: Распознавание текстов в Ubuntu

Зачем нужен, скажем, китайский. Вот у меня есть три странички подорожников из "Iconographia Cormophytorum Sinicorum". Я запускаю ocrodjvu:

ocrodjvu --in-place -l chi-sim+lat -j 4 iconogr_cormophytorum_sinicorum_1980_plantago.djvu

жду две минуты

выделяю китайское описание Plantago asiatica, загружаю его в Google Translate, и получаю среди прочего (без правки):

===
...
Hairless or pubescent; petiole 5 to 22 cm long. flower
Several grasses, erect, 20-45 cm long, short
Hairy; spikes occupy 1/3 to 1/2 of upper end, with green
White sparse flowers, bracts broadly triangular, rather than calyx lobes
Short, both have green broad keel-like protrusions, calyx has
Short-handled, lobes obovate-elliptic to elliptic, long
2 to 2.5 mm; corolla lobes lanceolate, 1 mm long
Meter. Shade fruit oval, about 3 mm in length, lobed, planted
Child 5_6, rare 7-8, oblong, about L5 mm long,
Black-brown.
...
===

(заглавные буквы надо игнорировать, в китайском их нет).

Понимаю, что 5-6 (7-8) семян авторы считают для этого вида типичным. Очень полезно.

Отредактировано Алексей Шипунов (2020-04-06 10:22:47)

Re: Распознавание текстов в Ubuntu

Спасибо за ценную информацию!

Re: Распознавание текстов в Ubuntu

Спасибо! Надо будет попробовать.

Re: Распознавание текстов в Ubuntu

Попробовал (по инструкциям Алексея Шипунова) - результаты хорошие, еще раз спасибо. На очереди испытание японскими текстами.

Re: Распознавание текстов в Ubuntu

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

Отредактировано Юрий Постников (2020-04-07 16:45:39)

Re: Распознавание текстов в Ubuntu

Михаил Серебряный пишет:

На очереди испытание японскими текстами.

Немного оффтопик -- я сейчас в Японии, если что, обращайтесь.

Re: Распознавание текстов в Ubuntu

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

Re: Распознавание текстов в Ubuntu

Попробовал поставить tesseract и посмотреть, как он распознаёт картинки, которые я ранее прогонял через cuneiform.

Выполнил команды установки:

sudo apt update
sudo apt install tesseract-ocr
sudo apt install tesseract-ocr-rus
sudo apt install tesseract-ocr-lat

Далее запускаю на картинке, которую сегодня уже скармливал cuneiform:
https://forum.plantarium.ru/misc.php?action=pun_attachment&item=28151&download=0

Команда:

tesseract text.png stdout -l rus+eng+lat  --oem 1 --psm 3

Результат:

Родство. От родственного вида С’. uralensis Fisch. ex DC. ormmaercs
стеблями с волосками и шипами (а не железисто-волосистыми), листоч-
ками с отогнутой (а не прямой) верхушкой, компактными (а не рыхлы-
ми) кистями, которые вместе с цветоносом в 1.5 раза короче ( а не длин-
нее) листьев, цветками 18—20 (а не 12-14) мм дл, чашечкой 10-12
(ане 6-8) мм дл., бордовой (а не зеленой) сверху, бобами 3—6 (а не 1-4)-
семянными, улитковидными (а не серповидными), сильно поперечно-
извилистыми (а не плоскими), сохраняющимися (а не частично опа-
дающими), собранными в длинный цилиндр (а не пучок), который вме-
сте с цветоносом почти равен (а не длиннее) длине листьев.

Распространение. Казахстан (Тарбагатай, Джунгарский Алатау),
Киргизия ( Тянь-Шань), Россия (Тува) и Китай (Джунгария, Кашга-
рия).

На мой взгляд - неплохо. Только русское слово после латыни посчитало за латынь smile
Надо поискать, как убрать переносы (а может кто знает?).

Буду пользоваться.

Для сравнения результат распознавания cuneiform:

Родство. От родственного вида С. uralensis Fisch ex DC. отличается стеблями с волосками и шипами (а не железисто-волосистыми), листочками с отогнутой (а не прямой) верхушкой, компактными (а не рыхлыми) кистями, которые вместе с цветоносом в 1.5 раза короче ( а не длиннее) листьев, цветками 18 — 20 (а не 12 — 14) мм дл, чашечкой 10 — 12 (а не 6 — 8) мм дл., бордовой (а не зеленой) сверху, бобами 3 — 6 (а не 1-4)- семянными, улитковидными (а не серповидными), сильно поперечноизвилистыми (а не плоскими), сохраняющимися (а не частично опадающими), собранными в длинный цилиндр (а не пучок), который вместе с цветоносом почти равен (а не длиннее) длине листьев.
Распространение. Казахстан (Тарбагатай, Джунгарский Алатау), Киргизия ( Тянь-Шаль), Россия (Тува) и Китай (Джунгария, Кашгария).

Аттачменты сообщения

Иконка аттачмента text.png 103.56 kb, 7 раз(а) скачан с 2020-04-12 

Re: Распознавание текстов в Ubuntu

> Надо поискать, как убрать переносы (а может кто знает?).

Можно так:

tesseract text.png stdout -l rus+lat | perl -0 -pe 's/(\S+)-\s+(\S+)/$1$2/g'

Кстати, изображение 200 dpi, тогда как для распознавания лучше 300 dpi.

Интересно, что cuneiform лучше справился. И быстрее он раз в пять чем tesseract. Так что у него по-прежнему много плюсов.

Re: Распознавание текстов в Ubuntu

Надо сказать, что тут картинка неплохого качества. При случае попробую на худших образцах.