.png)
Как превратить фотографии бумажных документов в отсканированный документ?связано, но не то же самое, поскольку я говорю о файлах 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-файлами:
- Извлечь все страницы 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";';
- Загрузите и обработайте полученные изображения в Scan Tailor. Поместите полученные файлы изображений в отдельную папку и добавьте эту папку в New Project>Input Directory в Scan Tailor. (Я установил эту программуот PPA, как сказал в комментарии @N0rbert под основным ответом.) Некоторые страницы, содержащие настоящие изображения, а не текст, могли бы выглядеть лучше, если быдля каждого из нихвыбрано "Оттенки серого и цветной" вместо "Черно-белый" по умолчанию (здесь подразумевается текст). Запустите одну за другой перечисленные процедуры. Проверьте страницы перед запуском последней ("Вывод").
- Создайте новый PDF-файл из полученных изображений.. (Сначала проверьте, что полученные
tif
файлы соответствуют вашим требованиям.) Существует много способов создать новый PDF. Опять же, инструменты GUI, которые я пробовал, очень скоро зависали или давали странные результаты, поэтому я предпочитаю помещать полученные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 <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). Ниже приведены варианты:
- Выберите Цвет>Порог и все готово, ваше изображение станет черно-белым. Для этого вам придется сделать это для каждой страницы.
Второй вариант 2) Выберите Изображение>Режим>Индексированный>Использовать черно-белую 1-битную палитру.
Любое количество страниц вашего PDF-файла будет преобразовано в 1-битный черно-белый формат.
Редактировать 02/11/2021: Согласно запросу, поднятомуципирикус
Вот шаги, которым я следую:
- Отсканируйте страницы с помощью «простого сканирования» или Xsane. (Я обнаружил, что простое сканирование лучше работает в цвете) ИЛИ используйте уже имеющиеся отсканированные PDF-файлы.
- Файл>открыть ИЛИ перетащите файл pdf в GIMP. Здесь вам нужно указать ширину X высоту нужного вам изображения. (Проверьте, какое разрешение вам нужно, 150 dpi или 300 dpi укажите значение ширины соответственно)
- Теперь PDF-файлы, содержащие более 1 страницы, открываются как слои.
- Перейдите в меню Изображение>Режим>Индексированный>Использовать черно-белую 1-битную палитру.
- Теперь я экспортирую PDF-файл с помощью Файл > «Экспортировать как».
- Проверьте, соответствует ли каждая страница экспортированного PDF-файла требованиям. Если нет, я индивидуально обрабатываю каждую дефектную страницу следующим методом: a) Выберите Изображение> Режим> Оттенки серого b) (Если на странице слишком много серого/шума) Выберите Цвет> Экспозиция и настройте по мере необходимости. c) Выберите Цвет> Порог, и все готово, ваше изображение станет черно-белым. Для этого вам нужно сделать это для каждой дефектной страницы, чтобы она соответствовала требуемому качеству. d) Теперь я вставляю эту отредактированную страницу в этот слой исходных слоев файла PDF и удаляю слой дефектной страницы. и снова экспортирую PDF. Надеюсь, это поможет.