OCR
Autor: Hartmut
OCR
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[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 ...
Shellscript xsane2tess.sh
#!/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"` TIF_FILE="$TEMP_DIR""${IN_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" &
Viel Spaß ...