Die Tesseract-OCR-Engine ermöglicht es, Text aus Bildern direkt in der Linux-Befehlszeile zu extrahieren. Sie zeichnet sich durch Schnelligkeit, Präzision und Unterstützung von etwa 100 Sprachen aus. Hier ist eine Anleitung zur Verwendung.
Optische Zeichenerkennung
Die optische Zeichenerkennung (OCR) bezeichnet die Fähigkeit, Wörter in einem Bild zu identifizieren und sie anschließend in bearbeitbaren Text umzuwandeln. Diese für Menschen einfache Aufgabe ist für Computer sehr komplex. Die ersten Versuche waren, milde gesagt, ungeschickt. Computer hatten oft Schwierigkeiten, wenn Schriftarten oder Größen nicht den Vorgaben der OCR-Software entsprachen.
Trotzdem wurden die Pioniere auf diesem Gebiet sehr geschätzt. Wenn die digitale Version eines Dokuments verloren gegangen ist, aber noch eine gedruckte Version vorhanden ist, kann OCR eine neue, bearbeitbare digitale Kopie erstellen. Selbst wenn die Ergebnisse nicht perfekt waren, bedeutete dies eine erhebliche Zeitersparnis.
Mit etwas manueller Nachbearbeitung war das Dokument wiederhergestellt. Die Benutzer vergaben die Fehler, da sie die Herausforderungen eines OCR-Pakets verstanden. Außerdem war es immer noch besser, als das gesamte Dokument neu abzutippen.
Die Technologie hat sich seitdem erheblich verbessert. Die Tesseract OCR-Anwendung, die von Hewlett Packard entwickelt wurde, begann in den 1980er Jahren als kommerzielles Produkt. Im Jahr 2005 wurde sie als Open Source freigegeben und wird nun von Google unterstützt. Sie bietet mehrsprachige Funktionen, gilt als eines der präzisesten OCR-Systeme auf dem Markt und ist zudem kostenlos nutzbar.
Installation von Tesseract OCR
Um Tesseract OCR unter Ubuntu zu installieren, verwenden Sie folgenden Befehl:
sudo apt-get install tesseract-ocr
Unter Fedora lautet der Befehl:
sudo dnf install tesseract
Für Manjaro lautet der Befehl:
sudo pacman -Syu tesseract
Verwendung von Tesseract OCR
Wir werden Tesseract OCR mit einigen Herausforderungen konfrontieren. Unser erstes Bild, das Text enthält, ist ein Auszug aus Erwägungsgrund 63 der Datenschutz-Grundverordnung. Wir werden sehen, ob OCR es lesen kann.
Es handelt sich um ein schwieriges Bild, da jeder Satz mit einer kleinen, hochgestellten Zahl beginnt, die in juristischen Texten üblich ist.
Wir müssen dem tesseract-Befehl einige Informationen übermitteln, einschließlich:
- Den Namen der Bilddatei, die verarbeitet werden soll.
- Den Namen der Textdatei, in der der extrahierte Text gespeichert werden soll. Die Dateiendung muss nicht angegeben werden (sie wird immer .txt sein). Wenn eine Datei mit diesem Namen bereits existiert, wird sie überschrieben.
- Wir können die Option –dpi verwenden, um Tesseract die Punkte pro Zoll-Auflösung (dpi) des Bildes mitzuteilen. Wenn kein dpi-Wert angegeben wird, versucht Tesseract, ihn selbst zu ermitteln.
Unsere Bilddatei heißt „recital-63.png“ und hat eine Auflösung von 150 dpi. Wir erstellen daraus eine Textdatei namens „recital.txt“.
Unser Befehl sieht wie folgt aus:
tesseract recital-63.png recital --dpi 150
Die Ergebnisse sind sehr gut. Das einzige Problem sind die hochgestellten Zahlen – sie waren zu schwach, um korrekt erkannt zu werden. Eine hohe Bildqualität ist entscheidend für gute Ergebnisse.
Tesseract hat die hochgestellten Zahlen als Anführungszeichen (“) und Gradzeichen (°) interpretiert, aber der eigentliche Text wurde perfekt extrahiert (die rechte Seite des Bildes musste hier beschnitten werden).
Das letzte Zeichen ist ein Byte mit dem Hexadezimalwert 0x0C, das einem Wagenrücklauf entspricht.
Unten ist ein weiteres Bild mit Text in verschiedenen Größen und sowohl fett als auch kursiv.
Der Name dieser Datei ist „bold-italic.png“. Wir möchten eine Textdatei namens „bold.txt“ erstellen, daher lautet unser Befehl:
tesseract bold-italic.png bold --dpi 150
Dies stellte kein Problem dar und der Text wurde einwandfrei extrahiert.
Verwendung verschiedener Sprachen
Tesseract OCR unterstützt etwa 100 Sprachen. Um eine Sprache zu nutzen, müssen Sie diese zuerst installieren. Wenn Sie Ihre gewünschte Sprache in der Liste finden, notieren Sie sich deren Abkürzung. Wir werden die Unterstützung für Walisisch installieren. Die Abkürzung dafür ist „cym“, was „Cymru“, die walisische Bezeichnung für Wales, bedeutet.
Das Installationspaket heißt „tesseract-ocr-“ mit der Sprachabkürzung am Ende. Um die walisische Sprachdatei in Ubuntu zu installieren, verwenden wir:
sudo apt-get install tesseract-ocr-cym
Das Bild mit dem Text ist unten zu sehen. Es ist die erste Strophe der walisischen Nationalhymne.
Lassen Sie uns prüfen, ob Tesseract OCR dieser Herausforderung gewachsen ist. Wir verwenden die Option -l (language), um Tesseract mitzuteilen, in welcher Sprache wir arbeiten möchten:
tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150
Tesseract meistert dies perfekt, wie im extrahierten Text unten gezeigt. Da iawn, Tesseract OCR.
Wenn Ihr Dokument zwei oder mehr Sprachen enthält (z. B. ein walisisch-englisches Wörterbuch), können Sie Tesseract mit einem Pluszeichen (+) anweisen, eine weitere Sprache hinzuzufügen:
tesseract image.png textfile -l eng+cym+fra
Verwendung von Tesseract OCR mit PDFs
Der tesseract-Befehl wurde für die Arbeit mit Bilddateien entwickelt und kann PDF-Dateien nicht direkt lesen. Wenn Sie jedoch Text aus einer PDF-Datei extrahieren müssen, können Sie zuerst ein anderes Tool verwenden, um eine Reihe von Bildern zu erstellen. Jedes Bild entspricht dabei einer Seite des PDFs.
Das pdftoppm-Tool, das Sie benötigen, sollte bereits auf Ihrem Linux-System installiert sein. Das PDF, das wir für unser Beispiel verwenden, ist eine Kopie von Alan Turings bahnbrechendem Aufsatz über künstliche Intelligenz, „Computing Machinery and Intelligence“.
Wir verwenden die Option -png, um anzugeben, dass wir PNG-Dateien erstellen möchten. Der Dateiname unseres PDFs lautet „turing.pdf“. Wir nennen unsere Bilddateien „turing-01.png“, „turing-02.png“ usw.:
pdftoppm -png turing.pdf turing
Um tesseract für jede Bilddatei mit einem einzigen Befehl auszuführen, benötigen wir eine for-Schleife. Für jede unserer Dateien „turing-nn.png“ führen wir tesseract aus und erstellen eine Textdatei mit dem Namen „text-“ plus „turing-nn“ als Teil des Bilddateinamens:
for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;
Um alle Textdateien zu einer Datei zusammenzuführen, können wir `cat` verwenden:
cat text-turing* > complete.txt
Das vertikale Wasserzeichen wurde als Kauderwelsch am unteren Rand der Seite transkribiert. Der Text war zu klein, um von Tesseract richtig gelesen zu werden, aber es wäre einfach genug, ihn zu finden und zu entfernen. Das schlechteste Ergebnis wären vereinzelte Zeichen am Ende jeder Zeile gewesen.
Seltsamerweise wurden die einzelnen Buchstaben am Anfang der Liste der Fragen und Antworten auf Seite zwei ignoriert. Der Abschnitt aus dem PDF ist unten zu sehen.
Wie Sie unten sehen, bleiben die Fragen erhalten, aber das „Q“ und „A“ am Anfang jeder Zeile sind verschwunden.
Diagramme werden ebenfalls nicht korrekt transkribiert. Schauen wir uns an, was passiert, wenn wir versuchen, das unten gezeigte aus dem Turing-PDF zu extrahieren.
Wie Sie in unserem Ergebnis unten sehen, wurden die Zeichen gelesen, aber das Format des Diagramms ging verloren.
Auch hier hatte Tesseract Schwierigkeiten mit der geringen Größe der Indizes und diese wurden falsch dargestellt.
Fairerweise muss man sagen, dass es dennoch ein gutes Ergebnis war. Wir haben keinen einfachen Text extrahiert, aber dieses Beispiel wurde bewusst ausgewählt, weil es eine Herausforderung darstellte.
Eine gute Lösung, wenn Sie sie brauchen
OCR ist keine alltägliche Aufgabe. Im Bedarfsfall ist es jedoch gut zu wissen, dass Ihnen eine der besten OCR-Engines zur Verfügung steht.