Мой Java-проект имеет дело с OCRing PDF-файлов для их индексации.Каждая страница PDF преобразуется в png, который затем передается в тессеракт 4.
Для преобразования pdf-> png используется renderImageWithDPI
из PDFBox PdfRenderer:
buffImage = pdfRenderer.renderImageWithDPI (currentPage,PNG_DENSITY, ImageType.GRAY);
с PNG_DENSITY = 300
в соответствии с рекомендациями в вики Тессеракта, чтобы получить наилучшие результаты.
Команда OCR:
Команда, используемая для tesseract:
tesseract input.png output -l fra --psm 1 --oem 1
Я также пробовал --psm 2 or 3
, которая также включает сегментацию страницы, т.е.
1 Автоматическая сегментация страницы с помощью экранного меню.
2 Автоматическая сегментация страницы, но без OSD или OCR.
3 Полностью автоматическая сегментация страницы, но без OSD.(По умолчанию)
С отсканированным PDF (производитель / создатель Adobe Acrobat 7.0, который включает в себя защищенное авторским правом содержимое, поэтому я не могу поделиться им) из 146 страниц, tesseract делает бесконечные вычисления (процесс никогда не заканчивается) на заданной странице (85).
Поскольку тестирование было слишком долгим (то есть: подождите, пока страница 85 не будет распознана), я решил создать фрагмент этого PDF-файла с помощью функции печати в файл Evince.
Теперьpdf, созданный Evince (производитель / создатель - cairo 1.14.8), Tesseract успешно с ним справляется (т. е. изображение распознается).
Разница в разрешении изображения.Изображение с ошибкой составляет 4991x3508 пикселей, тогда как изображение с успехом составляет всего 3507x2480 пикселей.
Обратите внимание: tesseract в «Разреженный текст с помощью экранного меню» (т. Е. --Psm 12) обрабатывает страницу «успешно»хотя текст (в 2 столбцах) не понятен (то есть 2 столбца смешаны)
РЕДАКТИРОВАТЬ после нескольких проб и ошибок Похоже, что входное изображение должно иметьширина строго меньше 4000 пикселей для работы с сегментацией страницы.Глядя на исходный код Tesseract, в классе, называемом «pgedit», размер холста кажется ограниченным 4000 x 4000, поскольку конструктор «ScrollView» (для чего бы то ни было):
ScrollView::ScrollView(const char* name, int x_pos, int y_pos, int x_size,
int y_size, int x_canvas_size, int y_canvas_size, bool y_axis_reversed)
Так что мой вопросТеперь, почему существует ограничение в 4000 пикселей в ширину / высоту для использования сегментации страницы, и что я должен делать, если страница в формате PDF, преобразованная в png с разрешением 300 точек на дюйм, превышает 4000 пикселей (в ширину или в высоту или в обоих случаях)?
Любая помощь приветствуется,