.png)
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.
Há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:
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:
ou
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:
ou
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
scantailor
nã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:
Responder2
Como solução direta em PDF (sem extração manual de imagens):
Usando ocrmypdf
para restaurar o OCR (conforme mencionado no final docomplementarparte desta resposta) notei que ocrmypdf -h
mostra 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 -l
opção não é necessária. -v
é para detalhes detalhados no terminal.
O pdf resultante é maior que o de entrada (por causa da --remove-background
opçã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:
Veja como usar o Scan Tailor com PDFs:
- 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 detiff
(que fornecetif
arquivos), por exemplopng
oujpeg
. 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";';
- 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”).
- Crie um novo PDF a partir das imagens resultantes. (Primeiro verifique se os
tif
arquivos 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 ostif
arquivos 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 jpeg
que tif
deveriam ser usados em vez de png
usar pdfimages -list your.pdf
no 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-ocr
e 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 ron
variá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
Responder4
Basta instalar o Gimp (de preferência use appimage). A seguir estão as opções:
- 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:
- 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.
- 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)
- Agora o arquivo pdf com mais de 1 página abre como camadas.
- Vá em Imagem>Modo>Indexado>Usar paleta preto e branco de 1 bit
- Agora eu exporto o pdf usando Arquivo> “Exportar como”
- 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.