tesseract-ocr
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
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:
tesseract-ocr (universe)
tesseract-ocr-deu (universe, und/oder mindestens eine Sprachdatei, z.B. -eng, -fra, -ita, -ndl, -por, -spa, -vie, oder -deu-frak (Fraktur-Erkennung))
Befehl zum Installieren der Pakete:
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:
ppa:alex-p/tesseract-ocr
Hinweis!
Zusätzliche Fremdquellen können das System gefährden.
Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen sind der PPA-Beschreibung des Eigentümers/Teams alex-p zu entnehmen.
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).
tesseract-ocr (ppa)
tesseract-ocr-deu (ppa, und/oder anderer gewünschte Sprachdateien)
Befehl zum Installieren der Pakete:
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¶
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
exactimage (daraus das Programm econvert)
poppler-utils (daraus das Programm pdfunite)
Befehl zum Installieren der Pakete:
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 -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¶
Siehe Texterkennung , vergleichbare Ergebnisse erzielt eigentlich nur Cuneiform-Linux.
Links¶
OCRFeeder Programm, das verschiedene OCR-Engines verwenden kann (auch tesseract-ocr) und auch Layout-Erkennung liefert.
Sandy 🇩🇪 Skript zum Erstellen von Sandwich-PDFs unter Ubuntu 14.04+
tesseract-ocr-Forum 🇬🇧 auf groups.google.com
Texterkennung mit Tesseract OCR 🇩🇪 - heise Open Source, 08/2012
Vortrag über die Geschichte von tesseract-ocr 🇬🇧 ⮷ .pdf, 22 S. / ca. 490 KB, 07/2007