Isso foi discutido há um ano aqui:
OCR em lote para muitos arquivos PDF (ainda não OCR)?
Existe alguma maneira de agrupar PDFs de OCR que ainda não foram OCR? Acho que esse é o estado atual das coisas que lidam com dois problemas:
PDFs de OCR em lote
janelas
Acrobat - este é o mecanismo ocr mais direto que processa o OCR em lote. O único problema parece ser 1) ele não pula arquivos que já foram OCRed 2) tenta lançar um monte de PDFs nele (alguns antigos) e vê-lo travar. É um pouco de buggy. Ele avisará você sobre cada erro encontrado (embora você possa dizer ao software para não notificá-lo. Mas, novamente, ele morre horrivelmente em certos tipos de PDFs, portanto sua milhagem pode variar.
ABBYY FineReader (Lote / Scansnap), Omnipage - Esses devem ser alguns dos piores programas de software conhecidos pelo homem. Se você descobrir como automatizar totalmente o OCR em lote (sem aviso) de PDFs salvando com o mesmo nome , poste aqui. Parece que as únicas soluções que eu encontrei falharam em algum lugar - renomear, não totalmente automatizado etc. etc. Na melhor das hipóteses, existe uma maneira de fazer isso, mas a documentação e a programação são tão horríveis que você nunca descobrirá.
ABBYY FineReader Engine , ABBYY Recognition Server - Essas são realmente mais soluções corporativas, provavelmente você seria melhor se o acrobat fosse executado em uma pasta e tentasse eliminar PDFs que causam erros / travam o programa do que passar pelo incômodo de tentar instalar um software de avaliação (supondo que você seja um usuário final simples). Não parece um custo competitivo para o usuário pequeno.
** Estação de trabalho Autobahn DX **, o custo deste produto é tão proibitivo que você provavelmente poderá comprar 6 cópias do acrobat. Não é realmente uma solução para o usuário final. Se você é uma configuração corporativa, isso pode valer a pena para você.
Linux
- WatchOCR - não é mais desenvolvido, e basicamente impossível de rodar nas distribuições modernas do Ubuntu
- pdfsandwich - não é mais desenvolvido, basicamente impossível de ser executado nas distribuições modernas do Ubuntu
- ** ABBY LINUX OCR ** - isso deve ser scriptável e parece ter bons resultados:
http://www.splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison
No entanto, como muitos outros produtos ABBYY que eles cobram pela página, novamente, é melhor tentar fazer com que o Acrobat Batch OCR funcione.
** Ocrad, GOCR, OCRopus, tesseract, ** - estes podem funcionar, mas existem alguns problemas:
- Os resultados de OCR não são tão bons quanto, por exemplo, acrobat para alguns deles (veja o link acima).
- Nenhum dos programas coleta um arquivo PDF e gera um arquivo PDF. Você precisa criar um script e separar o PDF primeiro, executar os programas em cada um deles e, em seguida, remontar o arquivo como um pdf
- Depois de fazer isso, você pode descobrir, como eu fiz, que (tesseract) cria uma camada de OCR que é deslocada. Portanto, se você pesquisar a palavra 'the', receberá um destaque da parte da palavra ao lado.
DjVu em lote → Converter em PDF - ainda não o analisou, mas parece uma solução horrível e abrangente.
Conectados
- PDFcubed.com - vamos lá, não é realmente uma solução em lote.
- ABBYY Cloud OCR - não tenho certeza se essa é realmente uma solução em lote, de qualquer forma, você deve pagar pela página e isso pode ficar bastante caro.
Identificando PDFs não OCR
Esse é um problema um pouco mais fácil, que pode ser resolvido facilmente no Linux e muito menos no Windows. Consegui codificar um script perl usando pdffont
para identificar se as fontes estão incorporadas para determinar quais arquivos não são OCR.
"Soluções" atuais
Use um script para identificar PDFs não OCR (para não executar novamente milhares de PDFs OCR) e copie-os para um diretório temporário (mantendo a árvore de diretórios correta) e use o Acrobat no Windows para executá-los, na esperança de que os menores lotes não falham.
use o mesmo script, mas faça com que uma das ferramentas linux ocr funcione corretamente, arriscando a qualidade do ocr.
Acho que vou tentar o número 1, estou preocupado demais com os resultados das ferramentas de OCR do Linux (não acho que alguém tenha feito uma comparação) e separar os arquivos e juntá-los novamente parece codificação desnecessária se a Adobe puder realmente agrupar o OCR em um diretório sem sufocar.
Se você quiser uma solução totalmente gratuita, precisará usar um script para identificar os PDFs não OCR (ou apenas executar novamente os OCR), e então usar uma das ferramentas do linux para experimentá-los. O Teseract parece ter os melhores resultados, mas, novamente, algumas dessas ferramentas não são bem suportadas nas versões modernas do Ubuntu, mas se você puder configurá-lo e corrigir o problema que tive, a camada de imagem não corresponde à camada de correspondência de texto ( com tesseract), você teria uma solução bastante viável e mais uma vez Linux> Windows.
Você tem uma solução funcional para automatizar totalmente PDFs de OCR em lote , ignorando arquivos já OCR mantendo o mesmo nome, com alta qualidade ? Se assim for, eu realmente aprecio a entrada.
Script Perl para mover arquivos não OCR para um diretório temporário. Não é possível garantir que isso funcione e provavelmente precise ser reescrito, mas se alguém fizer com que funcione (supondo que não funcione) ou funcione melhor, avise-me e publicarei uma versão melhor aqui.
#!/usr/bin/perl
# move non-ocred files to a directory
# change variables below, you need a base dir (like /home/joe/), and a sourcedirectory and output
# direcotry (e.g books and tempdir)
# move all your pdfs to the sourcedirectory
use warnings;
use strict;
# need to install these modules with CPAN or your distros installer (e.g. apt-get)
use CAM::PDF;
use File::Find;
use File::Basename;
use File::Copy;
#use PDF::OCR2;
#$PDF::OCR2::CHECK_PDF = 1;
#$PDF::OCR2::REPAIR_XREF = 1;
my $basedir = '/your/base/directory';
my $sourcedirectory = $basedir.'/books/';
my @exts = qw(.pdf);
my $count = 0;
my $outputroot = $basedir.'/tempdir/';
open( WRITE, >>$basedir.'/errors.txt' );
#check file
#my $pdf = PDF::OCR2->new($basedir.'/tempfile.pdf');
#print $pdf->page(10)->text;
find(
{
wanted => \&process_file,
# no_chdir => 1
},
$sourcedirectory
);
close(WRITE);
sub process_file {
#must be a file
if ( -f $_ ) {
my $file = $_;
#must be a pdf
my ( $dir, $name, $ext ) = fileparse( $_, @exts );
if ( $ext eq '.pdf' ) {
#check if pdf is ocred
my $command = "pdffonts \'$file\'";
my $output = `$command`;
if ( !( $output =~ /yes/ || $output =~ /no/ ) ) {
#print "$file - Not OCRed\n";
my $currentdir = $File::Find::dir;
if ( $currentdir =~ /$sourcedirectory(.+)/ ) {
#if directory doesn't exist, create
unless(-d $outputroot.$1){
system("mkdir -p $outputroot$1");
}
#copy over file
my $fromfile = "$currentdir/$file";
my $tofile = "$outputroot$1/$file";
print "copy from: $fromfile\n";
print "copy to: $tofile\n";
copy($fromfile, $tofile) or die "Copy failed: $!";
# `touch $outputroot$1/\'$file\'`;
}
}
}
}
}