Сканы договоров, книг и архивов бесполезны, если с них нельзя скопировать текст или найти строку поиском. Tesseract решает эту задачу локально, без облака и передачи документов третьим лицам. Он не «понимает» документ, а распознаёт символы по обученной модели, поэтому качество зависит от подготовки изображения и правильных параметров. Ниже — рабочий конвейер от установки до проверки результата.

Что умеет Tesseract

Движок поддерживает больше сотни языков, включая русский, и умеет выдавать простой текст, hOCR, TSV с координатами слов и PDF с текстовым слоем. Версия 5.x использует нейросетевую модель LSTM, которая заметно лучше читает печатный текст, чем старый движок. Рукописный текст, таблицы сложной структуры и плохие фотографии по-прежнему остаются проблемой.

Важно понимать границы: Tesseract не открывает PDF напрямую. Ему нужна картинка или многостраничный TIFF, поэтому PDF сначала разбирают на страницы. Для сборки результата обратно в PDF используют ocrmypdf. Ключ --oem выбирает движок: 1 — только LSTM, 0 — устаревший, 3 — режим по умолчанию. В пятой версии рабочий вариант — LSTM.

Установка и языковые данные

В Debian и Ubuntu пакет ставится вместе с нужными языками. Если русского пакета нет, запуск с -l rus завершится ошибкой загрузки языка, а без ключа -l Tesseract возьмёт английский — отсюда и «кракозябры» вместо текста.

sudo apt install tesseract-ocr tesseract-ocr-rus tesseract-ocr-eng
tesseract --version
tesseract --list-langs
tesseract --list-langs --tessdata-dir /usr/share/tesseract-ocr/5/tessdata

Для лучшего качества можно взять модели tessdata_best из официального репозитория проекта и положить файлы в отдельный каталог, подключив его ключом --tessdata-dir. Модели fast быстрее, best точнее, но требуют больше памяти.

Подготовка изображения

Больше половины ошибок распознавания лечится до запуска OCR. Скан должен быть ровным, контрастным и достаточно крупным: оптимально 300–400 dpi. Перекос даже в два градуса ломает разбиение на строки.

magick scan.png -colorspace Gray -deskew 40% -level 15%,85% clean.png
magick scan.png -colorspace Gray -threshold 60% bw.png
unpaper --layout single --deskew-scan-direction left page.png page-clean.png
tesseract clean.png out -l rus+eng --psm 3

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

identify -format '%x %y %[colorspace]\n' scan.png
pdfimages -list doc.pdf

Эти две команды стоит выполнить до обработки. Первая показывает реальное разрешение и цветовое пространство, вторая — какие изображения и с каким сжатием лежат внутри PDF. Если картинка сохранена в JPEG с сильным сжатием, никакая фильтрация не вернёт потерянные детали.

Режимы сегментации

Ключ --psm подсказывает движку, как устроена страница. Неверный режим — вторая по частоте причина провала после плохого скана.

  • --psm 3 — автоматическое разбиение, подходит для большинства страниц;
  • --psm 6 — единый блок текста, удобно для писем и справок;
  • --psm 4 — одна колонка переменного размера;
  • --psm 11 — разреженный текст: вывески, фрагменты, подписи;
  • --psm 7 — одна строка, например номер или заголовок;
  • --psm 1 — авторежим с определением ориентации.

Если документ содержит две колонки, а --psm 3 смешивает строки, попробуйте --psm 4 или обрежьте страницу на две части. Для смешанного русского и английского указывайте -l rus+eng: движок будет выбирать язык по контексту, хотя на коротких словах может ошибаться.

Из PDF в текст

Сначала страницы превращают в PNG с нужным разрешением, затем распознают каждую отдельно. Так проще найти проблемную страницу и не держать в памяти весь документ.

mkdir -p page text
pdftoppm -r 300 -png doc.pdf page/p
for f in page/*.png; do
  tesseract "$f" "text/$(basename "$f" .png)" -l rus+eng --psm 3
done
cat text/*.txt > doc.txt

Если нужен PDF с текстовым слоем, используйте ocrmypdf. Он сам вызовет Tesseract, сохранит исходное изображение и добавит невидимый текст, по которому работает поиск. Ключ --skip-text пропускает страницы, где текст уже есть, --redo-ocr перераспознаёт проблемные.

Многостраничный TIFF обрабатывается одной командой: tesseract book.tif book -l rus. Если страницы сохранены отдельными файлами, проще цикл: он даёт понятные имена и позволяет пропустить уже готовые. Разрешение задавайте явно ключом --dpi 300, когда в метаданных картинки стоит неверное значение: Tesseract использует его при оценке размера шрифта.

sudo apt install ocrmypdf
ocrmypdf -l rus+eng --skip-text doc.pdf doc-ocr.pdf
ocrmypdf -l rus+eng --deskew --clean --optimize 1 scan.pdf out.pdf
pdfinfo doc-ocr.pdf

Пакетная обработка

На сотнях страниц последовательный цикл работает часами. Распараллельте его по числу ядер, но оставьте запас для системы: Tesseract активно использует память.

find scans -name '*.png' -print0 | xargs -0 -P 4 -I{} sh -c 'tesseract "$1" "text/$(basename "$1" .png)" -l rus+eng' _ {}
grep -c . text/*.txt
du -sh text

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

Проверка качества

Средняя уверенность по документу ничего не говорит о конкретных словах. TSV-вывод содержит колонку conf с уверенностью для каждого слова, и по ней удобно находить проблемные места.

tesseract clean.png out -l rus+eng --psm 3 tsv
awk -F'\t' 'NR>1 && 59 >= $11+0 {print $12}' out.tsv | head -30

Порог уверенности в примере — 60: все слова с меньшим значением попадут в вывод. Их стоит проверить глазами: часто это фамилии, номера и латиница внутри русского текста.

Что ещё помогает:

  • указывайте --user-words со словарём терминов и названий вашей организации;
  • проверяйте ориентацию страницы, иначе --psm 1 может перевернуть текст;
  • не смешивайте языки без необходимости: лишняя модель увеличивает число ошибок;
  • храните исходные сканы, чтобы можно было перераспознать без повторной оцифровки.

Итог

Tesseract даёт предсказуемый локальный OCR без облака и подписок. Качество определяется не магической командой, а нормальным сканом, правильным --psm, нужным языковым пакетом и проверкой результата. Начните с 300 dpi и --psm 3, затем подгоняйте обработку под конкретный тип документов, а для PDF сразу берите ocrmypdf.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте