• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] gscan2pdf + tesseract kein ocr

Bibaltik

Member
Hallo,

ich benutze den stable Zweig von openSuSE 13.2.

Seit irgendein update (nicht bekannt welches überhaupt) verweigert tesseract die Texterkennung über gscan2pdf.
Der hocr Fix in der Tesseract.pm wurde angewendet und die Texterkennung ging vor kurzem auch.
Ältere Versionen von gscan2pdf bzw tesseract werden über die eingebundenen Repos nicht angeboten.
Erkennung über gocr geht, aber mit einer bescheidenen Erkennung.
Google spuckt natürlich nur Links zum oben genannten hocr fix aus :(

Irgendwer ein Anhaltspunkt wo es diesmal klemmen könnte?

//Edit:
Schon mal ein Stück näher:

Code:
INFO - Found tesseract version 3.02.02.
INFO - tesseract /tmp/gscan2pdf-IGzz/JviFAF6uTT.pnm /tmp/FIa_xC4nem -l deu -c tessedit_create_hocr=1
DEBUG - Warnings from Tesseract: read_params_file: Can't open tessedit_create_hocr=1
Tesseract Open Source OCR Engine v3.02.02 with Leptonica
Error in pixReadStreamPnm: error in 5
Error in pixReadStreamPnm: error in 5

Nun noch raus finden was es mit "tessedit_create_hocr=1" auf sich hat.

//Edit2:

In der Datei /usr/lib/perl5/vendor_perl/5.20.1/Gscan2pdf/Tesseract.pm

musste ich

Code:
if ( version->parse("v$version") >= version->parse('v3.02.02') ) {
        $cmd =
"tesseract $tif $path$name -l $options{language} -c tessedit_create_hocr=1";
    }
    elsif ( version->parse("v$version") >= version->parse('v3') ) {
        $cmd =
"echo tessedit_create_hocr 1 > hocr.config;tesseract $tif $path$name -l $options{language} +hocr.config;rm hocr.config";
    }
    elsif ( $options{language} ) {
        $cmd = "tesseract $tif $path$name -l $options{language}";
    }
    else {
        $cmd = "tesseract $tif $path$name";
    }
Wie folgt abändern

Code:
if ( version->parse("v$version") >= version->parse('v3.02.02') ) {
        $cmd =
"tesseract $tif $path$name -l $options{language} hocr";
    }
    elsif ( version->parse("v$version") >= version->parse('v3') ) {
        $cmd =
"echo tessedit_create_hocr 1 > hocr.config;tesseract $tif $path$name -l $options{language} +hocr.config;rm hocr.config";
    }
    elsif ( $options{language} ) {
        $cmd = "tesseract $tif $path$name -l $options{language}";
    }
    else {
        $cmd = "tesseract $tif $path$name";
    }

Da Tesseract in meiner Version 3.02.02 nur Configfiles akzeptiert und nicht wie im oberen Script Configstrings.
 
A

Anonymous

Gast
Jetzt klappts auch bei mir. :)

Dein Tipp mit dem Repo devel:languages:perl war die Lösung. Danke!
http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_13.2/
Dann lässt sich gscan2pdf aus GNOME: Apps auch installieren.

Anschließend muss man zum Dateiändern vorher den Schreibschutz aufheben!
/usr/lib/perl5/vendor_perl/5.20.1/Gscan2pdf/Tesseract.pm
Code:
diff /usr/lib/perl5/vendor_perl/5.20.1/Gscan2pdf/Tesseract.pm.orig /usr/lib/perl5/vendor_perl/5.20.1/Gscan2pdf/Tesseract.pm
238c238
< "tesseract $tif $path$name -l $options{language} -c tessedit_create_hocr=1";
---
> "tesseract $tif $path$name -l $options{language} hocr";

Der hocr fix (Standarderweiterung für hocr-Dateien) steckt in der aktuellen gscan2pdf Version 1.3.6-1.1 schon drin. Keine Änderung mehr nötig!
/usr/lib/perl5/vendor_perl/5.20.1/Gscan2pdf/Tesseract.pm ab Zeile 186:
Code:
sub hocr {
    my ( $class, %options ) = @_;
    my ( $tif, $cmd, $name, $path );
    if ( not $setup ) { Gscan2pdf::Tesseract->setup( $options{logger} ) }

    # Temporary filename for output
    my $suffix;
    if ( version->parse("v$version") >= version->parse('v3.03') ) {
        $suffix = '.hocr';
    }
    elsif ( version->parse("v$version") >= version->parse('v3') ) {
        $suffix = '.html';
    }
    else {
        $suffix = '.txt';
    }
 
Oben