tesseract-ocr

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Archive entpacken

  3. Root-Rechte

  4. Einen Editor öffnen

  5. Ein Terminal öffnen

  6. Rechte für Dateien und Ordner ändern

Inhaltsverzeichnis
  1. Installation
    1. PPA
  2. Benutzung
    1. Mehrere Sprachen
    2. Direktes Erstellen von PDF-Dateien
    3. Stapelverarbeitung
    4. Layout-Analyse
    5. OCR Engine Mode (ab tesseract 4.x)
  3. tesseract-ocr trainieren
  4. Frontends
    1. xsane2tess
  5. Alternativen
  6. Links

Wiki/Icons/terminal.png tesseract-ocr 🇬🇧 ist ein Kommandozeilenprogramm zur Texterkennung. Ursprünglich von Hewlett-Packard zwischen 1984 und 1995 als kommerzielles Programm entwickelt, wurde der Code 2005 freigegeben. Die Entwicklung wird von Google unterstützt, da eine Open-Source-Lösung zur Erstellung von E-Books benötigt wurde. Das Programm unterstützt etliche westeuropäische und asiatische Sprachen wie z.B. vietnamesisch. Zunächst war tesseract-ocr ein reines Zeichenerkennungs-Programm, es lieferte keine Layout-Analyse, und gab nur unformatierten Text aus. Ab Version 3.00 ist auch hOCR, ab 3.03 zudem als PDF, ab 4.0.0 auch weitergehende Layoutanalysen (ALTO) möglich. Die Texterkennung kann theoretisch auch "trainiert" werden.

Es gibt einige Projekte, die auf tesseract-ocr zurückgreifen, siehe grafische Frontends, die das Programm als OCR-Engine verwenden. Auch aus XSane (Abschnitt „xsane2tess“) heraus kann das Programm verwendet werden.

Installation

tesseract-ocr ist in den Paketquellen vorhanden. Installiert [1] werden müssen die folgenden Pakete:

Paketliste zum Kopieren:

sudo apt-get install tesseract-ocr tesseract-ocr-deu 

Oder mit apturl installieren, Link: apt://tesseract-ocr,tesseract-ocr-deu

Ab Tesseract-Version 4.0x, z.B. in Ubuntu 18.04 können zusätzlich Pakete für weitere Schriftarten verwendete werden, die als Pakete unter tesserac-ocr-script-... zu finden sind, die Frakturerkennung z.B. mit dem Paket tesseract-ocr-script-frak.

PPA

Wer Wert auf die aktuelle Version von tesseract 4.x legt, kann mit der Installation aus einem PPA immer auf dem neusten Stand der Entwicklung bleiben.

Adresszeile zum Hinzufügen des PPAs:

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.


Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen sind der Wiki/Vorlagen/PPA/ppa.png PPA-Beschreibung des Eigentümers/Teams alex-p zu entnehmen.

Damit Pakete aus dem PPA genutzt werden können, müssen die Paketquellen neu eingelesen werden.

Das PPA enthält aktuelle Versionen für leptonica, tesseract-ocr und alle verfügbaren tesseract-Sprachdateien, Details auf der PPA-Seite. Allerdings können ggf. nicht alle Programme diese Version verwenden (gImageReader z.B. stürzt bei Nutzung regelmäßig ab).

Paketliste zum Kopieren:

sudo apt-get install tesseract-ocr tesseract-ocr-deu 

Oder mit apturl installieren, Link: apt://tesseract-ocr,tesseract-ocr-deu

Benutzung

Die allgemeine Syntax auf der Kommando-Zeile [5] lautet:

tesseract IMAGE OUTPUTBASE [-l LANGID] [-psm N] [ab Version 4.x: -oem N] [KONFIGURATIONSDATEI...] 

Tesseract kann aufgrund der verwendeten Leptonica-Bibliotheken 🇬🇧 so gut wie jedes Bildformat verarbeiten, allerdings können PDF-Dateien nicht direkt verwendet werden.

Die Ausgabe erfolgt im einfachen Text-Format mit den Zeilenumbrüchen wie in der Vorlage; die Erkennungsqualität ist, natürlich abhängig von der Bildqualität der Vorlage, für "Standardschriftarten" sehr hoch, auch gängige Sonderzeichen werden gut erkannt. Ab Version 3.0x ist über das Konfigurationsskript hocr auch die Ausgabe in einem html-Format möglich, in dem auch die Positionen der erkannten Wörter gespeichert werden. Sinnvoll z.B. für sog. PDF-Sandwiches, in denen eine durchsuchbare Textlage unter der Grafik eingebettet wird (siehe z.B. pdfsandwich).

Mehrere Sprachen

Um mehrsprachige Vorlagen besser erkennen zu lassen, können die Sprachen ab Version 3.03 auch kombiniert werden, indem sie bei der l-Option durch ein +-Zeichen ohne Leerstellen angehängt werden. Sinnvoll auch bei Vorlagen, in denen Fraktur/Kyrillisch/Griechisch und lateinische Schriften gleichzeitig verwendet werden (Lexika o.ä., z.B. mit -l lat+deu-frak (Version 3.x) bzw -l lat+deu+Fraktur (Version 4.x).

Direktes Erstellen von PDF-Dateien

Ab Version 3.03 lassen sich mit Tesseract direkt PDF-Dateien mit durchsuchbare Textebene aus den Vorlagen erstellen. Dazu wird bei der Texterkennung die Konfigurationsdatei pdf verwendet; der Aufruf erfolgt also als

tesseract -l LANGID EINGABEBILD AUSGABENAME pdf 

tesseract erstellt daraus ein AUSGABENAME.pdf. Umwege über hOCR-Dateien, und hocr2pdf, die zudem oft nur mäßige Passung erreichten, können damit elegant umgangen werden, siehe aber Warnung vor überdimensionierten PDFs.

Mehrseitige PDFs lassen sich durch die Konfigurationsdatei pdf in Verbindung mit der Stapelverarbeitung erstellen.

Stapelverarbeitung

Anstelle eines einzelnen Bilddateinamens kann tesseract-ocr auch automatisch eine Liste mit mehreren Dateinamen abarbeiten.

tesseract -l LANGID DATEILISTE AUSGABENAME [KONFIGURATIONSDATEI] 

Die Liste DATEILISTE ist dabei eine einfache Textdatei, die je Zeile einen Pfad zu einer Bilddatei enthält. Die Bilder auf der Liste können dabei unterschiedliche Formate haben, da tesseract-ocr die Dateien sequenziell abarbeitet. Wird die Konfigurationsdatei pdf verwendet, erzeugt tesseract-ocr eine einzelne, mehrseitige, durchsuchbare Datei mit dem Namen AUSGABENAME.pdf.

Layout-Analyse

Mit der -psm-Option lässt sich festlegen, dass tesseract-ocr nur bestimmte Subroutinen zur Layout-Analyse durchführt, oder die Vorlage als einen festgelegten Vorlagentyp auffasst. N steht dabei für einen Zahlwert

psm-Optionen
Optionsnr. Funktion
0 Nur Ausrichtung und Skript-Erkennung (OSD "Orientation and script detection"), erst ab tesseract 3.03 direkt nutzbar, siehe auch Automatisches Drehen von Vorlagen
1 Automatische Seitensegmentierung mit OSD.
2 Automatische Seitensegmentierung, aber keine OSD, oder Texterkennung (OCR).
3 Vollständige automatische Seitensegmentierung, aber keine OSD (Standardeinstellung).
4 Behandelt die Vorlage als eine einzelne Textspalte mit unterschiedlichen Zeichengrößen.
5 Behandelt die Vorlage als einzelnen einheitlichen Textblock im Blocksatz.
6 Behandelt die Vorlage als einheitlichen Textblock
7 Behandelt das Bild als einzelne Textzeile.
8 Behandelt das Bild als einzelnes Wort.
9 Behandelt das Bild als einzelnes, im Kreis geschriebenes Wort.
10 Behandelt das Bild als einzelnes Zeichen.
Ab Version 4.x zusätzlich verwendbar:
11 Reiner Text, findet so viel Text wie irgend möglich, ohne ein spezielle Richtung oder Reihenfolge.
12 Reiner Text, mit OSD (siehe Option 0)
13 "Raw line" - behandelt das Bild als einzelen Textzeile, ohne irgendwelche weiteren tesseract-spezifischen Verarbeitungen anzuwenden.

OCR Engine Mode (ab tesseract 4.x)

Mit Version 4 wurde eine neue Methode der Texterkennung in tesseract-ocr eingeführt, "Neural nets LSTM", das insbesondere für verbundenen Schriften wesentlich bessere Ergebnisse erzielt. Die alte Methode ist aber weiterhin verwendbar. Mit der Option --oem lässt sich auswählen, welche Methode zum Einsatz kommen soll. 0 steht dabei für das bisherige Erkennungsverfahren, 1 für ausschließlich das neue Verfahren,2 kombiniert beide Methoden, und 3, die Standardeinstellung, verwendet, was vorhanden ist.

tesseract-ocr trainieren

Anders als Cuneiform-Linux kann tesseract-ocr "trainiert" werden; es ist möglich, komplett neue Sprachen anzulernen, ggf. auch bestehende Sprachen zu verbessern (z.B. wenn Vorlagen verwendet werden, die "ungewöhnliche" Schriftarten beinhalten, oder qualitativ nicht so hochwertig sind). Das Programm Lios liefert dafür eine grafische Oberfläche.

Frontends

Die Frontends werden im Übersichtsartikel Texterkennung ab dem Punkt OCR-Programme mit grafischer Oberfläche beschrieben. Viele davon unterstützen tesseract-ocr.

An dieser Stelle wird nur die Nutzung von XSane in Verbindung mit tesseract-ocr beschrieben.

xsane2tess

XSane/xsane-logo.png tesseract-ocr kann auch direkt aus XSane heraus verwendete werden, möglich sind Ausgaben im reinen Text-, im hOCR/html-Format (z.B. für Sandwich-PDFs) oder direkt als PDF. Verarbeitung von Mehrfachscans können durch auch die Angabe einer Sammel-Ausgabedatei erstellt werden. Das Skript konvertiert die von XSane intern verwendeten .ppm-Dateien in .png-Dateien, mit fester dpi-Auflösung, da tesseract 4 ansonsten die dpi des Eingabebildes nicht erkennt, dann auf einen internen 70-dpi-Modus umstellt, der aber bei Verwendung für PDFs zur Ausgabe von Riesen-Dateien führt (siehe dazu die Ausführungen im Artikel PDF (Abschnitt „oversized“)). Benötigt werden für die aktuelle Version für tesseract-ocr 4.x (kompatibel mit tesseract-ocr 3.x) zudem die Pakete

Paketliste zum Kopieren:

sudo apt-get install exactimage poppler-utils 

Oder mit apturl installieren, Link: apt://exactimage,poppler-utils

Das Texterkennungsprogramm wird mit folgendem xsane2tess4-Skript ⮷ eingebunden:

#!/bin/bash
#    xsane2tess3 - tesseractOCR directly from xsane
#    Copyright (C) 2012-2019 Heinrich Schwietering
# 
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
#
##############################################################################
#
#                                   xsane2tess4 0.1
#
#                          *** tesseract made simple ***
#
#
##############################################################################
#
# xsane2tess is a TesseractOCR wrapper to be able to use tesseract with xsane
#
#
#
TEMP_DIR=/tmp/      # folder for temporary files (all files)
ERRORLOG="xsane2tess4.log"  # file where STDERR goes 

#TEST="testoutput.txt"

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

  xsane2tess4 scans images with TesseractOCR
  and outputs text in a file, a PDF or as hocr/html document

  OPTIONS:
    -i <file1>  define input file (any image-format supported)
    -o <file2>  define output-file (*.txt/hOCR/pdf)
    -l <lang>  define language-data tesseract should use
    -e <config> filename for tesseract
    -f </path/to/Final> name and path for multiscan document

  Progress- & error-messages will be stored in this logfile:
     $TEMP_DIR$ERRORLOG

  xsane2tess depends on
    - XSane, http://www.xsane.org/
    - TesseractOCR, http://code.google.com/p/tesseract-ocr/
    - pdfunite from poppler-utils
    - econvert from exact-image

  Some coding was stolen from 'ocube'
  http://www.geocities.com/thierryguy/ocube.html
  
  This adaption is based on xsane2tess  
  http://doc.ubuntu-fr.org/xsane2tess, 

  Hints always welcome! heinrich (dot) schwietering (at) gmx (dot) de

"
  exit
fi


# get options...
while getopts ":i:o:l:c:f:" OPTION
  do
  case $OPTION in
    i )  # input filename (with path)
      FILE_PATH="$OPTARG"
    ;;
    o )  # output filename
      FILE_OUT="$OPTARG"
    ;;
    l )  # Language-selection
      LANG="$OPTARG"
    ;;
    c )  # use hocr configfile
      CONFILE="$OPTARG"
    ;;
    f )  # final name for multiscan ocr file
      FINAL="$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##*/.*}"

echo "~~~+++~~~~+++~~~Start "$(date +%c) 1>&2

# convert input to png with 300 dpi; tesseract 4.xx can't recognise the 
# resölution of XSanes internal ppm file format, which leads to gigantic pdf files
econvert -i "$IN_FILE" --resolution 300 -o IN_FILE.png 1>&2

# start OCR (tesseract expands output with *.txt/.html/.pdf)
{ if [[ "$CONFILE" == '' ]]
	then
	tesseract IN_FILE.png "$FILE_OUT" -l "$LANG" 1>&2
	echo Tesseract used with -l "$LANG" 1>&2
	else
	tesseract IN_FILE.png "$FILE_OUT" -l "$LANG" "$CONFILE" 1>&2
	echo Tesseract used with -l "$LANG" and "$CONFILE" 1>&2
fi }

{ if [[ "$FINAL" != '' ]]
  then
	{ if [[ "$CONFILE" == "" ]]
	then
# check if final txt file is already existing
    		{ if [[ ! -a "$FINAL".txt ]]
     		then
# start final ocr txt file
        	mv "$FILE_OUT".txt "$FINAL".txt 1>&2
		echo "$FINAL.txt started" 1>&2
		else
                mv "$FINAL".txt "$FINAL".new.txt
		cat "$FINAL".new.txt "$FILE_OUT".txt > "$FINAL".txt
		echo "$FILE_OUT. txt added to $FINAL.txt" 1>&2
		rm "$FINAL".new.txt
		fi }
	else
# check if final hocr/pdf file is already existing
   		{ if [[ ! -a "$FINAL"."$CONFILE" ]]
    			then
# start final hocr/pdf file
        		mv "$FILE_OUT"."$CONFILE" "$FINAL"."$CONFILE" 1>&2
			echo "$FINAL.$CONFILE started" 1>&2
			else
# add new file to existing one
                	mv "$FINAL"."$CONFILE" "$FINAL".new."$CONFILE"
			{ if [[ "$CONFILE" == "pdf" ]]
				then
				pdfunite "$FINAL".new."$CONFILE" "$FILE_OUT"."$CONFILE" "$FINAL"."$CONFILE"
	 			else
				cat "$FINAL".new."$CONFILE" "$FILE_OUT"."$CONFILE" > "$FINAL"."$CONFILE"
			fi }
		echo "$FILE_OUT"."$CONFILE" added to "$FINAL"."$CONFILE" 1>&2
		rm "$FINAL".new."$CONFILE"
		fi }
	fi }

	rm $FILE_OUT	
	else
# STDOUT scanned text => FILE_OUT
	cat "$FILE_OUT".*

fi }

rm $FILE_OUT.*
rm IN_FILE.png
echo "~~~+++~~~~+++~~~Finished "$(date +%c) 1>&2

Es wird in einen Editor [4] geladen, dann mit Root-Rechten [3] unter z.B. /usr/local/bin/xsane2tess4.sh gespeichert und ausführbar[6] gemacht. Die Logdatei xsane2tess4.log wird in /tmp angelegt, im Skript kann optional das gewünschte Temporär-Verzeichnis in Zeile 32 eintragen werden.

In "XSane → Einstellung → Konfiguration → Texterkennung" wird als OCR-Befehl "/usr/local/bin/xsane2tess4.sh" sowie weitere Optionen eingesetzt, als Option für die Eingabedatei "-i", für die Ausgabedatei "-o", alles andere bleibt frei.

Weitere Optionen sind:

Option Funktion
-l KÜRZEL OCR-Sprachkürzel der zu verwendenden Sprache; entsprechendes Sprachpaket muss installiert sein
-c NAME Verwendung der Konfigurationsskripte, z.B. hocr oder pdf
-f /PFAD/ZUR/SAMMELDATEI Name der Sammeldatei zur einfachen Erkennung von Mehrfachscans, z.B. für ADF-Scanner sinnvoll. Ohne Angabe des Pfades wird die Sammeldatei im Homeverzeichnis des Benutzers abgelegt. Beim Namen keine Endung angeben, die ensprechende Endung (.txt, pdf oder .html) wird automatisch verwendet.

Achtung!

Die Angaben müssen sehr exakt erfolgen, es dürfen zwischen den Optionen nur einfache Leerzeichen verwendet werden, sonst kommt es zu Fehlern!

Beispiele für die Eingabe

/PFAD/ZU/xsane2tess4.sh -l deu -c hocr

Erstellt wird eine einseitige hocr/html-Datei.

/PFAD/ZU/xsane2tess4.sh -l deu+eng -f /Home/BENUTZER/Texterkennung/Englisch-Deutsch-Text

Erstellt wird die Datei Englisch-Deutsch-Text.txt im "Mehrfachmodus", verwendet wird das Paket für englisch- und für deutschsprachige Vorlagen. An die Datei könne auch später weitere OCR-Ergebnisse angehängt werden. Das gewählte Verzeichnis muss existieren und für den Benutzer beschreibbar sein.

Als Einstellung wird in XSane der Betrachter-Modus, sowie "Strichzeichnung" und als Auflösung "300 dpi" (welche Bildformat ist egal; bei sehr kleiner Schrift ggf. eine höhere Auflösung wählen). Nun wird die Vorlage gescannt und dann im Betrachter die xsane/xsane-ocr.jpg-Taste bedient. Mit tesseract erfolgt die eigentliche Texterkennung. Die Datei wird dann mit dem ausgewählten Namen (entsprechende Endung angeben!) im ausgewählten Verzeichnis abgespeichert, die nicht mehr benötigten Bild-Dateien werden gelöscht. Wenn im Betrachtermodus zum Abspeichern der gleiche Dateiname verwendet wird, werden weitere Texterkennungen an die bestehende Datei angehängt; sehr praktisch, um auch mehrseitige Texte gleich in einer Textdatei ausgeben zu können.

Alternativ kann auch als Speicherformat "TEXT" angegeben werden, wenn keine Überprüfung der Ausgabe nötig ist. Damit lässt sich der "Umweg" über den Betrachter-Modus umgehen und direkt eine OCR-Datei anlegen, z.B. beim Einscannen mehrerer Text-Seiten über ADF-Scanner sinnvoll. Mit Verwendung der Option -f werden die OCR-Ergebnisse auch im Speicher-Modus umstandslos aneinandergehängt. Dabei ist es egal, was für Angaben für den Speicherort und Dateiname im Einstellungsfenster verwendet werden, die Angabe im Konfigurationsfenster zum OCR-Befehl hat den Vorrang; natürlich darf nicht der gleiche Name im selben Verzeichnis gewählt werden.

Die Urform dieses xsane2tess-Skripts ist dem Mandriva-Forum entnommen und dann weiterentwickelt worden. Das Original-xsane2tess-Skript ist hier 🇫🇷 auf der französischen Ubuntu-Seite ubuntu-fr.org veröffentlicht worden.

Alternativen