Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

[Gelöst] gscan2pdf + tesseract kein ocr

Alles rund um Büroanwendungen, Bildungsprogramme und Spiele unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
Bibaltik
Member
Member
Beiträge: 208
Registriert: 28. Jul 2004, 19:33
Wohnort: Neubrandenburg
Kontaktdaten:

[Gelöst] gscan2pdf + tesseract kein ocr

Beitrag von Bibaltik » 1. Feb 2016, 11:20

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: Alles auswählen

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: Alles auswählen

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: Alles auswählen

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.
Bild

Werbung:
AimGast

Re: [Gelöst] gscan2pdf + tesseract kein ocr

Beitrag von AimGast » 2. Feb 2016, 19:18

Jetzt klappts auch bei mir. :)

Dein Tipp mit dem Repo devel:languages:perl war die Lösung. Danke!
http://download.opensuse.org/repositori ... SUSE_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: Alles auswählen

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: Alles auswählen

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

Antworten