OCR

Aus Linupedia.org
Wechseln zu: Navigation, Suche

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"`
OUT_FILE=`basename "$FILE_PATH"`

# if the IN_FILE-name 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" &

Viel Spaß ...

Zurück zu Scanner