이것은 1 년 전에 여기에서 논의되었습니다 :
많은 PDF 파일에 대한 배치 OCR (아직 OCR이 아님)?
아직 OCR되지 않은 OCR PDF를 배치하는 방법이 있습니까? 이것은 두 가지 문제를 다루는 현재 상태입니다.
배치 OCR PDF
윈도우
Acrobat – OCR을 일괄 처리하는 가장 간단한 ocr 엔진입니다. 유일한 문제는 1) 이미 OCR 된 파일을 건너 뛰지 않을 것입니다 .2) 많은 PDF를 던져 (일부 오래된) 시도하고 충돌하는 것을보십시오. 약간 버그가 있습니다. 각 오류가 발생할 때마다 경고합니다 (소프트웨어에 알리지 말라고 말할 수는 있지만 특정 유형의 PDF에서 심하게 죽어서 마일리지가 다를 수 있습니다.
ABBYY FineReader (배치 / 스캔 스냅), 옴니 페이지 –이 프로그램은 사람에게 알려진 최악의 프로그램 중 하나입니다. 동일한 이름으로 저장 한 PDF의 배치 OCR 을 완전히 자동화 하는 방법을 찾을 수있는 경우 여기에 게시하십시오. 이름 바꾸기, 완전 자동화되지 않은 등 어딘가에서 실패했을 수있는 유일한 솔루션 인 것 같습니다. 최선의 방법은 있지만 문서와 프로그래밍은 너무 끔찍하여 결코 찾을 수 없습니다.
ABBYY FineReader Engine , ABBYY Recognition Server- 이것들은 실제로 더 많은 엔터프라이즈 솔루션입니다. 아마도 폴더를 통해 Acrobat을 실행하여 PDF를 시도하고 제거하는 것이 더 나을 것입니다. 평가 소프트웨어 설치 (단순한 최종 사용자라고 가정) 소규모 사용자에게는 비용 경쟁력이없는 것으로 보입니다.
** 아우토반 DX 워크 스테이션 **이 제품의 가격이 너무 비싸므로 아마 6 개의 사본을 구입할 수 있습니다. 실제로 최종 사용자 솔루션이 아닙니다. 엔터프라이즈 환경이라면 이것이 가치가있을 것입니다.
리눅스
- WatchOCR – 더 이상 개발되지 않았으며 기본적으로 현대 우분투 배포판에서 실행할 수 없습니다.
- pdfsandwich – 더 이상 개발되지 않았으며 기본적으로 현대 우분투 배포판에서 실행할 수 없습니다.
- ** ABBY LINUX OCR **-이것은 스크립트 가능해야하며 좋은 결과가있는 것 같습니다.
http://www.splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison
그러나 페이지에서 청구하는 다른 ABBYY 제품과 마찬가지로 Acrobat Batch OCR을 작동시키는 것이 좋습니다.
** Ocrad, GOCR, OCRopus, tesseract, ** – 작동 할 수 있지만 몇 가지 문제가 있습니다.
- OCR 결과는 이들 중 일부에 대한 곡예사만큼 좋지 않습니다 (위 링크 참조).
- 어떤 프로그램도 PDF 파일을 받아서 PDF 파일을 출력하지 않습니다. 스크립트를 작성하고 PDF를 먼저 분리하고 각 프로그램을 실행 한 다음 파일을 pdf로 다시 어셈블해야합니다.
- 일단 당신이 한 것처럼, 당신은 (tesseract) 전환 된 OCR 레이어를 생성한다는 것을 알 수 있습니다. 따라서 'the'라는 단어를 검색하면 옆에있는 단어 부분이 강조 표시됩니다.
Batch DjVu → PDF로 변환 – 살펴 보지 않았지만 끔찍한 일주일 솔루션처럼 보입니다.
온라인
- PDFcubed.com – 실제로 배치 솔루션이 아닙니다.
- ABBYY Cloud OCR- 이것이 실제로 배치 솔루션인지 확실하지 않으면 페이지를 지불해야하며 비용이 많이들 수 있습니다.
OCR이 아닌 PDF 식별
이것은 약간 더 쉬운 문제이며 Linux에서는 쉽게 해결할 수 있으며 Windows에서는 훨씬 덜 해결할 수 있습니다. pdffont
OCR이 아닌 파일을 결정하기 위해 글꼴이 포함되어 있는지 여부를 식별하기 위해 펄 스크립트를 코딩 할 수있었습니다 .
현재 "솔루션"
스크립트를 사용하여 OCR이 아닌 PDF를 식별하여 (수천 개의 OCR이있는 PDF를 다시 실행하지 않음) 임시 디렉토리 (올바른 디렉토리 트리를 유지)에 복사 한 다음 Windows에서 Acrobat을 사용하여 더 작은 배치가 충돌하지 않습니다.
동일한 스크립트를 사용하지만 Linux ocr 도구 중 하나를 사용하여 제대로 작동하여 ocr 품질을 위험에 빠뜨리십시오.
나는 # 1을 시도 할 것이라고 생각합니다 .Linux OCR 도구의 결과에 대해 너무 걱정하고 있습니다 (누군가가 비교를하지 않았다고 생각합니다). 파일을 분리하고 다시 연결하는 것처럼 보입니다. Adobe가 실제로 숨 막히지 않고 디렉토리를 OCR로 일괄 처리 할 수 있으면 불필요한 코딩이 필요합니다.
완전 무료 솔루션을 원할 경우 스크립트를 사용하여 OCR이 아닌 PDF를 식별하거나 OCR이있는 PDF를 다시 실행 한 다음 Linux 도구 중 하나를 사용하여 OCR을 사용해보십시오. Teseract가 최상의 결과를 얻는 것처럼 보이지만 다시 말하지만 이러한 도구 중 일부는 최신 버전의 Ubuntu에서 잘 지원되지 않지만 설정하고 문제를 해결할 수 있으면 이미지 레이어가 텍스트 일치 레이어와 일치하지 않는 문제가 있습니다 ( tesseract))를 사용하면 꽤 유용한 솔루션을 얻을 수 있으며 다시 한 번 Linux> Windows입니다.
OCR PDF 를 완전히 자동화하고 일괄 처리 하여 동일한 이름을 가진 OCR 파일을 고품질로 건너 뛰는 효과적인 솔루션이 있습니까? 그렇다면 입력에 감사드립니다.
OCR이 아닌 파일을 임시 디렉토리로 이동하는 Perl 스크립트. 이 작동을 보장 할 수는 없으며 다시 작성해야 할 수도 있지만 누군가 작동하거나 작동하지 않는다고 가정하면 알려 주시면 여기에 더 나은 버전을 게시하겠습니다.
#!/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\'`;
}
}
}
}
}