Получите готовый для печати черный текст на белом фоне в отсканированных файлах PDF (удалит оттенки серого или цветной фон)

Получите готовый для печати черный текст на белом фоне в отсканированных файлах PDF (удалит оттенки серого или цветной фон)

Как превратить фотографии бумажных документов в отсканированный документ?связано, но не то же самое, поскольку я говорю о файлах pdf. Обработка изображений кажется сложной в ответах на связанный вопрос, особенно потому, что она включаетобработка каждого изображения отдельно: данныймой pdf-файл содержит сотни страниц, я ожидаю, что решение будет заключаться не в обработке/редактировании изображений, а просто всканирование цифровых фотографий и документов так, как это делают настоящие. Я имею в виду что-то вроде «виртуального сканера», для которого входными данными будет фото-PDF-файл или коллекция фотографий, а выходными данными будет «обычный» отсканированный документ. (ТакжеScantailorинструмент рекомендуется - такжездесь(Похоже, сейчас версии для Linux нет.)


Этонето OCR инето преобразовании изображения в текст.

Чтобы пояснить, что я имею в виду, я приведу несколько примеров.

Естьфайлы pdf на основе текста, не изображение, а текстовые файлы (скажем, docx или odt), экспортированные в pdf. Они выглядят готовыми к печати:

введите описание изображения здесь

Вышеизложенное являетсянетто, что я здесь обсуждаю.

Меня интересуют PDF-файлы на изображениях ниже, а именно разница между отсканированными текстовыми страницами, которые выглядят слишком похожими на изображения, и отсканированными текстовыми страницами, которые выглядят как оцифрованный текст.

Первые состоят из изображений, которые выглядят какфотографии сделаныстраниц книги:

введите описание изображения здесь

или

введите описание изображения здесь

Такие копиивряд ли можно перепечатать на бумаге, так как фон тоже будет напечатан.

Вторые — это то, чего можно было бы ожидать отсканированныйтекст, и может быть распечатан:

введите описание изображения здесь

или

введите описание изображения здесь

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

Мне нужен четкий черно-белый вид «отсканированного» PDF-файла и удаление всех «реальных» деталей (особенно теней), которые нормальны на фотографии, но должны отсутствовать на печатной странице.


Как заметил @vanadium в комментарии, яищу программное решение, которое автоматически очищает изображения документа, подобно Google Scan на смартфоне.

Как сказал @user535733 в комментарии, проблема здесь, по-видимому, заключается, по крайней мере в некоторой степени, в преобразованииоттенки серого(сканированный/изображение) текств черно-белый.

решение1

scantailorбольше не поддерживается, но вы все равно можете собрать его из исходного кода и использовать.

Однакооригинальный репозиторийneeds qt4, который не так легко установить в последних версиях Ubuntu. Вы можете использовать, например,эта вилкакоторый адаптировался к qt5.

Предварительные условия:

sudo apt install libjpeg-dev zlib1g-dev libpng-dev libtiff-dev libboost-dev libxrender-dev libboost-all-dev

Монтаж:

git clone https://github.com/victl/scantailor
cd scantailor
cmake .
make
sudo make install

Отказ от ответственности: я не знаю создателя этого форка и не могу ничего сказать о безопасности его версии.


Другой вариантбыло бы использоватьScantailor продвинутый. Установить его можно через snap...

sudo snap install scantailor-advanced

... илиплоский пакет.

... или черезппа.

sudo add-apt-repository ppa:alex-p/scantailor
sudo apt update
sudo apt install scantailor # or scantailor-advanced

Быстрый тест:

введите описание изображения здесь

решение2

Как прямое решение для PDF (без ручного извлечения изображений):

Использование ocrmypdfдля восстановления OCR (как упоминалось в концедополнительныйчасть этого ответа) Я заметил, что ocrmypdf -hпоказан вариант, который звучит именно так, как запрашивается:

--remove-background Attempt to remove background from gray or color pages, setting it to white

В исходном PDF-файле уже была реализована функция OCR, которая выдает ошибку, если не используется одна из следующих опций:

-f, --force-ocr Rasterize any text or vector objects on each page, apply OCR, and save the rastered output (this rewrites the PDF)

или

-s, --skip-text Skip OCR on any pages that already contain text, but include the page in final output; useful for PDFs that contain a mix of images, text pages, and/or previously OCRed pages

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

Лучшее решениемне кажется, что сначалараспечатать в pdfисходный файл (который удаляет OCR), а затем сделать

ocrmypdf input.pdf output.pdf -l <LANG> --remove-background -v

Для английского языка эта -lопция не нужна. -vпредназначена для получения подробных сведений в терминале.

Полученный PDF-файл больше входного (из-за опции --remove-background): уменьшите размер, как указано ниже.


О Scan Tailor, как о дополнении косновной ответ

Даже его иконка иллюстрирует тот факт, что он предназначен именно для того, о чем здесь спрашивают:

![введите описание изображения здесь

Вот как использовать Scan Tailor с PDF-файлами:

  1. Извлечь все страницы PDF как файлы изображений- потому что этот инструмент не обрабатывает PDF напрямую и ему нужны изображения. Master PDF Editor может это сделать, но на моей машине он вылетает после извлечения около 80 изображений. Но его все равно можно использовать, установив новый пакет/диапазон страниц для извлечения. (PDF Mod вылетал до какой-либо обработки). После нескольких попыток я предпочитаю надежный, хотя и более медленный метод CLI с командой типа: pdftoppm MY_PDF.pdf NAME -tiff- как сказаноздесь. — Вместо tiff(что дает tifфайлы) можно использовать другие переменные, например pngили jpeg. Здесь представлен набор действий меню сервиса Dolphin для различных вариантов извлечения:
[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=application/pdf;
Actions=pdf;tif;jpeg;
X-KDE-Submenu=PDF action: EXTRACT ALL pages
Icon=application-pdf

[Desktop Action pdf]
Name=Extract pages as pdf
Icon=application-pdf
Exec=bash -c 'pdf=$(pdftk "%u" burst); kdialog --title "Extract pages" --msgbox "Extracted! $pdf";';

[Desktop Action tif]
Name=Extract pages as tif
Icon=application-pdf
Exec=bash -c 'f="%u"; pdf=$(pdftoppm "$f" "${f%%.*}" -tiff); kdialog --title "Extract pages" --msgbox "Extracted! $pdf";';


[Desktop Action jpeg]
Name=Extract pages as jpeg
Icon=application-pdf
Exec=bash -c 'f="%u"; pdf=$(pdftoppm "$f" "${f%%.*}" -jpeg); kdialog --title "Extract pages" --msgbox "Extracted! $pdf";';
  1. Загрузите и обработайте полученные изображения в Scan Tailor. Поместите полученные файлы изображений в отдельную папку и добавьте эту папку в New Project>Input Directory в Scan Tailor. (Я установил эту программуот PPA, как сказал в комментарии @N0rbert под основным ответом.) Некоторые страницы, содержащие настоящие изображения, а не текст, могли бы выглядеть лучше, если быдля каждого из нихвыбрано "Оттенки серого и цветной" вместо "Черно-белый" по умолчанию (здесь подразумевается текст). Запустите одну за другой перечисленные процедуры. Проверьте страницы перед запуском последней ("Вывод").

введите описание изображения здесь

  1. Создайте новый PDF-файл из полученных изображений.. (Сначала проверьте, что полученные tifфайлы соответствуют вашим требованиям.) Существует много способов создать новый PDF. Опять же, инструменты GUI, которые я пробовал, очень скоро зависали или давали странные результаты, поэтому я предпочитаю помещать полученные tifфайлы в отдельную папку и там запускать команду img2pdf *.tif -o out.pdf- как сказаноздесь. (Для этого может потребоваться правильное наименование/нумерация файлов. Подробнее об этомздесь.)

Полученный «адаптированный» PDF-файл будет меньше исходного, но процент уменьшения размера зависит от факторов, которые я игнорирую (но я полагаю, что страницы, содержащиеся в исходном PDF-файле, следует извлечь — на шаге 1 — в том формате, который у них уже есть; я думаю, что вместо следует использовать jpegи ; используйте в терминале, чтобы увидеть подробную информацию о формате, разрешении и других деталях перед обработкой с помощью команд выше и ниже).tifpngpdfimages -list your.pdf

Окончательный PDF-файл можно дополнительно уменьшить с помощью такой команды:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

Более подробная информация об этом,здесь.

Вот набор действий меню сервиса Dolphin, основанный на приведенной выше ссылке:

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=application/pdf;
Actions=shrink;shrink0;shrink1;shrink2;
X-KDE-Submenu=PDF action: SHRINK
Icon=application-pdf

[Desktop Action shrink]
Name=Shrink pdf to "printer" size, 300dpi
Icon=application-pdf
Exec=bash -c 'f="%u"; pdf=$(gs -dQUIET -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/printer    -sOutputFile="${f%.pdf}_printer.pdf" "$f"); kdialog --title "Shrink" --msgbox "Done! $pdf";';

[Desktop Action shrink0]
Name=Shrink pdf to "prepress" size, 300dpi
Icon=application-pdf
Exec=bash -c 'f="%u"; pdf=$(gs -dQUIET -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress    -sOutputFile="${f%.pdf}_prepress.pdf" "$f"); kdialog --title "Shrink" --msgbox "Done! $pdf";';


[Desktop Action shrink1]
Name=Shrink pdf to "ebook size, 150dpi
Icon=application-pdf
Exec=bash -c 'f="%u"; pdf=$(gs -dQUIET -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook    -sOutputFile="${f%.pdf}_small.pdf" "$f"); kdialog --title "Shrink" --msgbox "Done! $pdf";';

[Desktop Action shrink2]
Name=Shrink pdf to "screen" size, 72dpi
Icon=application-pdf
Exec=bash -c 'f="%u"; pdf=$(gs -dQUIET -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/screen    -sOutputFile="${f%.pdf}_smaller.pdf" "$f"); kdialog --title "Shrink" --msgbox "Done! $pdf";';

Я получил некоторую помощь отэтотответьте тоже.


Потеряно OCR (возможность поиска и копирования текста)во время вышеуказанной процедуры, если присутствует в исходном pdf. Чтобы получить OCR, используйте ocrmypdf input.pdf output.pdf для английского, как сказаноздесь. Для других языков найдите их с помощью apt-cache search tesseract-ocrи установите их. Добавьте -l <LANG>в конце команды для определенных языков; большездесь; см. также их именаздесь.

Вот действие меню сервиса Dolphin для распознавания текста на румынском языке с двумя вариантами (один с ходом выполнения в терминале и фиксированным именем вывода, другой с фоновым процессом, но с именем вывода, основанным на вводе; я хотел бы иметь и процесс в терминале, и имя вывода, основанное на вводе, но не знаю как; если кто-то может это сделать, пожалуйста, напишите здесь!). Для английского языка замените «Romanian» и удалите переменную -l ron:

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=application/pdf;
Actions=ocr1;ocr2;
X-KDE-Submenu=PDF action: apply OCR
Icon=application-pdf

[Desktop Action ocr1]
Name=Apply OCR Romanian (see progress in terminal; output name: ocr_ro.pdf!)
Icon=application-pdf
Exec=konsole --noclose -e ocrmypdf "%u" ocr_ro.pdf -l ron

[Desktop Action ocr2]
Name=Apply OCR Romanian (backgroud process: NO terminal! input>output name)
Icon=application-pdf
Exec=bash -c 'f="%u"; ocrmypdf "$f" "${f%.pdf}_ocr.pdf" -l ron;'

(Извлечение и обработка изображений, а также «печать в формате PDF» удаляют OCR, но уменьшают размер с помощью Ghostscript, как указано выше)не, поэтому «сжатие» можно применять до или после OCR.)

решение3

Я получил довольно хороший результат, используя imageMagick и следующий скриптhttp://www.fmwconcepts.com/imagemagick/shadowhighlight/index.php

Вот результат с использованием следующих параметров:

./shadowhighlight -ma 100 -sa 100 -ha 00 -hw 0 -bc 20 inputFile.png OutputFile.png

введите описание изображения здесь

решение4

Просто установите Gimp (предпочтительно используйте appimage). Ниже приведены варианты:

  1. Выберите Цвет>Порог и все готово, ваше изображение станет черно-белым. Для этого вам придется сделать это для каждой страницы.

Второй вариант 2) Выберите Изображение>Режим>Индексированный>Использовать черно-белую 1-битную палитру.

Любое количество страниц вашего PDF-файла будет преобразовано в 1-битный черно-белый формат.

Редактировать 02/11/2021: Согласно запросу, поднятомуципирикус

Вот шаги, которым я следую:

  1. Отсканируйте страницы с помощью «простого сканирования» или Xsane. (Я обнаружил, что простое сканирование лучше работает в цвете) ИЛИ используйте уже имеющиеся отсканированные PDF-файлы.
  2. Файл>открыть ИЛИ перетащите файл pdf в GIMP. Здесь вам нужно указать ширину X высоту нужного вам изображения. (Проверьте, какое разрешение вам нужно, 150 dpi или 300 dpi укажите значение ширины соответственно)
  3. Теперь PDF-файлы, содержащие более 1 страницы, открываются как слои.
  4. Перейдите в меню Изображение>Режим>Индексированный>Использовать черно-белую 1-битную палитру.
  5. Теперь я экспортирую PDF-файл с помощью Файл > «Экспортировать как».
  6. Проверьте, соответствует ли каждая страница экспортированного PDF-файла требованиям. Если нет, я индивидуально обрабатываю каждую дефектную страницу следующим методом: a) Выберите Изображение> Режим> Оттенки серого b) (Если на странице слишком много серого/шума) Выберите Цвет> Экспозиция и настройте по мере необходимости. c) Выберите Цвет> Порог, и все готово, ваше изображение станет черно-белым. Для этого вам нужно сделать это для каждой дефектной страницы, чтобы она соответствовала требуемому качеству. d) Теперь я вставляю эту отредактированную страницу в этот слой исходных слоев файла PDF и удаляю слой дефектной страницы. и снова экспортирую PDF. Надеюсь, это поможет.

Связанный контент