Генератор книг FB2
Для оцифровки большой книги, доступной только в печатном виде, создан набор инструментов в виде shell-скриптов. Тестирование проводилось на MacOS с использованием Homebrew. Скрипты также должны работать на Linux, при этом необходимо заменить строки #!/opt/homebrew/bin/bash
на #!/bin/bash
.
В основе проекта лежит пакеты Tesseract OCR и Imagemagic.
Зависимости
sudo apt-get install tesseract tesseract-lang imagemagick
или
brew install tesseract
brew install tesseract-lang
brew install imagemagick
Структура папок книги
- book_name/description.xml - описание книги согласно формату
- book_name/cover.jpg - обложка высотой около 300px, до 100КБ, желательно 32КБ
- book_name/source/* - папка с папками фотографий по главам
- book_name/source/ch01/* - фотографии главы 1
- book_name/source/ch02/* - фотографии главы 2
- …
Названия папок могут быть любыми, главное — соблюдать порядок. Названия фотографий также могут быть любыми, но важно, чтобы они шли по порядку. Если главы не требуются, всё равно нужно оформить всю книгу как “первую главу”. Заголовки всех глав устанавливаются в формате “Глава N”. Если требуется другой формат, его нужно будет изменить самостоятельно после генерации книги.
Поддерживает форматы: jpg, jpeg, png, tiff, heic, bmp.
Использование
./build.sh book_name
В результате в папке book_name
создадутся: папка jpeg
с подготовленными для распознавания изображениями, папка txt
с распознанными главами, файлы книг book.fb2
и book.txt
.
Решение проблем
Если качество распознавания не устраивает, можно поменять параметры подготовки изображений в скрипте img_clear.sh
. В нашем случае мы снимаем со вспышкой и некоторые обычно рекомендуемые опции не требуются.
В скрипте ocr.sh
можно попробовать параметры psm
1
, 3
, 4
. Это влияет на определение формы текста. Выбранный psm 4 подходит для обычных книг вида “один блок текста на всю страницу”.
Tesseract чувствителен к пикселям другого цвета и повороту изображения. Поэтому при съемке страниц важно следить, чтобы они были максимально ровными, без захвата сгиба книги. В противном случае строки могут быть перепутаны или появятся лишние буквы. Tesseract пытается распознать каждую группу пикселей как символ. Поэтому перед оцифровкой рекомендуется протестировать процесс на нескольких страницах. Идеально, если изображение обрезано до области текста с минимальным полем. Чем больше на снимке посторонних элементов, тем хуже будет результат распознавания.
Некоторые ошибки могут зависеть от шрифта и качества печати. Мы выбрали несколько проблемных слов и корректировали параметры скриптов ocr.sh и img_clear.sh, пока не добились наилучшего результата. Однако полностью автоматическое устранение всех ошибок вряд ли возможно с разумными затратами на написание скрипта. Тем не менее результат работы скрипта уже можно считать читаемым, если не обращать внимания на редкие мелкие опечатки.
Для удаления переносов и выравнивания текста пришлось убрать все дефисы по правому краю строк. Из-за этого естественные переносы внутри слов с дефисами также удаляются. Например, может появляться слово вроде “какойто”. Это небольшая цена за общее улучшение внешнего вида текста.
Еще есть редкая ошибка, связанная с тем, что Tesseract определяет язык слова по первым символам и не меняет его, если слово составное и состоит из двух языков. У нас появилось слово “DDOS-aTakoH” (DDOS-атакой), потому что после определения языка далее каждый символ слова соотносится с самым похожим символом его алфавита.