[[Vorlage(Getestet, bionic, focal, lunar)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Packprogramme: Archive entpacken] [:sudo: Root-Rechte] [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] [:Rechte: Rechte für Dateien und Ordner ändern] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [github:tesseract-ocr:] {en} ist ein Kommandozeilenprogramm zur [wikipedia:Texterkennung:]. Ursprünglich von [wikipedia: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 [wikipedia:hOCR (Standard):hOCR], ab 3.03 zudem als [:PDF:], ab 4.0.0 auch weitergehende Layoutanalysen ([wikipedia:Analyzed_Layout_and_Text_Object:ALTO]) möglich. Die Texterkennung kann theoretisch auch "trainiert" werden. Es gibt einige Projekte, die auf tesseract-ocr zurückgreifen, siehe [#Frontends grafische Frontends], die das Programm als OCR-Engine verwenden. Auch aus [:XSane#xsane2tess:] heraus kann das Programm verwendet werden. = Installation = tesseract-ocr ist in den Paketquellen vorhanden. Installiert [1] werden müssen die folgenden Pakete: {{{#!vorlage Paketinstallation 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) }}} Ab Tesseract-Version 4.0x, z.B. in [:18.04: 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. [[Vorlage(PPA, alex-p/tesseract-ocr)]] 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). {{{#!vorlage Paketinstallation tesseract-ocr, ppa tesseract-ocr-deu, ppa, und/oder anderer gewünschte Sprachdateien }}} = Benutzung = Die allgemeine Syntax auf der Kommando-Zeile [5] lautet: {{{#!vorlage Befehl tesseract IMAGE OUTPUTBASE [-l LANGID] [-psm N] [ab Version 4.x: -oem N] [KONFIGURATIONSDATEI...] }}} Tesseract kann aufgrund der verwendeten [http://www.leptonica.org/ Leptonica-Bibliotheken] {en} 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 {{{#!vorlage Befehl tesseract -l LANGID EINGABEBILD AUSGABENAME pdf }}} tesseract erstellt daraus ein '''AUSGABENAME.pdf'''. Umwege über hOCR-Dateien, und [:ExactImage#hocr2pdf:hocr2pdf], die zudem oft nur mäßige Passung erreichten, können damit elegant umgangen werden, siehe aber [:PDF#oversized:Warnung vor überdimensionierten PDFs]. Mehrseitige PDFs lassen sich durch die Konfigurationsdatei '''pdf''' in Verbindung mit der [:tesseract-ocr#Stapelverarbeitung:Stapelverarbeitung] erstellen. == Stapelverarbeitung == Anstelle eines einzelnen Bilddateinamens kann tesseract-ocr auch automatisch eine Liste mit mehreren Dateinamen abarbeiten. {{{#!vorlage Befehl 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 {{{#!vorlage Tabelle <-2 rowclass="titel">psm-Optionen +++ Optionsnr. Funktion +++ `0` Nur Ausrichtung und Skript-Erkennung (OSD "Orientation and script detection"), erst ab tesseract 3.03 direkt nutzbar, siehe auch [:xsane2djvu#Automatisches-Drehen-der-Vorlage: 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. +++ <-2 rowclass="kopf">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 [:Texterkennung#Lios-Tesseract-Cuneiform:Lios] liefert dafür eine grafische Oberfläche. = Frontends = Die Frontends werden im Übersichtsartikel [:Texterkennung:] ab dem Punkt [:Texterkennung#OCR-Programme-mit-grafischer-Oberflaeche: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 == [[Bild(XSane/xsane-logo.png, 64, right)]] 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#oversized:]). Benötigt werden für die aktuelle Version für tesseract-ocr 4.x (kompatibel mit tesseract-ocr 3.x) zudem die Pakete {{{#!vorlage Paketinstallation exactimage, daraus das Programm econvert poppler-utils, daraus das Programm pdfunite }}} Das Texterkennungsprogramm wird mit folgendem [[Anhang (tesseract-ocr/xsane2tess4.sh, xsane2tess4-Skript)]] {dl} 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 . # # ############################################################################## # # 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 define input file (any image-format supported) -o define output-file (*.txt/hOCR/pdf) -l define language-data tesseract should use -e filename for tesseract -f 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: {{{#!vorlage Tabelle 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. }}} {{{#!vorlage Warnung 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 [[Bild(xsane/xsane-ocr.jpg, 18)]]-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 [ubuntu_fr:xsane2tess:hier] {fr} auf der französischen Ubuntu-Seite ubuntu-fr.org veröffentlicht worden. = Alternativen = * Siehe [:Texterkennung:] {Übersicht}, vergleichbare Ergebnisse erzielt eigentlich nur [:Cuneiform-Linux:]. = Links = * [:OCRFeeder:] Programm, das verschiedene OCR-Engines verwenden kann (auch tesseract-ocr) und auch Layout-Erkennung liefert. * [https://www.auxnet.de/sandy-skript-zum-erstellen-von-sandwich-pdfs-unter-ubuntu-14-04/ Sandy] {de} Skript zum Erstellen von Sandwich-PDFs unter Ubuntu 14.04+ * [https://groups.google.com/group/tesseract-ocr tesseract-ocr-Forum] {en} auf groups.google.com * [heise:-1674881:Texterkennung mit Tesseract OCR] {de} - heise Open Source, 08/2012 * [[Anhang(TesseractOSCON.pdf, "Vortrag über die Geschichte von tesseract-ocr")]] {en} {dl} '''.pdf''', 22 S. / ca. 490 KB, 07/2007 * [wikipedia_en:Tesseract_%28software%29:tesseract-ocr] #tag: Grafik, Multimedia, Büro, OCR, Texterkennung