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

OCR mit Xsane [Update 1]

Spielwurm

Advanced Hacker
Ist irgendjemand interessiert an einer funktionierenden Lösung, die auch "normale" User bedienen können? Falls ja, dann Echo > hier und ich schreibe.

Hartmut
 

whois

Ultimate Guru
Warum brauchst du eine Aufforderung?
Dies ist ein Forum und ständig an Lösungen interessiert, damit alle was davon haben. ;)
 
OP
S

Spielwurm

Advanced Hacker
Na, denn - ich kann Leute nicht leiden, die mich so billig breitschlagen!


Anleitung für OCR mit Xsane

Die folgende Lösung ist das Ergebnis harter Arbeit, die auf zweien meiner Rechner einwandfrei funktioniert. Meine Rechner haben als OS Opensuse 11.1 und KDE 4.3.x

Die OCR-Erkennung kann nur spaltenweise lesen, hängt aber auf Wunsch das Leseergebnis mehrerer Spalten aneinander an. Die Zeichenerkennung funktioniert mit der deutschen Sprache ganz ordentlich, besser als alles andere, was ich bisher probiert habe. Als Lesevorlagen dienten mir Schreibmaschinenseiten und die örtliche Tageszeitung.

Voraussetzung: Xsane und Imagemagic sind installiert und Xsane funktioniert mit dem Scanner. Wenn jemand einen HP-Scanner mit der HPLIP betreibt und Xsane sich weigert: sieh mal bitte in der /etc/sane.d/dll.conf nach, ob das Rautenzeichen vor dem letzten Eintrag "hpaio" weg ist. Wenn nicht, dann entferne es.

Installiert werden muss zusätzlich "tesseract" und "tesseract-data-deu". Das findest Du bei software.opensuse.org. Weil es dort mehrere Versionen gibt, hier der Hinweis, dass ich die Version von dieser Quelle benutze:

download.opensuse.org/repositories/openSUSE:/Factory:/Contrib/openSUSE_11.1

Ferner gehört das Script "xsane2tess.sh" (unten) ausführbar nach /usr/bin. Falls jemand eine andere Sprache nutzen möchte: in diesem Script ist mit der Option "-l deu" die deutsche Sprache fest eingestellt, das kannst Du ändern.

Du brauchst in Deinem Homeverzeichnis einen Ordner namens "/tmp".

Dann wird Xsane gestartet und eingestellt: In /Einstellungen/Texterkennung muss in die oberste Zeile "/usr/bin/xsane2tess.sh" (ohne Anführungszeichen!), die beiden Optionen "-i" und "-o" bleiben, der Rest muss weg.

Jetzt kannst Du eine Vorschau von einer Zeitungsseite scannen. Dann stellst Du die Scanfläche auf eine Spalte ein, die Scanart auf Strichzeichnung, die Auflösung auf 300dpi und scanst das zum "Betrachter". Dort gehst Du auf /Datei/OCR, wählst einen Dateinamen und OK. Fertig. Wenn alles gut gelaufen ist, steht in der Datei der passende Text. Falls das der Fall ist, killst Du den Betrachter (Bild nicht speichern) und stellst die Scanfläche auf die nächste Spalte ein. Scan sie in dieselbe ! Datei. Allerdings findest Du sie im Dateiauswahlfenster nur, wenn Du als Filter nicht "Bild", sondern "Alle Dateien" einstellst. Falls alles stimmte, dann kannst Du in der Datei den Text beider Spalten untereinander lesen. Kwrite kann Dir mit Strg-A und Strg-J einen Fließtext daraus machen.

Und so weiter ...

Gruß

Hartmut


Shellscript xsane2tess.sh
Code:
#!/bin/bash
#
# ###############################################################################
#
#                                   xsane2tess 1.0b
#
#                          *** tesseract made simple ***
#
# ###############################################################################
# 
# xsane2tess is a TesseractOCR wrapper to be able to use tesseract with xsane
# This is a modified version by Hartmut Krummrei 03/2010 with Language in line 77
# 
#
TEMP_DIR=~/tmp/      # folder for temporary files (TIFF & tesseract data)
ERRORLOG="xsane2tess.log"  # file where STDERR goes 

if [[ -z "$1"  ]]
  then
  echo "Usage: $0 [OPTIONS]

  xsane2tess converts files to TIF, scans them with TesseractOCR
  and outputs the text in a file.
  
  OPTIONS:
    -i <file1>  define input file (any image-format supported)
    -o <file2>  define output-file (*.txt)
      
  Progress- & error-messages will be stored in this logfile:
     $TEMP_DIR$ERRORLOG

  xsane2tess depends on
    - ImageMagick  http://www.imagemagick.org/
    - TesseractOCR http://code.google.com/p/tesseract-ocr/
  
  V1.0b provided by p2pforum.it  - http://linux.p2pforum.it

  Some coding was stolen from 'ocube'
  http://www.geocities.com/thierryguy/ocube.html
  
"
  exit
fi


# get options...
while getopts ":i:o:" OPTION
  do
  case $OPTION in 
    i)  # input filename (with path)
      FILE_PATH="$OPTARG"
    ;;
    o )  # output filename
      FILE_OUT="$OPTARG"
    ;;
  esac
done


# redirect STDOUT to FILE_OUT
exec 1>>"$FILE_OUT"

# redirect STDERR to ERRORLOG
exec 2>>$TEMP_DIR$ERRORLOG

# strip path from FILE_PATH, use filename only
#IN_FILE=${FILE_PATH##*/}
IN_FILE=`basename "$FILE_PATH"`
# Changed by Hartmut
OUT_FILE=`basename "$FILE_PATH"`

# Next line changed by Hartmut
# If the filename of IN_FILE is complicated, convert produces waste,
# so lets take the OUT_FILE-name
TIF_FILE="$TEMP_DIR""${OUT_FILE%.*}".tif
TXT_FILE="$TEMP_DIR""${IN_FILE%.*}"

# converting image into TIFF (ImageMagick)
convert "$FILE_PATH" -compress none  "$TIF_FILE" 1>&2

# start OCR (tesseract expands output with *.txt)
tesseract "$TIF_FILE" "$TXT_FILE" -l deu 1>&2

# STDOUT scanned text => FILE_OUT
cat "$TXT_FILE".txt

# delete graphic file after use
rm "$TIF_FILE"

# delete tesseract workfiles
rm "$TXT_FILE".txt

rm "$TXT_FILE".raw

rm "$TXT_FILE".map

#show result
kwrite "$FILE_OUT" &
 

diethn16

Newbie
Hallo Spielewurm,
ich bin einer, von denen, die froh sind, dass Du Dich hast "so billig breitschlagen!" lassen. Deine Lösung ist Spitze. Ich meine sie ist einen Eintrag ins WIKI wert!!
Oder meinst Du nicht?
Dieter
 

whois

Ultimate Guru
diethn16 schrieb:
ich bin einer, von denen, die froh sind, dass Du Dich hast "so billig breitschlagen!" lassen. Deine Lösung ist Spitze. Ich meine sie ist einen Eintrag ins WIKI wert!!
Oder meinst Du nicht?
Dem kann ich mich nur anschliessen, Funktioniert Prima. ;) :thumbs:
 
OP
S

Spielwurm

Advanced Hacker
Danke für das Feedback. Ich tue mich echt schwer mit Wiki-Seiten-schreiben, aber ich habe es soweit geschafft. Seht mal nach, ob es so OK ist, falls nicht, dann ändert das.

Hartmut
 
OP
S

Spielwurm

Advanced Hacker
Hat diese Lösung schon jemand unter 11.3 ausprobiert? Ich habe eine PN bekommen, dass es nicht geht ??

Hartmut
 

Rainer Juhser

Moderator
Teammitglied
Ich will mal noch nichts fest zusagen, aber ich versuche es Anfang nächster Woche mal auszuprobieren, da mich das auch interessiert.
 

Rainer Juhser

Moderator
Teammitglied
Das wird wohl doch etwas länger dauern - das Skript funktioniert bei mir (os 11.2 / Epson Scanner) nicht!

Wenn ich die Schritte (scannen, konvertieren, ocr) manuell durchführe, dann geht es. Mit dem Skript nicht! Aufgrund der Fehlermeldungen in der Log-Datei vermute ich als Übeltäter den seltsamen Dateinamen, den mein Epson-Scanner beim Scan in den Betrachter generiert. Ich versuche erstmal selbst da durchzublicken (von wegen Lerneffekt und so... :D ). Wenn ich alleine nicht weiterkomme, mache ich einen entsprechenden Fred auf. :roll:
 
Hallo,
ich habe ein Problem mit meinem Scanner (HP PSC 1210 all-in-one unter OpenSuse 11.3) zu dem ich hier im Forum keine Lösung gefunden habe (zumindest ich hab sie nicht gefunden).
Beschreibung :
Beim ersten Versuch mit Xsane hatte ich einen Button "Scanvorschau" oder "Vorschauscan". Anklicken und der Text wurde eingescannt. Allerdings konnte ich den Text nicht weiterverarbeiten. Bischen rumgesucht bzgl. "OCR" und auf "gocr" gestossen und nachinstalliert.
Allerdings fehlt bei Xsane nun der o.a. Button "Scanvorschau" oder "Vorschauscan". Wenn ich jetzt auf "Scannen" klicke, ruckt mein HP kurz an und Xsane wird ohne Fehlermeldung beendet.
Was mache ich falsch bzw. kann mir jemand helfen ?
Danke.
Gruß
Uli
 
OP
S

Spielwurm

Advanced Hacker
Ich habe das Ganze jetzt mal mit Opensuse 11.3 selbst probiert und es ging nicht!

Grund: Das Programm Sane übergibt ein PPM-Bild in das tmp-Verzeichnis mit dem komplizierten Namen:

xsane-conversion-hpaio:_net_Photosmart__C7200__series_ip=192.168.1.9.ppm-1000-X5EMWF

Wenn ich das an "convert" übergebe und als Ausgabedateinamen den selben Namen nehme, erzeugt "convert" Müll, eine über 10Mbyte große Datei, die eigentlich nur über 100Kbyte groß sein sollte. Sage ich "convert", dass es als Ausgabedateinamen einen leichten nehmen soll, kommt das richtige raus. Also habe ich das Script oben geändert und jetzt geht es.

Hartmut
 

Rainer Juhser

Moderator
Teammitglied
Rainer Juhser schrieb:
Aufgrund der Fehlermeldungen in der Log-Datei vermute ich als Übeltäter den seltsamen Dateinamen, den mein Epson-Scanner beim Scan in den Betrachter generiert.
Das hatte ich damals auch festgestellt, konnte der Sache aber aufgrund von Zeitmangel nicht auf den Grund gehen. Danach hatte sich das für mich erledigt, da ich mir einen schönen Brother 4 in 1 zugelegt habe. :D
 
OP
S

Spielwurm

Advanced Hacker
Update vom Ende August 2012

Ich habe heute ein Update in Sachen OCR auf meinem Rechner (inzwischen 12.1) machen wollen und folgende erfreuliche Tatsachen gefunden. Tesseract hat die Version 3 und es gibt einer grafische Oberfläche dazu. Gefunden habe ich die Pakete u.a. hier:
http://download.opensuse.org/repositories/home:/Lazy_Kent/openSUSE_12.1/
Lazy Kent ist up2date und hat auch Repositories für 12.2, Factory usw.

Diese Quelle in Yast einbinden und dann für Deutschland diese Pakete installieren:

  • tesseract
    tesseract-gui
    tersseract-traineddata-german

und die Abhängigen natürlich. Danach existiert im Menüpunkt "Grafik" ein passender Eintrag auf die GUI. Hier wählt man oben die Bilddatei(en), klickt darunter diejenige an, die man jetzt lesen möchte und piekt mit der Maus in das Bildfenster. Der Mauszeiger wird im Bildfenster zu einem kleinen Rechteck, nach dem Klick verschwindet das Rechteck und man kann ein Rechteck um den Bereich ziehen, der bearbeitet werden soll. Weiter unten findet sich ein Dropdown-Menü "language", mit dem man nur beim ersten Start die Sprache einstellt. Zuletzt auf den Button "Ausführen" klicken und wenige Sekunden später steht das Ergebnis in einer Datei mit dem 'basename' von oben und der Extension ".txt" dahinter.

Mein Testaufbau: Scan eines Zeitungsausschnitts mit 2 Meldungen zu je zwei Spalten mit Xsane als Farbscan mit 300dpi und der üblichen automatischen Optimierung und speichern als ".jpg". Auf dieses Bild habe ich Tesseract losgelassen und dabei alles ausgewählt und nicht ! optimiert.

Ergebnis: sehr gut !!! Mit Optimierung wird es nur wenig besser, weil vorher nur sehr wenig Fehler im Text standen. Das beste allerdings ist: der Text enthält alles untereinander, aber in der richtigen Reihenfolge spaltenweise gelesen. Heißt: zuerst die Überschrift der linken Meldung (über 2 Zeitungsspalten), dann die Unterüberschrift (ebenfalls 2 Spalten), danach die linke Spalte der Meldung, dann die rechte und erst dann die zweite Meldung in der gleichen Reihenfolge. Also so, wie ein Mensch das lesen würde. Unterschiedliche Fonts und Textgrößen störten nicht. Ein weiterer Test mit 2 Spalten und einem Bild mit Bildunterschrift ergab: das Bild ergab die Zeichen "s73", die Bildunterschrift stand mitten im Text.

Viel Spaß damit

Hartmut

Nachteil: Man erhält nur eine Textdatei, Layout wird nicht gespeichert.
 
Oben