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