Obtenha texto preto pronto para impressão em fundo branco em arquivos PDF digitalizados (remova tons de cinza ou fundo colorido)

Obtenha texto preto pronto para impressão em fundo branco em arquivos PDF digitalizados (remova tons de cinza ou fundo colorido)

Como posso transformar fotos de documentos em papel em documentos digitalizados?está relacionado, mas não é a mesma coisa, já que estou falando de arquivos PDF. O processamento de imagens parece complicado nas respostas da questão vinculada, principalmente porque envolveprocessando cada imagem separadamente: dadomeu pdf tem centenas de páginas, a solução que espero não é a de processar/editar imagens, mas simplesmente dedigitalizando fotos e documentos digitais da mesma forma que os reais. Quero dizer algo como um "scanner virtual" para o qual a entrada seria um PDF baseado em foto ou uma coleção de fotos e a saída seria um documento digitalizado "normal". (Também oScantailorferramenta recomendada - tambémaqui- parece não ter uma versão Linux agora.)


Isso énãosobre OCR enãosobre como converter imagem em texto.

Para esclarecer o que quero dizer, postarei alguns exemplos.

arquivos pdf baseados em texto, não imagem, e são arquivos de texto (digamos docx ou odt) exportados para pdf. Eles parecem prontos para serem impressos:

insira a descrição da imagem aqui

O acima énãoo que discuto aqui.

O que me interessa são os PDFs das imagens abaixo, ou seja, a diferença entre páginas de texto digitalizadas que se parecem muito com imagens e páginas de texto digitalizadas que se parecem com texto digitalizado.

Os primeiros são formados por imagens que se parecemfotos tiradasde páginas do livro:

insira a descrição da imagem aqui

ou

insira a descrição da imagem aqui

Tais cópiasdificilmente pode ser reimpresso em papel, pois o plano de fundo também será impresso.

Os segundos são o que se esperaria dedigitalizadotexto e pode ser impresso:

insira a descrição da imagem aqui

ou

insira a descrição da imagem aqui

O PDF semelhante a uma imagem pode já ter sido processado por OCR e seu texto pesquisável, e ainda assim parecer uma coleção de fotos (páginas): OCR não é o problema aqui.

O que eu quero é a aparência clara em preto e branco do PDF "digitalizado" e a remoção de todos os detalhes "reais" (especialmente sombras) que são normais em uma foto, mas deveriam estar ausentes em uma página impressa.


Como @vanadium notou em um comentário, estouprocurando uma solução de software que limpe automaticamente as imagens de um documento, muito parecido com o Google Scan em um smartphone.

Como @user535733 disse em um comentário, o problema aqui parece ser, pelo menos até certo ponto, o de converter oescala de cinza(digitalizado/imagem) textopara preto e branco.

Responder1

scantailornão é mais mantido, mas você ainda pode construí-lo a partir do código-fonte e usá-lo.

No entanto, orepositório originalprecisa qt4, que não é facilmente instalável nas versões recentes do Ubuntu. Você pode usar, por exemploeste garfoque se adaptou qt5.

Pré-requisitos:

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

Instalação:

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

Isenção de responsabilidade: não conheço o mantenedor deste fork e não posso dizer nada sobre a segurança de sua versão.


Outra opçãoseria usarScantailor avançado. Você pode instalá-lo através de snap...

sudo snap install scantailor-advanced

... oupacote plano.

... ou atravésppa.

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

Teste rápido:

insira a descrição da imagem aqui

Responder2

Como solução direta em PDF (sem extração manual de imagens):

Usando ocrmypdfpara restaurar o OCR (conforme mencionado no final docomplementarparte desta resposta) notei que ocrmypdf -hmostra uma opção que parecia exatamente o que é perguntado:

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

O pdf inicial já tinha OCR, o que dá erro a menos que uma das seguintes opções seja usada:

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

ou

-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

Aplicar cada um separadamente a um dos meus arquivos grandes com centenas de páginas que já tinham OCR travou o processo.

A melhor soluçãoparece-me primeiroimprimir em pdfo arquivo inicial (que remove o OCR) e, em seguida, faça

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

Para inglês, a -lopção não é necessária. -vé para detalhes detalhados no terminal.

O pdf resultante é maior que o de entrada (por causa da --remove-backgroundopção): reduza o tamanho conforme indicado abaixo.


Sobre o Scan Tailor, como complemento aoresposta principal

Até mesmo seu ícone ilustra o fato de que se destina exatamente ao que é solicitado aqui:

![insira a descrição da imagem aqui

Veja como usar o Scan Tailor com PDFs:

  1. Extraia todas as páginas PDF como arquivos de imagem- porque esta ferramenta não processa PDF diretamente e precisa de imagens. O Master PDF Editor pode fazer isso, mas na minha máquina ele trava após extrair cerca de 80 imagens. Mas ainda pode ser usado definindo um novo lote/intervalo de páginas a serem extraídas. (PDF Mod travou antes de qualquer processamento). O que eu prefiro depois de alguns testes é um método CLI confiável, embora mais lento, com um comando como: pdftoppm MY_PDF.pdf NAME -tiff- como ditoaqui. — Outras variáveis ​​podem ser usadas em vez de tiff(que fornece tifarquivos), por exemplo pngou jpeg. Veja aqui um conjunto de ações do menu do serviço Dolphin para as diversas opções de extração:
[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. Carregue e processe as imagens resultantes no Scan Tailor. Coloque os arquivos de imagem resultantes em uma pasta separada e adicione essa pasta em Novo projeto>Diretório de entrada no Scan Tailor. (Eu instalei esse programada PPA, conforme dito em um comentário de @N0rbert na resposta principal.) Algumas páginas contendo imagens reais e não texto podem parecer melhores separa cada um delesestá selecionado "Escala de cinza e colorido" em vez do padrão "Preto e branco" (referido aqui para texto). Execute um por um os procedimentos listados. Verifique as páginas antes de executar a última (“Saída”).

insira a descrição da imagem aqui

  1. Crie um novo PDF a partir das imagens resultantes. (Primeiro verifique se os tifarquivos resultantes estão como você deseja.) Há muitas maneiras de criar um novo PDF. Mais uma vez, as ferramentas GUI que experimentei travaram logo ou deram resultados estranhos, então prefiro colocar os tifarquivos resultantes em uma pasta separada e executar o comando lá img2pdf *.tif -o out.pdf- como ditoaqui. (Isso pode exigir nomenclatura/numeração adequada dos arquivos. Mais sobre issoaqui.)

O pdf "sob medida" resultante será menor que o inicial, mas a porcentagem de redução de tamanho varia dependendo de fatores que ignoro (mas imagino que as páginas contidas no pdf inicial devam ser extraídas — no passo 1 — no format eles já possuem; acho jpegque tifdeveriam ser usados ​​em vez de pngusar pdfimages -list your.pdfno terminal para ver detalhes sobre formato, dpi e outros detalhes antes de processar com os comandos acima e abaixo).

O pdf final pode ser reduzido ainda mais com um comando como:

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

Mais detalhes sobre isso,aqui.

Aqui está um conjunto de ações do menu do serviço Dolphin com base no link acima:

[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";';

Eu recebi alguma ajuda deesseresponda também.


OCR (recurso de pesquisa e cópia de texto) foi perdidodurante o procedimento acima, se presente no pdf inicial. Para obter OCR, use ocrmypdf input.pdf output.pdf Para inglês, como disseaqui. Para outros idiomas, procure-os com apt-cache search tesseract-ocre instale-os. Adicione -l <LANG>no final do comando para idiomas específicos; maisaqui; veja seus nomes tambémaqui.

Aqui está uma ação do menu do serviço Dolphin para OCR romeno com duas opções (uma com progresso no terminal e nome de saída fixo, a outra com processo em segundo plano, mas com nome de saída baseado na entrada; eu gostaria de ter o processo no terminal e o nome de saída baseado na entrada, mas não sei como; se alguém puder fazer isso, poste aqui!). Para inglês, substitua "Romeno" e remova a -l ronvariável:

[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;'

(Extrair e processar imagens, bem como 'imprimir como pdf' remove o OCR, mas reduz o tamanho com ghostscript como acimanão, então a "redução" pode ser aplicada antes ou depois do OCR.)

Responder3

Obtive um resultado muito bom usando imageMagick e o seguinte scripthttp://www.fmwconcepts.com/imagemagick/shadowhighlight/index.php

Aqui está o resultado usando os seguintes parâmetros:

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

insira a descrição da imagem aqui

Responder4

Basta instalar o Gimp (de preferência use appimage). A seguir estão as opções:

  1. Selecione Cor> Limite e pronto, sua imagem ficará em preto e branco. pois para isso você tem que fazer isso para cada página

Segunda opção 2) Selecione Imagem>Modo>Indexado>Usar paleta preto e branco de 1 bit

Qualquer número de páginas que seu PDF possa ter, isso converterá tudo em preto e branco de 1 bit.

Editar em 11/02/2021: conforme consulta levantada porcipirício

Aqui estão as etapas que sigo:

  1. Digitalize páginas com "digitalização simples" ou Xsane. (Descobri que a digitalização simples funciona melhor em cores) OU use o PDF digitalizado já disponível.
  2. Arquivo> abrir OU arraste e solte o arquivo PDF no GIMP. Aqui você precisa fornecer a largura X a altura da imagem que você precisa. (Verifique qual dpi você precisa 150 dpi ou 300 dpi e forneça o valor da largura de acordo)
  3. Agora o arquivo pdf com mais de 1 página abre como camadas.
  4. Vá em Imagem>Modo>Indexado>Usar paleta preto e branco de 1 bit
  5. Agora eu exporto o pdf usando Arquivo> “Exportar como”
  6. Verifique se cada página do PDF exportado está de acordo com os requisitos. Caso contrário, processo individualmente cada página defeituosa com o seguinte método: a) Selecione Imagem> Modo> Escala de cinza b) (Se houver muito cinza/ruído na página) Selecione Cor> Exposição e ajuste conforme necessário. c) Selecione Cor> Limite e pronto, sua imagem ficará em preto e branco. pois para isso você deve fazer isso para que cada página com defeito corresponda à qualidade exigida. d) Agora eu insiro esta página editada nesta camada de camadas do arquivo PDF original e excluo a camada de página defeituosa. e exporte o PDF novamente. Espero que isso ajude.

informação relacionada