Toplu İş-OCR birçok PDF


20

Bu burada bir yıl önce tartışıldı:

Birçok PDF dosyası için toplu OCR (zaten OCRed değil)?

Daha önce OCR olmayan OCR PDF'lerini toplu hale getirmenin bir yolu var mı? Bu, bence iki meseleyle ilgili mevcut durumdur:

Toplu OCR PDF'leri

pencereler

  • Acrobat - Bu, OCR'yi harmanlayacak en açık ocr motorudur. Tek sorun 1 gibi gözüküyor) 1) zaten OCR'lı olan dosyaları atlamayacak 2) bir sürü PDF atmayı denemek (bazı eski) ve çökmesini izlemek. Bu küçük bir adam. Çalıştığı her hatada sizi uyaracaktır (yazılıma bildirmemesini söyleseniz de. Ancak yine de, belirli PDF türlerinde korkunç şekilde ölür, böylece kilometreniz değişebilir.

  • ABBYY FineReader (Toplu İş / Tarama), Omnipage - Bunlar, insanoğlunun bildiği en kötü programlanmış yazılım parçalarından biri olmalı. Tamamen nasıl bulursa otomatik toplu OCR (hiç sormadan) PDF'leri ile tasarruf aynı adı daha sonra buraya gönderin. Bir yerde başarısız bulabildiğim tek çözümler görünüyor - yeniden adlandırmak, tam otomatik değil, vb. En iyisi, bunu yapmanın bir yolu var, ancak dokümantasyon ve programlama asla öğrenemeyeceğiniz kadar korkunç.

  • ABBYY FineReader Motoru , ABBYY Tanıma Sunucusu - Bunlar gerçekten daha kurumsal çözümler. Muhtemelen acrobat'ı bir klasör üzerinden çalıştırıp denemenin zorluğundan geçmekten ziyade size hata veren / çökerten pdfs'leri denemek ve denemek ve denemek için daha iyi olurdu değerlendirme yazılımı yüklemek için (basit bir son kullanıcı olduğunuzu varsayarak). Küçük kullanıcılar için uygun maliyetli görünmüyor.

  • ** Autobahn DX iş istasyonu ** bu ürünün maliyeti çok yasaklayıcı, muhtemelen 6 kopya akrobat satın alabilirsiniz. Gerçekten bir son kullanıcı çözümü değil. Kurumsal bir kuruluşsanız, bu sizin için değer olabilir.

Linux

  • WatchOCR - artık gelişmemiş ve temelde modern Ubuntu dağıtımlarında çalışmak imkansız
  • pdfsandwich - artık gelişmiş değil, temelde modern Ubuntu dağıtımlarını denemek imkansız
  • ** ABBY LINUX OCR ** - Bu kodlanabilir olmalı ve bazı iyi sonuçlar doğuracak gibi görünüyor:

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

Ancak, sayfa tarafından talep ettikleri diğer ABBYY ürünlerinin birçoğu gibi, yine Acrobat Batch OCR’i çalıştırmaya çalışmaktan daha iyi olabilirsiniz.

  • ** Ocrad, GOCR, OCRopus, tesseract, ** - bunlar işe yarayabilir ancak birkaç problem vardır:

    1. OCR sonuçları, bazıları için akrobat kadar iyi değildir (yukarıdaki bağlantıya bakın).
    2. Programların hiçbiri bir PDF dosyasına girmiyor ve bir PDF dosyası çıkmıyor. Bir komut dosyası oluşturmanız ve önce PDF'yi parçalamanız, programları her biri üzerinde çalıştırmanız ve ardından dosyayı pdf olarak yeniden birleştirmeniz gerekir.
    3. Bunu yaptıktan sonra, yaptığım gibi, (tesseract) üzerine kaydırılan bir OCR katmanı oluşturduğunu görebilirsiniz. Bu nedenle '' kelimesini ararsanız, kelimenin yanındaki kısmına bir göz atarsınız.
  • Toplu DjVuPDF'ye Dönüştür - içine bakmadım, ancak korkunç bir tur hakkında bir çözüm gibi görünüyor.

İnternet üzerinden

  • PDFcubed.com - hadi, gerçekten bir toplu çözüm değil.
  • ABBYY Cloud OCR - bunun gerçekten bir toplu çözüm olup olmadığından emin değilsiniz, her iki durumda da, sayfa tarafından ödeme yapmanız gerekir ve bu oldukça pahalı olabilir.

OCR’li olmayan PDF’leri belirleme

Bu, Linux'ta kolayca çözülebilecek ve Windows'ta çok daha az çözülebilecek, biraz daha kolay bir sorundur. pdffontHangi dosyaların OCR olmadığını belirlemek için fontların gömülü olup olmadığını belirlemek için bir perl betiğini kodlayabildim.


Güncel "çözümler"

  1. OCRed olmayan pdfs'leri tanımlamak için bir komut dosyası kullanın (bu nedenle, binlerce OCRed PDF'ini yeniden çalıştırmazsınız) ve bunları geçici bir dizine (doğru dizin ağacını koruyarak) kopyalarsınız ve ardından Windows'ta Acrobat'ı kullanmak partiler çökmeyecek.

  2. aynı betiği kullanın, ancak düzgün çalışabilmesi için linux ocr araçlarından birini alın, ocr kalitesini riske atın.

Sanırım # 1'i deneyeceğim, Linux OCR araçlarının sonuçları hakkında çok fazla endişeleniyorum (kimsenin bir karşılaştırma yapmadığını sanmıyorum) ve dosyaları parçalayıp tekrar bir araya dikiyorum gibi görünüyor. Adobe aslında bir dizini boğulmadan OCR dizisini topluyorsa, gereksiz kodlama olabilir.

Tamamen ücretsiz bir çözüm istiyorsanız, OCRed olmayan pdfs'leri tanımlamak için bir komut dosyası kullanmanız (veya yalnızca OCRed olanlar üzerinde yeniden çalıştırmanız) ve ardından bunları denemek ve OCR yapmak için linux araçlarından birini kullanmanız gerekir. Teseract en iyi sonuçlara sahip görünüyor, ancak yine de, bu araçların bazıları Ubuntu’nun modern sürümlerinde iyi desteklenmiyor, ancak sorunu ayarlayabilir ve görüntü katmanının metin eşleştirme katmanıyla eşleşmeyeceği bir sorunu çözebilirseniz ( tesseract ile) o zaman oldukça uygulanabilir bir çözüm olurdu ve bir kez daha Linux> Windows.


OCR PDF'lerini tamamen otomatikleştirmek, toplu işlemek, aynı adı taşıyan OCRed dosyalarını yüksek kalitede atlamak için çalışan bir çözümünüz var mı? Eğer öyleyse, girişi gerçekten takdir ediyorum.


OCRed olmayan dosyaları geçici bir dizine taşımak için Perl betiği. Bunun işe yarayacağını garanti edemez ve muhtemelen yeniden yazılması gerekir, ancak birisi çalışmasını sağlarsa (çalışmadığını varsayarsak) veya daha iyi çalışırsa, bana bildirin ve burada daha iyi bir sürüm yayınlayacağım.


#!/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\'`;
                }
            }

        }

    }
}

? Merhaba, olmayan OCRed pdfs (...) tanımlamak ve (doğru dizin ağacını koruyan) geçici bir dizine bu kopya peşin için Windows "komut paylaşır mısınız;)
Erb

@David tamam o kadar. Seni ilk seferinde doğru çalışmayabileceği konusunda uyarıyorum. Bu, pdfs'lere hiçbir şekilde zarar vermez (yalnızca kopyalar, orijinallere dokunmaz), ancak demek istediğim, senaryoyu değiştirmeniz gerekebilir. Eğer perl'i biliyorsanız, bir meltem olurdu, bilmeme izin vermezseniz, ya da kendiniz için hata ayıklayabilir ve küçük düzenlemeleri gerekli kılabilirsiniz.
Joe,

Çok teşekkürler. Çalışmasını sağlamaya çalışacağım (perl ile yeniysem bile). Teşekkürler.
Erb,

Belki Windows'ta başka bir fikir (XP'de çalıştı)? Bunu geçmişte "parola içermeyen tüm pdf dosyalarını bir klasörden (alt klasörlerle birlikte) kaldırmak" için kullandım. Fikir, şifre korumalı tüm pdf dosyalarını saklamaktı. Syncback ile kopyala tüm pdf'leri (ilgili alt klasörlerle birlikte) yeni bir klasörde (C: \ 5 \ ") ücretsiz olarak yerleştirin. Pdftotext.exe ekleyin ve bu metin dosyasını del_pdf_no_password.bat olarak yeniden adlandırın. % x IN (* .PDF) DO (pdftotext %% x NUL && DEL %% x) "burada" C: \ 5 \ "değiştirilecek klasördür. Ardından pdftotext.exe dosyasını ve yalnızca .bat dosyasını başlatın.
Erb

Daha fazla ayrıntı: Ücretsiz bir renamer ile herhangi bir klasör adlarının içindeki boş alanları (+, "," ... gibi özel karakterleri) silmeniz gerekir (örneğin, örneğin: alternativeto.net/software/renamer ). Aksi takdirde tüm alt klasörler için çalışmaz! Ps: Bu senaryoyu ben yazmadım (2004 yılında birisi tarafından yardım edildim!)
Erb

Yanıtlar:


3

Ben de pek çok şansı olmadan otomatik olarak PDF'leri toplu OCR yapmanın bir yolunu aradım. Sonunda, Acrobat'ı aşağıdaki gibi bir komut dosyası kullanarak kullanarak kendinize benzer uygulanabilir bir çözüm buldum:

  1. İlgili tüm PDF'leri belirli bir dizine kopyalayın.

  2. Zaten metin içeren PDF'leri kaldırın (zaten OCRd veya zaten metin olduklarını varsayarsak - biliyorum ideal değil, şimdilik yeterince iyi).

  3. Kullanım AutoHotKey otomatik Acrobat çalıştırmak belirli dizini seçin ve OCR onların dosya adına "-ocr" ekleyerek tüm belgeler.

  4. Başarılı olup olmadığını belirlemek için "-ocr.pdf" dosyasının varlığını kullanarak OCRd PDF'leri orijinal konumlarına geri getirin.

Biraz Heath Robinson , ama aslında oldukça iyi çalışıyor.


Acrobat zaten bir dizini topluyorsa neden AutoHotKey kullanmanız gerekiyor? Acrobat'ın çökmesi durumunda işlemi tekrarlamak konusunda endişeleniyorsanız, değiştirilmiş zaman damgası size nerede kaldığınızı söyleyecektir. Orijinalleri saklamak istiyorsanız sadece dizini kopyalayabilirsiniz. Sonunda sadece -ocr'yi istiyorsanız, işlemi tamamladıktan sonra yalnızca bir toplu iş adı değişikliği yapabilirsiniz.
Joe

1
Merhaba, Şans eseri Windows'ta 2. ve 3. noktalarınızı nasıl yaparsınız? Şimdiden teşekkürler;)
Erb

2

ABBYY FineReader'ın hızlı ve doğru bir şekilde kullanıma hazır OCR sağlamak için tasarlanmış bir son kullanıcı çözümü olduğunu fark etmeniz gerektiğine inanıyorum.

Deneyimlerime dayanarak, OCR projeleri her seferinde önemli ölçüde farklı ayrıntılara sahip ve her benzersiz vaka için kutu dışına çıkma imkânı yok.

Yukarıda belirtilen bulut hizmeti için ön uç geliştirme ekibinin bir parçasıydım ve gerekirse daha fazla bilgi sağlayabilirim.

PDF'de bir metin katmanının aranması göz önüne alındığında, bu konuda herhangi bir tavsiyede bulunamıyorum, çünkü bu görev benim uzmanlık alanım olan OCR'nin biraz dışında, bu yüzden harici komut dosyası kullanma yaklaşımınızı oldukça makul buluyorum. Belki bu tartışmayı faydalı bulursunuz: http://forum.ocrsdk.com/questions/108/check-if-pdf-is-scanned-image-or-contains-text


1
En azından ABBYY'nin OCR'ı kolayca bir pdf klasöründe toplu halde toplamak için belgelere veya işlevlere (Acrobat'ta bulunan) sahip olmadığını biliyoruz. OCR olmayan dokümanlar klasörünün basit toplu OCR'si çok istenen bir özelliktir (ABBYY'nin diğer özelliklerinden çok daha fazlası). Bu arzunun ne kadar yaygın olduğunu öğrenmek için google’ı kullanın, olmasaydı alıntılar yapabilirim. Diğer seçenekler için teşekkürler, onlara bakacağım, ama şimdilik bu ÇOK ortak görevi (alıntılar mevcut) nasıl tamamlayacağına dair araştırmaya gelen herkese, atın ağzından ABBYY'nin yapamayacağını duyduğumuzu bilmesini sağla.
Joe,

Toplu OCR, ABBYY FineReader Professional'da bulunur. Sorunuzda OCR'nin tamamen otomatikleştirilmesi gerektiğini belirtiyorsunuz. Şimdi sadece bir toplu işleme ihtiyacınız var. Lütfen tam olarak neye ihtiyacınız olduğuna dikkat edin.
Nikolay

Yukarıdakileri oku. Ben 'KOLAY toplu OCR', 'Bir klasörün BASİT toplu ocr' dedim. Dahası: "Toplu OCR'ı nasıl tamamen otomatikleştireceğinizi (soran yok) öğrenebilirsiniz.". Ne istediğim çok açık. Öyleyse bu sayfayı ziyaret eden herkese açık olalım: * Eğer yoğun bir kullanıcı yoğun süreçte korkunç tasarruf seçenekleriyle korkunç, karmaşık bir arayüz kullanarak pdfs klasörünü 'toplu işlem' yapmak istiyorsanız ABBYY sizin için çalışabilir * İsterseniz 'EASILY toplu OCR', 'basit toplu işlem ocr' gibi, Acrobat'ın yaptığı gibi binlerce kullanıcı gibi küçük kullanıcı etkileşimi, ABBYY Finereader sizin için değil.
Joe

1

2015 yılının başlarında pencerelerde Nuance OmniPage Ultimate kullanarak tamamen hands-off toplu OCR yaparken bazı başarılar elde ettim. Ücretsiz değil, liste fiyatı 500 $. Dahil olan toplu programı "DocuDirect" kullanın. Asıl sorunuzun doğrudan cevabı gibi görünen "İstemi istemeden işi çalıştır" seçeneğine sahip.

Her giriş görüntüsü için (örneğin aranamayan) bir PDF dosyası için bir aranabilir PDF dosyası çıkarmak için DocuDirect kullandım; Giriş dizin ağacını, çıkış klasöründeki orijinal giriş dosyası adlarıyla birlikte çoğaltması söylenebilir (aşağıya bakınız). Çok sayıda çekirdek kullanır. Doğruluk, değerlendirdiğim paketlerin en iyisiydi. Parola korumalı belgeler atlanır (işi durdurmadan, bir iletişim kutusu göstermeden).

Uyarı 1: Neredeyse orijinal dosya adları - ".PDF" son eki ".pdf" olur (yani, büyük harflerden kük harflere kadar) çünkü hey, pencerelerde aynıdır. (Öf).

Uyarı 2: Günlük dosyası yok, bu nedenle tanıma sırasında hangi dosyaların başarısız olduğunu - kesinlikle yaptıklarını - size geri döndürür. DocuDirect mutlu bir şekilde tüm sayfaların eksik olması gibi bozuk çıktılar üretecektir. Ham bir doğrulama uygulamak için PyPDF2 modülünü kullanarak bir python betiği yazdım: çıktı sayfa sayısının girdi sayfa sayımı ile eşleştiğini test etmek. Aşağıya bakınız.

Uyarı 3: Bulanık, belirsiz bir giriş görüntüsü dosyası, OmniPage'in sonsuza kadar beklemesine, CPU kullanmamasına neden olur; Sadece asla kurtarmaz. Bu, toplu işlemeyi gerçekten ortadan kaldırır ve herhangi bir geçici çözüm bulamadım. Bunu Nuance'a da bildirmiştim ama hiçbir yere gelmedim.

@Joe, yazılımın kötü programlanması ve belgelenmesi konusunda haklıdır. Ben dikkat çekirdek OmniPage'e şaşırtıcı karakter tanıma sihirli teknolojiye sahip, ancak dış kabuk (GUI & toplu işlem) Eğer tüyleri çekin yapmak için yeterlidir.

OCR paketini yalnızca korumasız resim belgeleriyle sunmak için, @ Joe's ve @ Kiwi'nin komut dosyalarını kullanarak dosyaları taraması önerisini onaylıyorum.

Nuance ile olan tek üyeliğim tam olarak memnun olmayan bir müşteri olarak - bunu ispatlamak için bir sürü çözülmemiş destek biletim var :)

@Joe: Geç cevap, ama belki hala alakalı. @ Süper Kullanıcı topluluk: Umarım bunun konuyla ilgili olduğunu düşünüyorsun.

** Güncelleme ** halefi paketi Nuance PowerPDF Gelişmiş, liste fiyatı sadece 150 $ 'dır. Bu konuda daha iyi bir başarı elde ettim, bu kadar kesin ama çok daha kararlı.

OCR öncesi / sonrası ağaç doğrulama python betiği takip eder.

'''
Script to validate OCR outputs against inputs.
Both input and output are PDF documents in a directory tree.
For each input document, checks for the corresponding output
document and its page count.

Requires PyPDF2 from https://pypi.python.org/pypi/PyPDF2
'''

from __future__ import print_function
from PyPDF2 import PdfFileReader
import getopt
import os
import stat
import sys

def get_pdf_page_count(filename):
    '''
    Gets number of pages in the named PDF file.
    Fails on an encrypted or invalid file, returns None.
    '''
    with open(filename, "rb") as pdf_file:
        page_count = None
        err = None
        try:
            # slurp the file
            pdf_obj = PdfFileReader(pdf_file)
            # extract properties
            page_count = pdf_obj.getNumPages()
            err = ""
        except Exception:
            # Invalid PDF.
            # Limit exception so we don't catch KeyboardInterrupt etc.
            err = str(sys.exc_info())
            # This should be rare
            print("Warning: failed on file %s: %s" % (filename, err), file=sys.stderr)
            return None

    return page_count

def validate_pdf_pair(verbose, img_file, txt_file):
    '''
    Checks for existence and size of target PDF file;
    number of pages should match source PDF file.
    Returns True on match, else False.
    '''
    #if verbose: 
    #    print("Image PDF is %s" % img_file)
    #    print("Text PDF is %s" % txt_file)

    # Get source and target page counts
    img_pages = get_pdf_page_count(img_file)
    txt_pages = get_pdf_page_count(txt_file)
    if img_pages is None:
        # Bogus PDF, skip.
        print("Warning: failed to get page count for %s" % img_file, file=sys.stderr)
        return None
    if txt_pages is None:
        # Bogus PDF, skip.
        print("Warning: failed to get page count for %s" % txt_file, file=sys.stderr)
        return None

    retval = True
    if img_pages != txt_pages:
        retval = False
        print("Mismatch page count: %d in source %s, %d in target %s" % (img_pages, img_file, txt_pages, txt_file), file=sys.stderr)

    return retval


def validate_ocr_output(verbose, process_count, total_count, img_dir, txt_dir):
    '''
    Walks a tree of files to compare against output tree, calling self recursively.
    Returns a tuple with PDF file counts (matched, non-matched).
    '''
    # Iterate over the this directory
    match = 0
    nonmatch = 0
    for dirent in os.listdir(img_dir):
        src_path = os.path.join(img_dir, dirent)
        tgt_path = os.path.join(txt_dir, dirent)
        if os.path.isdir(src_path):
            if verbose: print("Found source dir %s" % src_path)
            # check target
            if os.path.isdir(tgt_path):
                # Ok to process
                (sub_match, sub_nonmatch) = validate_ocr_output(verbose, process_count + match + nonmatch, total_count, 
                                         src_path, tgt_path)
                match += sub_match
                nonmatch += sub_nonmatch
            else:
                # Target is missing!?
                print("Fatal: target dir not found: %s" % tgt_path, file=sys.stderr)

        elif os.path.isfile(src_path):
            # it's a plain file
            if src_path.lower().endswith(".pdf"):
                # check target
                # HACK: OmniPage changes upper-case PDF suffix to pdf;
                # of course not visible in Windohs with the case-insensitive 
                # file system, but it's a problem on linux.
                if not os.path.isfile(tgt_path):
                    # Flip lower to upper and VV
                    if tgt_path.endswith(".PDF"):
                        # use a slice
                        tgt_path = tgt_path[:-4] + ".pdf"
                    elif tgt_path.endswith(".pdf"):
                        tgt_path = tgt_path[:-4] + ".PDF"
                # hopefully it will be found now!
                if os.path.isfile(tgt_path):
                    # Ok to process
                    sub_match = validate_pdf_pair(verbose, src_path, tgt_path)
                    if sub_match:
                        match += 1
                    else:
                        nonmatch += 1
                    if verbose: print("File %d vs %d matches: %s" % (process_count + match + nonmatch, total_count, sub_match))

                else:
                    # Target is missing!?
                    print("Fatal: target file not found: %s" % tgt_path, file=sys.stderr)
                    nonmatch += 1

        else:
            # This should never happen
            print("Warning: not a directory nor file: %s" % src_path, file=sys.stderr)
    return (match, nonmatch)

def count_pdfs_listdir(verbose, src_dir):
    '''
    Counts PDF files in a tree using os.listdir, os.stat and recursion.
    Not nearly as elegant as os.walk, but hopefully very fast on
    large trees; I don't need the whole list in memory.
    '''
    count = 0
    for dirent in os.listdir(src_dir):
        src_path = os.path.join(src_dir, dirent)
        # stat the entry just once
        mode = os.stat(src_path)[stat.ST_MODE]
        if stat.S_ISDIR(mode):
            # It's a directory, recurse into it
            count += count_pdfs_listdir(verbose, src_path)
        elif stat.S_ISREG(mode):
            # It's a file, count it
            if src_path.lower().endswith('.pdf'):
                count += 1
        else:
            # Unknown entry, print an error
            print("Warning: not a directory nor file: %s" % src_path, file=sys.stderr)
    return count

def main(args):
    '''
    Parses command-line arguments and processes the named dirs.
    '''
    try:
        opts, args = getopt.getopt(args, "vi:o:")
    except getopt.GetoptError:
        usage()
    # default values
    verbose = False
    in_dir = None
    out_dir = None
    for opt, optarg in opts:
        if opt in ("-i"):
            in_dir = optarg
        elif opt in ("-o"):
            out_dir = optarg
        elif opt in ("-v"):
            verbose = True
        else:
            usage()
    # validate args
    if in_dir is None or out_dir is None: usage()
    if not os.path.isdir(in_dir):
        print("Not found or not a directory: %s" % input, file=sys.stderr)
        usage()
    if not os.path.isdir(out_dir):
        print("Not found or not a directory: %s" % out_dir, file=sys.stderr)
        usage()
    if verbose: 
        print("Validating input %s -> output %s" % (in_dir, out_dir))
    # get to work
    print("Counting files in %s" % in_dir)
    count = count_pdfs_listdir(verbose, in_dir)
    print("PDF input file count is %d" % count)
    (match,nomatch) = validate_ocr_output(verbose=verbose, process_count=0, total_count=count, img_dir=in_dir, txt_dir=out_dir) 
    print("Results are: %d matches, %d mismatches" % (match, nomatch))

def usage():
    print('Usage: validate_ocr_output.py [options] -i input-dir -o output-dir')
    print('    Compares pre-OCR and post-OCR directory trees')
    print('    Options: -v = be verbose')
    sys.exit()

# Pass all params after program name to our main
if __name__ == "__main__":
    main(sys.argv[1:])

Güncellemeni yeni gördüm. Deneyeceğim. Umarım sessizce ve çökmeden OCR yapar! (Vay! 1GB dosya indir!)
Erb

1

Linux üzerinde

En iyi ve en kolay yolu kullanmak pypdfocrpdf değiştirmez kullanmaktır

pypdfocr your_document.pdf

Sonunda your_document_ocr.pdfaranabilir bir metin ile istediğiniz şekilde başka bir olacaktır . Uygulamaya, görüntünün kalitesini değiştirmez. Kaplama metnini ekleyerek dosyanın boyutunu biraz yükseltir.

Pdfs’i toplu iş için

ls ./p*.pdf | xargs -L1 -I {}  pypdfocr {}

PDF'ler alt klasörlerdeyse:

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {}  pypdfocr {}

Güncelleme 3 Kasım 2018:

pypdfocr2016’dan beri artık desteklenmiyor ve beyninde kalmadığı için bazı sorunlar olduğunu fark ettim. ocrmypdf( modül ) benzer bir iş yapar ve bu şekilde kullanılabilir:

ocrmypdf in.pdf out.pdf

Yüklemek:

pip install ocrmypdf

veya

apt install ocrmypdf

bu yüzden komut olur

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {}  ocrmypdf {} {}_ocr.pdf 

0

Aquaforest'in Autobahn DX'i düşünebilirsiniz: http://www.aquaforest.com/en/autobahn.asp

PDF yığınlarını işlemek için tasarlanmıştır ve daha iyi bir sonuç (örneğin bir PDF bazı görüntü sayfalarına sahipse ve bazı sayfalarda görüntüleniyorsa) PDF'lerin akıllıca işlenmesi için seçeneklerin yanı sıra çeşitli seçeneklere (örn. OCRed dosyaları atla veya atla) sahiptir. metin sayfaları, sadece görüntü sayfalarını OCR yapabilir)


Bu ürüne bağlıysanız, lütfen sorunuzu düzenleyerek açıkça söyleyin .
slhck

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.