OCR par lots de nombreux PDF

Cela a été discuté il y a un an ici:

OCR par lots pour de nombreux fichiers PDF (pas déjà OCRed)?

Existe-t-il un moyen de grouper des PDF OCR qui n'ont pas déjà été OCRed ? C'est, je pense, l'état actuel des choses qui traite de deux questions:

Pdf OCR par lots

Fenêtres

  • Acrobat – C'est le moteur d'OCR le plus simple qui batch OCR. Le seul problème semble être 1) il ne sautera pas fichiers qui ont déjà été OCRed 2) essayez de lui lancer un tas de PDF (certains anciens) et regardez-le planter. C'est un petit buggy. Il vous avertira à chaque erreur qu'il rencontre (bien que vous puissiez dire au logiciel de ne pas notifier. Mais encore une fois, il meurt horriblement sur certains types de PDF, de sorte que votre kilométrage peut varier.

  • ABBYY FineReader (Batch / Scansnap), Omnipage - Ceux-ci doivent être parmi les pires logiciels programmés connus de l'homme. Si vous pouvez le savoir comment automatiser entièrement (sans invite) OCR par lots de PDF en enregistrant avec le même nom alors veuillez poster ici. Il semble que les seules solutions que j'ai pu trouver aient échoué quelque part - renommage, pas entièrement automatisé, etc. etc. Au mieux, il existe un moyen de le faire, mais la documentation et la programmation sont si horribles que vous ne le saurez jamais.

  • Moteur ABBYY FineReader, ABBYY Recognition Server - Ce sont vraiment plus de solutions d'entreprise, vous feriez probablement mieux de faire exécuter acrobat sur un dossier et d'essayer d'éliminer les fichiers PDF qui vous donnent des erreurs / bloquent le programme que de passer par les tracas d'essayer d'installer un logiciel d'évaluation (en supposant que vous êtes un simple utilisateur final). Ne semble pas rentable pour le petit utilisateur.

  • ** Station de travail Autobahn DX ** le coût de ce produit est si prohibitif que vous pourriez probablement acheter 6 exemplaires d'acrobat. Pas vraiment une solution pour l'utilisateur final. Si vous êtes une entreprise configuration, cela peut en valoir la peine pour vous.

Linux

  • Watchocr - n'est plus développé, et fondamentalement impossible à exécuter sur les distributions Ubuntu modernes
  • pdfsandwich - n'est plus développé, fondamentalement impossible à exécuter sur les distributions Ubuntu modernes
  • ** ABBY LINUX OCR ** - cela devrait être scriptable, et semble avoir de bons résultats:

Http://www.splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison

Cependant, comme beaucoup de ces autres produits ABBYY qu'ils chargent par la page, encore une fois, vous feriez peut-être mieux d'essayer de faire fonctionner l'OCR par lots Acrobat.

  • ** Ocrad, GOCR, OCRopus, tesseract, ** - cela peut fonctionner mais il y a quelques problèmes:

    1. Les résultats OCR ne sont pas aussi bons que, disons, acrobat pour certains d'entre eux (voir le lien ci-dessus).
    2. Aucun des les programmes prennent un fichier PDF et en sortent un fichier PDF. Vous devez d'abord créer un script et séparer le PDF, exécuter les programmes sur chacun d'eux, puis réassembler le fichier au format pdf
    3. Une fois que vous l'avez fait, vous pouvez constater, comme je l'ai fait, que (tesseract) crée une couche OCR qui est décalée. Donc, si vous recherchez le mot "le", vous obtiendrez une surbrillance de la partie du mot à côté.
  • DjVu par lots → Convertir en PDF – je ne l'ai pas examiné, mais il semble que une horrible solution.

En ligne

  • PDFcubed.com - allez, pas vraiment une solution par lots.
  • ABBYY Cloud OCR - je ne sais pas s'il s'agit vraiment d'une solution par lots, de toute façon, vous devez payer à la page et cela pourrait devenir très coûteux.

Identification des fichiers PDF non OCRED

C'est un problème un peu plus facile, qui peut être résolu facilement sous Linux et beaucoup moins sous Windows. J'ai pu coder un script perl utilisant pdffont pour identifier si les polices sont incorporées afin de déterminer quels fichiers ne sont pas-Ocred.


"solutions" actuelles

  1. Utilisez un script pour identifier les fichiers PDF non OCRED (afin de ne pas réexécuter des milliers de fichiers PDF OCRed) et copiez-les dans un répertoire temporaire (en conservant l'arborescence des répertoires correcte), puis utilisez Acrobat sous Windows pour les exécuter en espérant que les plus petits lots ne planteront pas.

  2. Utilisez le même script mais obtenez l'un des linux outils ocr pour fonctionner correctement, risquant la qualité ocr.

Je pense que je vais essayer #1, je suis juste trop inquiet des résultats des outils OCR Linux (je ne suppose que personne n'a fait de comparaison) et séparer les fichiers et les assembler à nouveau semble être un codage inutile si Adobe peut réellement créer un répertoire OCR par lots sans s'étouffer.

Si vous voulez une solution entièrement gratuite, vous devrez utiliser un script pour identifier les fichiers PDF non OCRED (ou simplement les réexécuter plus de OCRed), puis utilisez l'un des outils Linux pour essayer de les OCR. Teseract semble avoir les meilleurs résultats, mais encore une fois, certains de ces outils ne sont pas bien pris en charge dans les versions modernes d'Ubuntu, bien que si vous pouviez le configurer et résoudre le problème que j'avais lorsque la couche d'image ne correspondait pas à la couche de correspondance de texte (avec tesseract), vous auriez une solution assez réalisable et encore une fois Linux> Windows.


Avez-vous une solution fonctionnelle pour automatiser entièrement l'OCR par lots PDF , en sautant des fichiers déjà OCRed en gardant le même nom, avec de haute qualité ? Si c'est le cas, j'apprécierais vraiment la contribution.


Script Perl pour déplacer des fichiers non OCRED vers un répertoire temporaire. Je ne peux pas garantir que cela fonctionne et doit probablement être réécrit, mais si quelqu'un le fait fonctionner (en supposant que cela ne fonctionne pas) ou fonctionne mieux, faites-le moi savoir et je publierai une meilleure version ici.


#!/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 OCRedn";
                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: $fromfilen";
                    print "copy to: $tofilen";
                    copy($fromfile, $tofile) or die "Copy failed: $!";
#                       `touch $outputroot$1/'$file'`;
                }
            }

        }

    }
}
demandé sur