बैच-ओसीआर कई पीडीएफ


20

इस पर एक साल पहले चर्चा की गई है:

कई पीडीएफ फाइलों के लिए बैच ओसीआर (पहले से ही ओसीआर नहीं)?

क्या OCR PDF को बैचने का कोई तरीका है जो पहले से OCRed नहीं है? मुझे लगता है, दो मुद्दों से निपटने वाली चीजों की वर्तमान स्थिति:

बैच ओसीआर पीडीएफ

खिड़कियाँ

  • एक्रोबैट - यह सबसे स्ट्रेटफ़ोर्ड ocr इंजन है जो OCR को बैच देगा। केवल समस्या 1 लगती है) यह उन फ़ाइलों को छोड़ देगा जो पहले से ही ओसीआर 2 हो चुके हैं) इसे (कुछ पुराने) पीडीएफ का एक गुच्छा फेंकने की कोशिश करें और इसे क्रैश देखें। यह थोड़ा बुग्याल है। यह आपको प्रत्येक त्रुटि पर चेतावनी देगा जो इसे चलाता है (हालांकि आप सॉफ़्टवेयर को सूचित नहीं करने के लिए कह सकते हैं। लेकिन फिर से, यह कुछ प्रकार के पीडीएफ पर बुरी तरह से मर जाता है, इसलिए आपका लाभ भिन्न हो सकता है।

  • ABBYY FineReader (बैच / स्कैन्सैप), Omnipage - ये कुछ सबसे खराब प्रोग्राम किए गए सॉफ़्टवेयर हैं जो मनुष्य को ज्ञात हैं। यदि आप यह पता लगा सकते हैं कि PDF का पूरी तरह से स्वचालित (कोई प्रॉम्प्टिंग) बैच OCR एक ही नाम से कैसे सेव किया जा सकता है तो कृपया यहाँ पोस्ट करें। ऐसा लगता है कि एकमात्र समाधान मैं कहीं असफल हो सकता था - नाम बदलना, पूरी तरह से स्वचालित नहीं होना, आदि। सबसे अच्छा, ऐसा करने का एक तरीका है, लेकिन प्रलेखन और प्रोग्रामिंग इतनी भयानक है कि आप कभी भी पता नहीं लगा पाएंगे।

  • ABBYY FineReader Engine , ABBYY मान्यता सर्वर - ये वास्तव में अधिक उद्यम समाधान हैं, आप शायद एक फ़ोल्डर पर चलाने के लिए एक्रोबेट प्राप्त करने से बेहतर होंगे और कोशिश कर सकते हैं और पीडीएफ़ का उपयोग कर सकते हैं जो आपको त्रुटियां देते हैं / कोशिश करने की परेशानी से गुजरने वाले प्रोग्राम को क्रैश करते हैं। मूल्यांकन सॉफ्टवेयर स्थापित करने के लिए (आप एक सरल अंत उपयोगकर्ता हैं)। छोटे उपयोगकर्ता के लिए लागत प्रतिस्पर्धी नहीं लगता है।

  • ** ऑटोबान डीएक्स वर्कस्टेशन ** इस उत्पाद की लागत इतनी निषेधात्मक है, आप शायद एक्रोबेट की 6 प्रतियां खरीद सकते हैं। वास्तव में एंड-यूज़र समाधान नहीं है। यदि आप एक उद्यम सेटअप हैं, तो यह आपके लिए इसके लायक हो सकता है।

लिनक्स

  • वॉचओसीआर - अब विकसित नहीं हुआ है, और मूल रूप से आधुनिक उबंटू डिस्ट्रो पर चलना असंभव है
  • pdfsandwich - अब विकसित नहीं हुआ है, मूल रूप से आधुनिक उबंटू डिस्ट्रो पर चलना असंभव है
  • ** ABBY LINUX OCR ** - यह स्क्रिप्ट योग्य होना चाहिए, और कुछ अच्छे परिणाम प्रतीत होते हैं:

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

हालांकि, इन अन्य ABBYY उत्पादों की एक बहुत की तरह, वे पृष्ठ द्वारा चार्ज करते हैं, फिर से, आप काम करने के लिए एक्रोबैट बैच OCR प्राप्त करने की कोशिश कर रहे हैं।

  • ** Ocrad, GOCR, OCRopus, tesseract, ** - ये काम कर सकते हैं लेकिन कुछ समस्याएं हैं:

    1. ओसीआर के परिणाम इन में से कुछ के लिए एक्रोबेट के रूप में महान नहीं हैं, कहते हैं (ऊपर लिंक देखें)।
    2. कोई भी प्रोग्राम पीडीएफ फाइल में नहीं जाता है और पीडीएफ फाइल का उत्पादन होता है। आपको एक स्क्रिप्ट बनानी होगी और पहले पीडीएफ को तोड़ना होगा और प्रत्येक पर प्रोग्राम चलाना होगा और फिर पीडीएफ के रूप में फाइल को फिर से जुटाना होगा
    3. एक बार जब आप ऐसा करते हैं, तो आप पा सकते हैं, जैसे मैंने किया था, यह (tesseract) एक OCR परत बनाता है जिसे ऊपर स्थानांतरित किया जाता है। इसलिए यदि आप 'द' शब्द को खोजते हैं, तो आपको इसके आगे के शब्द के भाग पर प्रकाश डाला जाएगा।
  • बैच DjVu → पीडीएफ में कनवर्ट करें - इसमें नहीं देखा गया है, लेकिन एक भयानक राउंड-ए-बाउट समाधान की तरह लगता है।

ऑनलाइन

  • PDFcubed.com - आओ, वास्तव में एक बैच समाधान नहीं है।
  • एबीबीवाई क्लाउड ओसीआर - सुनिश्चित नहीं है कि यह वास्तव में एक बैच समाधान है, या तो, आपको पेज द्वारा भुगतान करना होगा और यह काफी महंगा हो सकता है।

गैर-ओसीआर पीडीएफ की पहचान करना

यह थोड़ी आसान समस्या है, जिसे लिनक्स में आसानी से हल किया जा सकता है और विंडोज में बहुत कम। मैं यह pdffontपहचानने के लिए एक पर्ल स्क्रिप्ट को कोड करने में सक्षम था कि क्या यह निर्धारित करने के लिए फोंट एम्बेडेड हैं कि कौन सी फाइलें-ओसीआर नहीं हैं।


वर्तमान "समाधान"

  1. नॉन-ओसीआरड पीडीएफ़्स की पहचान करने के लिए एक स्क्रिप्ट का उपयोग करें (ताकि आप हजारों ओसीआर पीडीएफ पर फिर से न चलें) और इन्हें एक अस्थायी निर्देशिका में कॉपी करें (सही डायरेक्टरी ट्री को बरकरार रखते हुए) और फिर विंडोज पर एक्रोबैट का उपयोग इस उम्मीद से अधिक चलाने के लिए करें कि छोटा बैच क्रैश नहीं होंगे।

  2. एक ही स्क्रिप्ट का उपयोग करें, लेकिन ठीक से काम करने के लिए लिनक्स ocr टूल्स में से एक प्राप्त करें, ocr गुणवत्ता को जोखिम में डालते हुए।

मुझे लगता है कि मैं # 1 का प्रयास करने जा रहा हूं, मैं लिनक्स OCR टूल के परिणामों के बारे में बहुत अधिक चिंतित हूं (मुझे नहीं लगता कि किसी ने तुलना की है) और फ़ाइलों को अलग करके उन्हें फिर से एक साथ सिलाई करने के लिए लगता है। अनावश्यक कोडिंग हो अगर Adobe वास्तव में OCR निर्देशिका को चोक किए बिना बैच सकता है।

यदि आप पूरी तरह से नि: शुल्क समाधान चाहते हैं, तो आपको गैर-ओसीआर पीडीएफ़ (या ओसीआरएड से अधिक बस पुनर्मिलन) की पहचान करने के लिए एक स्क्रिप्ट का उपयोग करना होगा, और फिर कोशिश करने के लिए और उन्हें ओसीआर करने के लिए एक लिनक्स टूल का उपयोग करना होगा। Teseract के सबसे अच्छे परिणाम प्रतीत होते हैं, लेकिन फिर से, इनमें से कुछ टूल उबंटू के आधुनिक संस्करणों में अच्छी तरह से समर्थित नहीं हैं, हालांकि यदि आप इसे सेट कर सकते हैं और उस समस्या को ठीक कर सकते हैं जहां मेरे पास पाठ-मिलान परत से मेल खाने वाली छवि परत नहीं है ( tesseract के साथ) तो आपके पास एक काम करने योग्य समाधान होगा और एक बार फिर लिनक्स> विंडोज।


क्या आपके पास पूरी तरह से स्वचालित करने के लिए एक कार्यशील समाधान है , बैच OCR PDF , उच्च गुणवत्ता के साथ पहले से ही OCRed फ़ाइलों को एक ही नाम रखते हुए लंघन है ? यदि हां, तो मैं वास्तव में इनपुट की सराहना करूंगा।


गैर-ओसीआर फ़ाइलों को अस्थायी निर्देशिका में स्थानांतरित करने के लिए पर्ल स्क्रिप्ट। इस काम की गारंटी नहीं दे सकता है और शायद इसे फिर से लिखने की आवश्यकता है, लेकिन अगर कोई इसे काम करता है (यह मानकर कि यह काम नहीं करता है) या बेहतर काम करता है, तो मुझे बताएं और मैं यहां एक बेहतर संस्करण पोस्ट करूंगा।


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

        }

    }
}

नमस्कार, क्या आप गैर-ओसीआर पीडीएफ़ (...) की पहचान करने के लिए अपनी विंडोज "स्क्रिप्ट को साझा कर सकते हैं और इन्हें एक अस्थायी निर्देशिका में कॉपी कर सकते हैं (सही निर्देशिका पेड़ को बरकरार रखते हुए? धन्यवाद! अग्रिम में?)
एरब

@ डेविड ठीक है यह ऊपर है। मैं आपको चेतावनी देता हूं कि यह पहली बार सही तरीके से नहीं चल सकता है। यह आपके pdfs को बिल्कुल भी नुकसान नहीं पहुंचाएगा (यह सिर्फ प्रतियां है, यह मूल को नहीं छूता है) लेकिन मेरा क्या मतलब है कि आपको स्क्रिप्ट को संशोधित करना पड़ सकता है। यदि आप जानते हैं कि यह एक हवा होगी, अगर मुझे पता नहीं है, या आप इसे स्वयं डिबग कर सकते हैं और मामूली संपादन आवश्यक कर सकते हैं।
जो

बहुत धन्यवाद। मैं इसे काम करने की कोशिश करूंगा (भले ही मैं पर्ल के साथ नया हूं)। धन्यवाद।
एरब

शायद विंडोज में एक और विचार (XP में काम किया)? मैंने इसका उपयोग अतीत में "सबफ़ोल्डर (एक फ़ोल्डर के साथ) सभी पीडीएफ फाइलों को हटाने के लिए किया है जिसमें कोई पासवर्ड नहीं है"। यह विचार सभी पीडीएफ़ फाइलों को रखने का था जो पासवर्ड से सुरक्षित हों। एक नए फ़ोल्डर (C: \ 5 \ ") में सभी पीडीएफ (संबंधित सबफ़ोल्डर्स के साथ) सिंकबैक फ्रीवेयर के साथ कॉपी करें। pdftotext.exe जोड़ें और यह टेक्स्ट फ़ाइल del_pdf_no_password.bat में बदल गई। इसकी सामग्री:" FOR / RC: \ 5 \% "। % x IN (* .PDF) DO (pdftotext %% x NUL && DEL %% x) "जहां" C: \ 5 \ "बदलने का फ़ोल्डर है। तब pdftotext.exe शुरू करें और उसके बाद ही .bat फ़ाइल
एरब

अधिक जानकारी के लिए: यदि आप 'll खाली स्थान एक फ्रीवेयर नेमर (: उदाहरण के लिए जैसे के साथ किसी भी फ़ोल्डरों नाम के अंदर (+ जैसे विशेष caracters "," ...) को दूर करने की जरूरत alternativeto.net/software/renamer )। अन्यथा यह सभी सबफ़ोल्डर्स के लिए काम नहीं करेगा! Ps: मैंने यह स्क्रिप्ट नहीं लिखी थी (मुझे 2004 में ... किसी ने मदद की थी!)
Erb

जवाबों:


3

मैंने भी बहुत किस्मत के बिना, स्वचालित रूप से कई पीडीएफ को बैच-ओसीआर करने का एक रास्ता खोज लिया है। अंत में मैं आपके समान एक व्यावहारिक समाधान के साथ आया हूं, एक्रोबेट का उपयोग स्क्रिप्ट के साथ निम्नानुसार कर रहा हूं:

  1. सभी प्रासंगिक PDF को एक विशिष्ट निर्देशिका में कॉपी करें।

  2. पहले से ही पाठ वाले पीडीएफ को हटा दें (यह मानते हुए कि वे पहले से ही ओसीआरडी या पहले से ही पाठ हैं - आदर्श नहीं जिसे मैं जानता हूं, लेकिन अभी के लिए काफी अच्छा है)।

  3. स्वतःरॉकी का उपयोग करने के लिए स्वतः एक्रोबैट को चलाएं, विशिष्ट निर्देशिका का चयन करें, और ओसीआर के सभी दस्तावेजों को "-क्रोक" जोड़कर उनके फ़ाइलनाम में जोड़ें।

  4. यह निर्धारित करने के लिए कि क्या यह सफल था, OCRd PDF को अपने मूल स्थान पर वापस ले जाएँ, "-ocr.pdf" फ़ाइल की उपस्थिति का उपयोग करके।

यह थोड़ा हीथ रॉबिन्सन है , लेकिन वास्तव में बहुत अच्छी तरह से काम करता है।


यदि ऑटोब्रॉट पहले से ही एक निर्देशिका को बैच देगा तो आपको ऑटोहॉटके का उपयोग करने की आवश्यकता क्यों है? यदि आप इस प्रक्रिया को दोहराने के बारे में चिंतित हैं यदि एक्रोबेट फ़ाइल को क्रैश करता है तो संशोधित टाइमस्टैम्प आपको बताएगा कि आपने कहाँ छोड़ा था। यदि आप मूल रखना चाहते हैं तो आप निर्देशिका को कॉपी कर सकते हैं। यदि आप अंत में सिर्फ -क्रू चाहते हैं तो आप बस एक बैच नाम परिवर्तन कर सकते हैं।
जो

1
हैलो, भाग्य से आप साझा कर सकते हैं कि आप बिंदु 2 और 3. विंडोज में कैसे करें? अग्रिम धन्यवाद;)
एरब

2

मुझे लगता है कि आपको यह महसूस करने की आवश्यकता है कि ABBYY FineReader एक अंत-उपयोगकर्ता समाधान है जो OCR को तेज़ और सटीक आउट-ऑफ-द-बॉक्स प्रदान करने के लिए डिज़ाइन किया गया है।

मेरे अनुभव के आधार पर, ओसीआर परियोजनाओं में हर बार महत्वपूर्ण रूप से अलग-अलग विवरण होते हैं और प्रत्येक अनोखे मामले के लिए कोई रास्ता नहीं है। इससे मैं आपको और अधिक पेशेवर उपकरण सुझा सकता हूं जो आपके लिए काम कर सकते हैं:

  • ABBYY मान्यता सर्वर पर एक नजर है , यह OCR ऑटोमैटिशन के लिए एक पेशेवर उत्पाद है।

  • जब लिनक्स पर आता है, तो http://ocr4linux.com पर एक नज़र डालें , यह एक कमांड लाइन उपयोगिता है जो आपको भी फिट कर सकती है।

  • अधिक जटिल कार्यों के लिए ABBYY में ABBYY FineReader Engine (इन-हाउस होस्टेड) ​​या ABBYY क्लाउड OCR SDK (Microsoft Azure क्लाउड पर आधारित ) जैसे एक बहुत ही लचीले SDK हैं , जो आपको इच्छित OCR प्रोसेसिंग का तरीका बताते हैं।

मैं ऊपर निर्दिष्ट क्लाउड सेवा के लिए फ्रंट-एंड डेवलपमेंट टीम का एक हिस्सा था और यदि आवश्यक हो तो इस पर अधिक जानकारी प्रदान कर सकता हूं।

पीडीएफ में एक पाठ परत की खोज को ध्यान में रखते हुए, मैं उस पर कोई सलाह नहीं दे सकता, क्योंकि यह कार्य ओसीआर से थोड़ा हटकर है जो मेरी विशेषता है, इसलिए मुझे बाहरी स्क्रिप्ट का उपयोग करने का आपका दृष्टिकोण बहुत ही उचित लगता है। शायद आपको यह चर्चा सहायक लगे: http://forum.ocrsdk.com/questions/108/check-if-pdf-is-scanned-image-or-contains-text


1
अच्छी तरह से कम से कम हम जानते हैं कि एबीबीवाई के पास पीडीएफ के एक फ़ोल्डर ओसीआर को आसानी से बैचने के लिए प्रलेखन या कार्यक्षमता (जो एक्रोबैट में पाया जाता है) का अभाव है। गैर-ओसीआर डॉक्स के एक फ़ोल्डर का साधारण बैच ओसीआर एक बहुत ही वांछित विशेषता है (एबीबीवाई की कुछ अन्य विशेषताओं की तुलना में बहुत अधिक)। बस यह पता लगाने के लिए कि यह इच्छा कितनी आम है, अगर नहीं, तो मैं यह बता सकता हूं कि मुझे Google प्रदान कर सकता है। अन्य विकल्पों के लिए धन्यवाद, मैं उन पर गौर करूंगा, लेकिन अब कोई भी व्यक्ति जो इस खोज को पूरा करने के लिए यहां आया है, उसे इस सामान्य कार्य (उपलब्ध हवाले) को पता है कि हमने इसे घोड़े के मुंह से सुना है कि एबीबीवाई ऐसा नहीं कर सकता।
जो

बैच OCR ABBYY FineReader Professional में उपलब्ध है। आपके प्रश्न में आपको ओसीआर को पूरी तरह से स्वचालित करने की आवश्यकता है। अब आपको बस एक बैच प्रसंस्करण की आवश्यकता है। कृपया स्पष्ट रूप से बताएं कि आपको क्या चाहिए।
निकोले

ऊपरोक्त पढ़ें। मैंने 'EASILY बैच OCR', 'SIMPLE बैच ocr of a folder' कहा। आगे: "यदि आप पता लगा सकते हैं कि कैसे पूरी तरह से स्वचालित (कोई संकेत नहीं) बैच OCR .."। यह स्पष्ट है कि मुझे क्या चाहिए। तो इस पृष्ठ पर जाने वाले किसी भी व्यक्ति के लिए स्पष्ट रहें: * यदि आप एक भारी उपयोगकर्ता-गहन प्रक्रिया में भयानक बचत विकल्पों के साथ भयानक, जटिल इंटरफ़ेस का उपयोग करके pdfs का एक फ़ोल्डर 'बैच प्रक्रिया' करना चाहते हैं, तो ABBYY आपके लिए काम कर सकता है * यदि आप चाहते हैं 'EASILY बैच OCR', 'सिंपल बैच ocr', जिसमें हजारों अन्य लोगों की तरह थोड़ा यूजर इंटरेक्शन होता है, जैसे Acrobat पहले से ही करता है, ABBYY Finereader आपके लिए नहीं है।
जो

2

लिनक्स पर

pypdfocrइसका उपयोग करने के लिए सबसे अच्छा और आसान तरीका है कि यह पीडीएफ नहीं बदलता है

pypdfocr your_document.pdf

अंत में आपके पास एक your_document_ocr.pdfऔर तरीका होगा जिसे आप खोजे गए पाठ के साथ चाहते हैं। एप्लिकेशन छवि की गुणवत्ता को नहीं बदलता है। ओवरले टेक्स्ट को जोड़कर फ़ाइल का आकार थोड़ा बढ़ाता है।

Pdfs को बैचने के लिए

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

यदि पीडीएफ उप-फ़ोल्डर में हैं:

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

अपडेट 3 नवंबर 2018:

pypdfocr2016 के बाद से अब समर्थित नहीं है और मैंने मानसिक रूप से नहीं होने के कारण कुछ समस्याओं पर ध्यान दिया। ocrmypdf( मॉड्यूल ) एक सहज काम करता है और इस तरह से इस्तेमाल किया जा सकता है:

ocrmypdf in.pdf out.pdf

स्थापित करने के लिए:

pip install ocrmypdf

या

apt install ocrmypdf

तो आज्ञा बन जाएगी

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

1

मुझे 2015 की शुरुआत में कुछ सफलता मिली थी, जो पूरी तरह से हैंड्स-ऑफ बैच OCR कर रहा था, जो विंडो पर Nuance OmniPage Ultimate का उपयोग कर रहा था। मुक्त नहीं, सूची मूल्य $ 500। शामिल किए गए बैच प्रोग्राम "डॉक्यूडायरेक्ट" का उपयोग करें। इसमें एक विकल्प है "बिना किसी संकेत के नौकरी चलाएं" जो आपके मूल प्रश्न का सीधा उत्तर लगता है।

मैंने प्रत्येक इनपुट छवि (यानी, गैर-खोज करने योग्य) पीडीएफ फाइल के लिए एक खोज योग्य पीडीएफ फाइल को आउटपुट करने के लिए अप्रत्यक्ष उपयोग किया; इसे आउटपुट फ़ोल्डर में इनपुट डायरेक्टरी ट्री और साथ ही मूल इनपुट फ़ाइल नामों (लगभग - नीचे देखें) को दोहराने के लिए कहा जा सकता है। एकाधिक कोर का भी उपयोग करता है। मेरे द्वारा मूल्यांकन किए गए पैकेजों में सटीकता सबसे अच्छी थी। पासवर्ड-रक्षित दस्तावेज़ों को छोड़ दिया जाता है (बिना रुके, बिना संवाद दिखाए)।

कैविट 1: लगभग मूल फ़ाइल नाम - प्रत्यय ".PDF" ".pdf" (यानी, ऊपरी से निचले मामले में) हो जाता है क्योंकि हे, यह विंडोज़ पर सभी समान है। (ओह।)

कैविएट 2: कोई लॉग फ़ाइल नहीं है ताकि पहचानने के दौरान कौन सी फाइलें विफल हों - जो वे निश्चित रूप से करते हैं - आप पर वापस आ गई है। डॉक्युमेंट अप्रत्यक्ष रूप से पूरे पृष्ठ की तरह गायब आउटपुट उत्पन्न करेगा। मैंने एक कच्चे सत्यापन को कार्यान्वित करने के लिए PyPDF2 मॉड्यूल का उपयोग करते हुए एक पायथन स्क्रिप्ट लिखी थी: परीक्षण कि आउटपुट पेज काउंट मिलान इनपुट पेज की गिनती। निचे देखो।

कैविएट 3: एक फजी, अविवेकी इनपुट छवि फ़ाइल किसी भी सीपीयू का उपयोग न करते हुए, ओमनीपेज को हमेशा के लिए लटका देगी; यह कभी ठीक नहीं होता। यह वास्तव में बैच प्रोसेसिंग को पटरी से उतारता है और मुझे कोई वर्कअराउंड नहीं मिला। मैंने नून्स को भी इसकी सूचना दी, लेकिन कहीं नहीं मिला।

@ जो सॉफ्टवेयर के खराब प्रोग्राम और डॉक्यूमेंटेड होने के बारे में सही है। मैं ध्यान देता हूं कि ओमनीपेज की कोर में अद्भुत चरित्र-मान्यता जादू प्रौद्योगिकी है, लेकिन बाहरी कवच ​​(GUI और बैच प्रसंस्करण) आपको अपने बालों को बाहर निकालने के लिए पर्याप्त है।

मैं स्क्रिप्ट्स का उपयोग करके फाइलों को स्क्रीन पर दिखाने के लिए @ जोई और @ कीवी के सुझाव का समर्थन करता हूं, ताकि ओसीआर पैकेज केवल असुरक्षित छवि दस्तावेजों के साथ प्रस्तुत कर सकूं।

Nuance के साथ मेरा एकमात्र जुड़ाव एक बिल्कुल-संतुष्ट ग्राहक के रूप में नहीं है - मेरे पास इसे साबित करने के लिए अनसुलझे समर्थन टिकटों का एक बैच है :)

@ जो: देर से जवाब, लेकिन शायद अभी भी प्रासंगिक है। @SuperUser समुदाय: मुझे आशा है कि आपको लगता है कि यह विषय पर है।

** अद्यतन ** उत्तराधिकारी पैकेज Nuance PowerPDF उन्नत है, सूची मूल्य केवल $ 150 है। मुझे इसके साथ और भी अच्छी सफलता मिली, यह उतना ही सटीक है लेकिन कहीं अधिक स्थिर है।

प्री / पोस्ट-ओसीआर ट्री सत्यापन अजगर स्क्रिप्ट निम्नानुसार है।

'''
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:])

मैंने अभी आपका अपडेट देखा है। मैं कोशिश करुंगा। मुझे आशा है कि यह OCR चुपचाप और दुर्घटनाग्रस्त बिना करता है! (वाह! 1 जीबी डाउनलोड फ़ाइल!)
एरब

0

आप एक्वाफोरेस्ट के ऑटोबान डीएक्स पर विचार कर सकते हैं: http://www.aquaforest.com/en/autobahn.asp

यह पीडीएफ के बैचों को संसाधित करने के लिए डिज़ाइन किया गया है और इसमें विभिन्न प्रकार के विकल्प हैं (जैसे छोड़ें या पास-थ्रू ओसीआर फ़ाइलें) और साथ ही पीडीएफ के स्मार्ट उपचार के लिए विकल्प जो बेहतर परिणाम पेश कर सकते हैं (जैसे कि अगर पीडीएफ में कुछ छवि पृष्ठ हैं और कुछ पाठ पृष्ठ, यह छवि पृष्ठों को केवल OCR कर सकता है)


यदि आप उस उत्पाद से संबद्ध हैं, तो कृपया अपने प्रश्न को संपादित करके स्पष्ट रूप से कहें ।
slhck

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.