To zostało omówione rok temu tutaj:
Batch OCR dla wielu plików PDF (jeszcze nie OCRed)?
Czy jest jakiś sposób na grupowanie plików PDF OCR, które nie zostały jeszcze OCRedowane? Myślę, że jest to obecny stan rzeczy dotyczących dwóch zagadnień:
Partie plików PDF OCR
Windows
Acrobat - jest to najprostszy silnik ocr, który wysyła OCR. Jedynym problemem wydaje się być 1) nie pomija plików, które zostały już OCRed 2) spróbuj rzucić na to kilka plików PDF (niektóre stare) i oglądać, jak się psuje. To trochę buggy. Ostrzeże Cię przed każdym błędem, na jaki napotka (chociaż możesz nakazać oprogramowaniu, aby nie powiadamiało. Ale znowu, umiera strasznie na niektórych typach plików PDF, więc twój przebieg może się różnić.
ABBYY FineReader (Batch / Scansnap), Omnipage - To muszą być jedne z najgorzej zaprogramowanych programów znanych człowiekowi. Jeśli możesz dowiedzieć się, jak w pełni zautomatyzować (bez monitowania) partii OCR zapisywania plików PDF o tej samej nazwie, opublikuj tutaj. Wydaje się, że jedyne rozwiązania, które gdzieś znalazłem, zawiodły - zmiana nazwy, brak pełnej automatyzacji itp. W najlepszym razie istnieje sposób, aby to zrobić, ale dokumentacja i programowanie są tak okropne, że nigdy się nie dowiesz.
ABBYY FineReader Engine , ABBYY Recognition Server - To naprawdę są rozwiązania dla przedsiębiorstw, prawdopodobnie lepiej byłoby po prostu uruchomić program Acrobat w folderze i wypróbować pliki PDF, które powodują błędy / awarię programu, niż męczyć się zainstalować oprogramowanie ewaluacyjne (zakładając, że jesteś prostym użytkownikiem końcowym). Mały użytkownik nie wydaje się konkurencyjny pod względem kosztów.
** Stacja robocza Autobahn DX ** koszt tego produktu jest tak wygórowany, że prawdopodobnie można kupić 6 kopii programu Acrobat. Niezupełnie rozwiązanie dla użytkownika końcowego. Jeśli korzystasz z konfiguracji korporacyjnej, może być to dla Ciebie warte.
Linux
- WatchOCR - nie jest już rozwijany i zasadniczo niemożliwy do uruchomienia na nowoczesnych dystrybucjach Ubuntu
- pdfsandwich - już nie rozwinięty, w zasadzie niemożliwy do uruchomienia na nowoczesnych dystrybucjach Ubuntu
- ** ABBY LINUX OCR ** - powinien być skryptowalny i wydaje się mieć dobre wyniki:
http://www.splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison
Jednak, podobnie jak wiele innych produktów ABBYY, które ładują za stronę, lepiej może być próba uruchomienia OCR Acrobat Batch.
** Ocrad, GOCR, OCRopus, tesseract, ** - mogą działać, ale jest kilka problemów:
- Wyniki OCR nie są tak dobre jak, powiedzmy, akrobata dla niektórych z nich (patrz powyższy link).
- Żaden z programów nie pobiera pliku PDF i nie generuje pliku PDF. Musisz najpierw utworzyć skrypt i rozdzielić plik PDF, uruchomić programy dla każdego z nich, a następnie ponownie złożyć plik jako plik pdf
- Gdy to zrobisz, możesz odkryć, podobnie jak ja, że (tesseract) tworzy warstwę OCR, która jest przesuwana. Jeśli więc wyszukasz słowo „the”, podświetlisz jego część obok.
Partia DjVu → Konwertuj na PDF - nie zaglądałem w to, ale wydaje się, że to okropne rozwiązanie.
online
- PDFcubed.com - daj spokój , nie jest to rozwiązanie partii.
- ABBYY Cloud OCR - nie jestem pewien, czy to naprawdę rozwiązanie wsadowe, tak czy inaczej, trzeba płacić za stronę, a to może być dość drogie.
Identyfikowanie plików PDF innych niż OCR
Jest to nieco łatwiejszy problem, który można łatwo rozwiązać w systemie Linux, a tym bardziej w systemie Windows. Byłem w stanie zakodować skrypt perla, pdffont
aby określić, czy czcionki są osadzone, aby określić, które pliki nie są OCR.
Obecne „rozwiązania”
Użyj skryptu, aby zidentyfikować pliki PDF nieobsługiwane przez OCR (aby nie uruchamiać ponownie tysięcy plików PDF OCRed) i skopiuj je do katalogu tymczasowego (zachowując prawidłowe drzewo katalogów), a następnie użyj programu Acrobat w systemie Windows, aby przejść do tych plików z nadzieją, że mniejsze partie nie ulegają awarii.
użyj tego samego skryptu, ale spraw, aby jedno z narzędzi linux ocr działało poprawnie, ryzykując jakość ocr.
Myślę, że wypróbuję # 1, po prostu martwię się zbytnio o wyniki narzędzi Linux OCR (nie sądzę, żeby ktokolwiek dokonał porównania) i rozbicie plików na części i zszycie ich ponownie wydaje się być niepotrzebnym kodowaniem, jeśli Adobe może faktycznie wsadowo OCR katalogu bez zadławienia.
Jeśli chcesz całkowicie darmowego rozwiązania, będziesz musiał użyć skryptu, aby zidentyfikować pliki PDF nieobsługujące OCR (lub po prostu uruchom ponownie OCRed), a następnie użyj jednego z narzędzi linux, aby spróbować je OCR. Teseract wydaje się mieć najlepsze wyniki, ale znowu, niektóre z tych narzędzi nie są dobrze obsługiwane w nowoczesnych wersjach Ubuntu, chociaż jeśli możesz to ustawić i naprawić problem, który miałem, gdy warstwa obrazu nie pasowała do warstwy dopasowywania tekstu ( z tesseract), to miałbyś całkiem realne rozwiązanie i jeszcze raz Linux> Windows.
Czy masz działające rozwiązanie, aby w pełni zautomatyzować, grupować pliki PDF OCR , pomijając już pliki OCR o tej samej nazwie i wysokiej jakości ? Jeśli tak, naprawdę doceniłbym wkład.
Skrypt Perla do przenoszenia plików innych niż OCR do katalogu tymczasowego. Nie mogę zagwarantować, że to zadziała i prawdopodobnie trzeba go przepisać, ale jeśli ktoś sprawi, że będzie działał (zakładając, że nie działa) lub działa lepiej, daj mi znać, a ja opublikuję tutaj lepszą wersję.
#!/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\'`;
}
}
}
}
}
Odpowiedzi:
Ja również szukałem sposobu na grupowe OCR wielu plików PDF w sposób zautomatyzowany, bez większego szczęścia. Na koniec wymyśliłem praktyczne rozwiązanie podobne do twojego, używając Acrobata ze skryptem w następujący sposób:
Skopiuj wszystkie odpowiednie pliki PDF do określonego katalogu.
Usuń pliki PDF, które już zawierają tekst (zakładając, że są już OCRd lub już tekstem - nie jest to idealne, wiem, ale na razie wystarczająco dobre).
Użyj AutoHotKey, aby automatycznie uruchomić program Acrobat, wybierz określony katalog i OCR wszystkie dokumenty, dodając „-ocr” do nazwy pliku.
Przenieś pliki PDF OCRd z powrotem do ich oryginalnej lokalizacji, używając pliku „-ocr.pdf”, aby ustalić, czy się powiodło.
To trochę Heath Robinson , ale tak naprawdę działa całkiem dobrze.
źródło
Uważam, że musisz zdać sobie sprawę, że ABBYY FineReader jest rozwiązaniem dla użytkownika końcowego, zaprojektowanym w celu zapewnienia szybkiego i dokładnego, gotowego do użycia OCR.
Bazując na moim doświadczeniu, projekty OCR za każdym razem mają znacznie inne szczegóły i nie ma możliwości stworzenia gotowego zestawu dla każdego wyjątkowego przypadku, ale mogę zasugerować Ci bardziej profesjonalne narzędzia, które mogą wykonać to za Ciebie:
Spójrz na ABBYY Recognition Server , jest to profesjonalny produkt do automatyzacji OCR.
Jeśli chodzi o Linuksa, spójrz na http://ocr4linux.com , to narzędzie wiersza poleceń, które również może ci pasować.
Do bardziej skomplikowanych zadań ABBYY ma bardzo elastyczne zestawy SDK, takie jak ABBYY FineReader Engine (hostowany wewnętrznie) lub ABBYY Cloud OCR SDK (oparty na chmurze Microsoft Azure), które pozwalają zaprojektować przetwarzanie OCR tak, jak chcesz.
Należałem do zespołu programistów front-end dla usługi w chmurze określonej powyżej i w razie potrzeby mogę podać więcej informacji na jej temat.
Biorąc pod uwagę wyszukiwanie warstwy tekstowej w formacie PDF, nie mogę udzielić żadnej porady na ten temat, ponieważ to zadanie jest nieco poza OCR, co jest moją specjalnością, więc uważam, że twoje podejście do używania zewnętrznego skryptu jest bardzo rozsądne. Być może ta dyskusja okaże się pomocna: http://forum.ocrsdk.com/questions/108/check-if-pdf-is-scanned-image-or-contains-text
źródło
W systemie Linux
Najlepszym i najłatwiejszym sposobem na jego użycie
pypdfocr
nie jest zmiana pliku pdfNa koniec będziesz miał inny
your_document_ocr.pdf
sposób, w jaki chcesz, z tekstem do przeszukiwania. Aplikacja nie zmienia jakości obrazu. Zwiększa nieco rozmiar pliku, dodając tekst nakładki.Partie pdf
Jeśli pliki PDF znajdują się w podfolderach:
Aktualizacja 3 listopada 2018 r .:
pypdfocr
nie jest już obsługiwany od 2016 r. i zauważyłem pewne problemy z powodu braku opieki.ocrmypdf
( moduł ) wykonuje podobną pracę i może być używany w następujący sposób:Żeby zainstalować:
lub
więc rozkaz stałby się
źródło
Na początku 2015 roku odniosłem pewien sukces, wykonując całkowicie bezdotykowy pakiet OCR przy użyciu Nuance OmniPage Ultimate na Windowsie. Nie za darmo, cena katalogowa 500 USD. Użyj dołączonego programu wsadowego „DocuDirect”. Ma opcję „Uruchom zadanie bez monitów”, która wydaje się bezpośrednią odpowiedzią na twoje pierwotne pytanie.
Użyłem DocuDirect do wygenerowania jednego pliku PDF z możliwością przeszukiwania dla każdego obrazu wejściowego (tzn. Pliku PDF, którego nie można przeszukiwać); można nakazać replikację drzewa katalogu wejściowego w folderze wyjściowym, a także oryginalnych nazw plików wejściowych (prawie - patrz poniżej). Wykorzystuje także wiele rdzeni. Dokładność była najlepsza z ocenionych przeze mnie pakietów. Dokumenty chronione hasłem są pomijane (bez zatrzymywania zadania, bez wyświetlania okna dialogowego).
Zastrzeżenie 1: Prawie oryginalne nazwy plików - sufiks „.PDF” zmienia się na „.pdf” (tj. Od wielkich do małych liter), ponieważ hej, w Windowsie jest tak samo. (Ugh.)
Zastrzeżenie 2: Brak pliku dziennika, więc diagnoza, które pliki zawiodły podczas rozpoznawania - co zdecydowanie robią - powraca. DocuDirect z przyjemnością wygeneruje zniekształcone dane wyjściowe, tak jakby brakowało całych stron. Napisałem skrypt Pythona za pomocą modułu PyPDF2, aby zaimplementować surową walidację: testowanie, czy liczba stron wyjściowych odpowiada liczbie stron wejściowych. Patrz poniżej.
Zastrzeżenie 3: Zamazany, niewyraźny plik obrazu wejściowego spowoduje zawieszenie programu OmniPage na zawsze, bez użycia procesora; po prostu nigdy się nie odzyskuje. To naprawdę wykracza poza przetwarzanie wsadowe i nie znalazłem żadnych obejść. Zgłosiłem to również do Nuance, ale nigdzie nie dotarłem.
@Joe ma rację, że oprogramowanie jest źle zaprogramowane i udokumentowane. Zauważam, że rdzeń OmniPage ma niesamowitą magiczną technologię rozpoznawania znaków, ale zewnętrzna powłoka (GUI i przetwarzanie wsadowe) jest wystarczająca, aby wyciągnąć włosy.
Popieram sugestie @ Joe i @ Kiwi, aby ekranować pliki za pomocą skryptów, aby przedstawić pakiet OCR tylko niezabezpieczonym dokumentom graficznym.
Moje jedyne powiązanie z Nuance to niezupełnie zadowolony klient - mam na to mnóstwo nierozstrzygniętych zgłoszeń do pomocy technicznej :)
@Joe: Późna odpowiedź, ale może wciąż aktualna. Społeczność @SuperUser: Mam nadzieję, że czujesz, że to temat.
** Aktualizacja ** następcą pakietu jest Nuance PowerPDF Advanced, cena katalogowa zaledwie 150 USD. Miałem z tym jeszcze lepszy sukces, jest tak samo dokładny, ale o wiele bardziej stabilny.
Następuje skrypt sprawdzania poprawności drzewa przed / po OCR.
źródło
Możesz rozważyć Aquaforest's Autobahn DX: http://www.aquaforest.com/en/autobahn.asp
Jest przeznaczony do przetwarzania partii plików PDF i ma wiele opcji (np. Pomijanie lub przekazywanie plików OCRed), a także opcje inteligentnego przetwarzania plików PDF, które mogą oferować lepszy wynik (np. Jeśli plik PDF zawiera niektóre strony obrazu i niektóre strony tekstowe, może po prostu OCR stron obrazkowych)
źródło
W dniu
Mac
lubLinux
:parallel --tag -j 2 ocrmypdf '{}' 'output/{}' ::: *.pdf
Od tutaj .
źródło