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

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


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

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

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

enter image description here

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

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

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

enter image description here

или

enter image description here

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

Вторые - то, что можно ожидать от отсканированного текста, и их можно распечатать:

enter image description here

или

enter image description here

Картинкоподобный pdf может быть уже обработан OCR, а его текст доступен для поиска, и все равно выглядеть как коллекция (постраничных) фотографий: OCR здесь не проблема.

Что мне нужно, так это четкий черно-белый вид "отсканированного" pdf и удаление всех "реальных" деталей (особенно теней), которые нормальны на фотографии, но должны отсутствовать на печатной странице.


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

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

5
задан 26 August 2021 в 17:01

4 ответа

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

Однако исходный репозиторий требует 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 advanced . Вы можете установить его через snap ...

sudo snap install scantailor-advanced

... или flatpak .

... или через ppa .

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

Быстрая проверка:

enter image description here

9
ответ дан 4 September 2021 в 09:28

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

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

- remove-background Попытка удалить фон с серых или цветных страниц, установив его на белый

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

-f, --force-ocr Растеризовать любой текст или векторные объекты на каждой странице, применить OCR и сохранить растрированный вывод (это перезаписывает PDF-файл)

или

-s, --skip-text Пропускать распознавание текста на любых страницах, которые уже содержат текст, но включать страницу в окончательный вывод; полезно для PDF-файлов, которые содержат сочетание изображений, текстовых страниц и / или страниц с ранее распознанным распознаванием текста

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

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

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

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

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


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

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

![enter image description here

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

  1. Извлечь все страницы PDF как файлы изображений - потому что этот инструмент не обрабатывает PDF напрямую и требует изображений. Master PDF Editor может это сделать, но на моем компьютере он дает сбой после извлечения около 80 изображений. Но его все еще можно использовать, установив новый пакет / диапазон страниц для извлечения. (Мод PDF разбился перед любой обработкой). Что я предпочитаю после нескольких испытаний, так это надежный, хотя и более медленный метод интерфейса командной строки с такой командой: 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 под основным ответом.) Некоторые страницы, содержащие реальные изображения, а не текст, могут выглядеть лучше, если для каждой из них ] выбрано «Оттенки серого и цвет» вместо стандартного «Черно-белый» (предназначенного здесь для текста). Выполните одну за другой перечисленные процедуры. Проверяйте страницы перед запуском последней («Вывод»).

enter image description here

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

Полученный "адаптированный" PDF-файл будет меньше исходного, но процент уменьшения размера зависит от на факторы, которые я игнорирую (но я полагаю, что страницы, содержащиеся в исходном PDF-файле, должны быть извлечены - на шаге 1 - в том формате, который у них уже есть; я думаю, что jpeg и tif должны использоваться вместо png ; используйте pdfimages -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 в конце команды для определенных языков; подробнее здесь ; см. их имена также здесь .

Вот действие сервисного меню Dolphin для румынского OCR с двумя вариантами (один с прогрессом в терминале и фиксированным именем вывода, другой с фоновым процессом, но с именем вывода, основанным на вводе; я хотел бы, чтобы оба процесса были в терминале и имя вывода основано на вводе, но не знаю как;если кто-то может это сделать, напишите здесь!). Для английского языка замените «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.)

2
ответ дан 4 September 2021 в 09:28

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

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

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

enter image description here

1
ответ дан 4 September 2021 в 09:28

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

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

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

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

1
ответ дан 4 September 2021 в 09:28

Другие вопросы по тегам:

Похожие вопросы: