Como extrair texto com OCR de um PDF no Linux?


Respostas:


25

Tive sucesso com a porta Linux licenciada pelo BSD do sistema Cuneiform OCR.

Parece que nenhum pacote binário está disponível, então você precisa compilá-lo a partir do código-fonte. Certifique-se de ter as bibliotecas ImageMagick C ++ instaladas para oferecer suporte a essencialmente qualquer formato de imagem de entrada (caso contrário, ele aceitará apenas BMP).

Embora pareça estar essencialmente não documentado, exceto por um breve arquivo README, eu achei os resultados do OCR muito bons. O bom disso é que ele pode gerar informações de posição para o texto do OCR no formato hOCR , para que seja possível colocar o texto de volta na posição correta em uma camada oculta de um arquivo PDF. Dessa forma, você pode criar PDFs "pesquisáveis" a partir dos quais é possível copiar texto.

Usei o hocr2pdf para recriar PDFs a partir dos resultados originais de PDFs e OCR somente de imagem. Infelizmente, o programa parece não oferecer suporte à criação de PDFs de várias páginas; portanto, você pode precisar criar um script para lidar com eles:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    cuneiform -f hocr -o "$base.html" "$page"
    hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done

# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf

rm -rf -- "$tmpdir"

Observe que o script acima é muito rudimentar. Por exemplo, ele não retém nenhum metadado do PDF.


Alguma idéia para melhorar esse script para adicionar um estágio de verificação ortográfica para corrigir erros na etapa de reconhecimento?
Gökhan Sever

@ Gökhan Sever, você quer dizer adicionar verificação ortográfica interativa onde o usuário é solicitado a substituir palavras com erros ortográficos / desconhecidos? Eu acho que você poderia fazer isso adicionando algo como aspell check --mode=html "$base.html"no script logo após executar o cuneiforme.
Jukka Matilainen

Esta é uma solução. No entanto, sem ver todo o contexto do texto, é difícil fazer correções. Seria melhor ver uma interface criada dentro do ocrfeeder.
Gökhan Sever

11
A propósito, eu uso o tesseract para reconhecimento de caracteres: substituindo a linha cuneiforme por: tesseract "$ page" "$ base" hocr
Gökhan Sever

11
Correção pequena: A linha para o tesseract pelo menos para outros idiomas que não o inglês, aqui, por exemplo, alemão (= deu) é: `tesseract" $ page "" $ base "-l deu hocr` (é claro que você deve remover o ``) .
Keks Dose

14

Veja se o pdftotext funcionará para você. Se não estiver na sua máquina, você precisará instalar o pacote poppler-utils

sudo apt-get install poppler-utils 

Você também pode encontrar o kit de ferramentas em pdf .

Uma lista completa de softwares pdf aqui na wikipedia.

Edit: Como você precisa de recursos de OCR, acho que precisará tentar uma abordagem diferente. (ou seja, não consegui encontrar um conversor linux pdf2text que faça OCR).

  • Converta o pdf em uma imagem
  • Digitalize a imagem para texto usando as ferramentas de OCR

Converter pdf em imagem

  • gs: O comando abaixo deve converter pdf de várias páginas em arquivos tiff individuais.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = letra -sOutputFile = filename_% 04d.tif -dNOPAUSE -dBATCH - nome do arquivo

  • Utilitários do ImageMagik : Existem outras perguntas no site do SuperUser sobre o uso do ImageMagik que você pode usar para ajudá-lo a fazer a conversão.

    converter foo.pdf foo.png

Converter imagem em texto com OCR

Retirado da lista de Wikipedia de software de OCR


2
Este programa também funciona para documentos de texto manuscritos?
Ivo Flipse 24/08/09

11
Não, acho que não possui recursos de OCR. Pode apenas extrair o texto incorporado no pdf. Página de manual
nagul

Sim, isso funciona para documentos PDF que já vêm com o texto incorporado. Meu caso é exatamente um caso em que não existe.
Helder S Ribeiro

11
@ obvio171 Adicionada a melhor opção que encontrei para que o OCR funcionasse no seu caso.
nagul

12

Google docs vai agora usar OCR para converter seus documentos de imagem / pdf enviados ao texto. Eu tive um bom sucesso com isso.

Eles estão usando o sistema de OCR usado para o gigantesco projeto do Google Livros .

No entanto, é preciso observar que apenas PDFs com tamanho de 2 MB serão aceitos para processamento.

Atualização
1. Para testar, faça o upload de um PDF com <2 MB para o Google Docs a partir de um navegador da Web.
2. Clique com o botão direito do mouse no documento enviado e clique em "Abrir com o Google Docs".
... O Google Docs será convertido em texto e enviado para um novo arquivo com o mesmo nome, mas o Google Docs digitará a mesma pasta.


A resposta não é realmente específica do Ubuntu, mas quero realmente agradecer: solução BRILHANTE! :)
Pitto 28/03

Isso foi realmente útil :) Fiz upload de um arquivo de 50 MB ontem e funcionou. Parece que eles aumentaram o limite de tamanho.
Gaurav

2

Geza Kovacs criou um pacote Ubuntu que é basicamente um script usando hocr2pdfo Jukka sugerido, mas que torna as coisas um pouco mais rápidas de configurar.

No post do fórum do Geza sobre o Ubuntu, com detalhes sobre o pacote ...

Adicionando o repositório e instalando no Ubuntu

sudo add-apt-repository ppa:gezakovacs/pdfocr
sudo apt-get update
sudo apt-get install pdfocr

Executando ocr em um arquivo

pdfocr -i input.pdf -o output.pdf

Repositório do GitHub para o código https://github.com/gkovacs/pdfocr/


2

A melhor e mais fácil maneira de usá- pypdfocrlo não muda o pdf

pypdfocr your_document.pdf

No final, você terá outro your_document_ocr.pdfcomo deseja com texto pesquisável. O aplicativo não altera a qualidade da imagem. Aumenta um pouco o tamanho do arquivo adicionando o texto da sobreposição.

Atualização em 3 de novembro de 2018:

pypdfocrnão é mais suportado desde 2016 e notei alguns problemas por não serem mentidos. ocrmypdf( module ) faz um trabalho semelhante e pode ser usado assim:

ocrmypdf in.pdf out.pdf

Para instalar:

pip install ocrmypdf

ou

apt install ocrmypdf

1

O PDFBeads funciona bem para mim. Este tópico " Converter imagens digitalizadas em um único arquivo PDF " me colocou em funcionamento. Para uma digitalização de livros em preto e branco, você precisa:

  1. Crie uma imagem para todas as páginas do PDF; qualquer um dos exemplos de gs acima deve funcionar
  2. Gere saída hOCR para cada página; Eu usei o tesseract (mas observe que o cuneiforme parece funcionar melhor).
  3. Mova as imagens e os arquivos hOCR para uma nova pasta; os nomes dos arquivos devem corresponder; portanto, file001.tif precisa de file001.html, file002.tif file002.html etc.
  4. Na nova pasta, execute

    pdfbeads * > ../Output.pdf
    

Isso colocará o PDF OCR ordenado no diretório pai.


1

outro script usando o tesseract:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    tesseract "$base.tiff" $base
done

# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output

rm -rf -- "$tmpdir"

1

A biblioteca OCR da Asprise funciona na maioria das versões do Linux. Pode receber entrada e saída de PDF como PDF de pesquisa.

É um pacote comercial. Faça o download de uma cópia gratuita do Asprise OCR SDK para Linux aqui e execute-a desta maneira:

aocr.sh input.pdf pdf

Nota: o 'pdf' autônomo especifica o formato de saída.

Disclaimer: Eu sou um funcionário da empresa que produz o produto acima.


Esta publicação afirma que o produto pode fazê-lo, o que é uma dica útil que deve ser publicada como um comentário. Não explica como realmente resolver o problema, que é o que as respostas devem fazer. Você pode expandir sua resposta para que alguém possa ver como fazer a solução?
fixer1234

Obrigado @ fixer1234, editei-o para incluir o comando.
Asprise Support

0

Experimente o Apache PDFBox para extrair conteúdo de texto do arquivo PDF. No caso de imagens incorporadas em arquivos PDF, use o ABBYY FineReader Engine CLI para Linux para extrair texto.


Eu achei o ABBYY OCR bastante lamentável, um dos programas menos capazes que eu tentei. Pode ser adequado com uma imagem muito limpa do texto fonte padrão de tamanho típico corpo de texto, sem fontes mistas, tamanhos mistos, layout complexo, gráficos, linhas, etc.
fixer1234

Ya, eu também tentei, funciona bem. Eu tenho alguma dúvida, você pode me ajudar?
Praveen Kumar KR

Se o que você precisa não é abordado em outras respostas aqui, a melhor coisa a fazer é fazer sua própria pergunta. Isso fará com que seja exposto a muitos olhos.
fixer1234
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.