So führen Sie OCR über die Linux-Befehlszeile mit Tesseract aus
Veröffentlicht: 2022-01-29Sie können Text aus Bildern auf der Linux-Befehlszeile mit der Tesseract OCR-Engine extrahieren. Es ist schnell, genau und funktioniert in etwa 100 Sprachen. Hier erfahren Sie, wie Sie es verwenden.
Optische Zeichenerkennung
Optische Zeichenerkennung (OCR) ist die Fähigkeit, Wörter in einem Bild zu betrachten und zu finden und sie dann als bearbeitbaren Text zu extrahieren. Diese einfache Aufgabe für Menschen ist für Computer sehr schwierig. Frühe Bemühungen waren klobig, um es gelinde auszudrücken. Computer waren oft verwirrt, wenn die Schriftart oder -größe der OCR-Software nicht gefiel.
Trotzdem genoss man die Pioniere auf diesem Gebiet nach wie vor in hohem Ansehen. Wenn Sie die elektronische Kopie eines Dokuments verloren haben, aber noch eine gedruckte Version hatten, konnte OCR eine elektronische, bearbeitbare Version wiederherstellen. Auch wenn die Ergebnisse nicht zu 100 Prozent genau waren, war dies immer noch eine große Zeitersparnis.
Mit etwas manuellem Aufräumen hätten Sie Ihr Dokument zurück. Die Leute verziehen die Fehler, die es gemacht hat, weil sie die Komplexität der Aufgabe verstanden haben, vor der ein OCR-Paket steht. Außerdem war es besser, als das gesamte Dokument abzutippen.
Die Dinge haben sich seitdem deutlich verbessert. Die von Hewlett Packard geschriebene OCR-Anwendung Tesseract wurde in den 1980er Jahren als kommerzielle Anwendung gestartet. Es wurde 2005 als Open Source veröffentlicht und wird jetzt von Google unterstützt. Es ist mehrsprachig, gilt als eines der genauesten OCR-Systeme auf dem Markt und Sie können es kostenlos nutzen.
Installieren von Tesseract OCR
Verwenden Sie diesen Befehl, um Tesseract OCR unter Ubuntu zu installieren:
sudo apt-get install tesseract-ocr
Bei Fedora lautet der Befehl:
sudo dnf installiere Tesseract
Auf Manjaro müssen Sie Folgendes eingeben:
sudo pacman -Syu Tesseract
Verwenden von Tesseract OCR
Wir werden Tesseract OCR vor eine Reihe von Herausforderungen stellen. Unser erstes Bild, das Text enthält, ist ein Auszug aus Erwägungsgrund 63 der Datenschutz-Grundverordnung. Mal sehen, ob OCR das lesen kann (und wach bleibt).
Es ist ein kniffliges Bild, weil jeder Satz mit einer schwachen hochgestellten Zahl beginnt, was typisch für Gesetzesdokumente ist.
Wir müssen dem tesseract
Befehl einige Informationen geben, darunter:
- Der Name der Bilddatei, die verarbeitet werden soll.
- Der Name der Textdatei, die erstellt wird, um den extrahierten Text aufzunehmen. Wir müssen die Dateierweiterung nicht angeben (es wird immer .txt sein). Wenn bereits eine Datei mit demselben Namen vorhanden ist, wird sie überschrieben.
- Wir können die Option
--dpi
verwenden, umtesseract
die Auflösung des Bildes mit Punkten pro Zoll (dpi) mitzuteilen. Wenn wir keinen dpi-Wert angeben, versuchttesseract
, ihn herauszufinden.
Unsere Bilddatei heißt „recital-63.png“ und hat eine Auflösung von 150 dpi. Wir werden daraus eine Textdatei namens „recital.txt“ erstellen.
Unser Befehl sieht so aus:
Tesseract Erwägungsgrund-63.png Erwägungsgrund --dpi 150
Die Ergebnisse sind sehr gut. Das einzige Problem sind die hochgestellten Zeichen – sie waren zu schwach, um richtig gelesen zu werden. Eine gute Bildqualität ist entscheidend, um gute Ergebnisse zu erzielen.
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 angepasst werden).
Das letzte Zeichen ist ein Byte mit dem hexadezimalen Wert 0x0C, was ein Wagenrücklauf ist.
Unten ist ein weiteres Bild mit Text in verschiedenen Größen und sowohl fett als auch kursiv.
Der Name dieser Datei lautet „bold-italic.png“. Wir möchten eine Textdatei namens „bold.txt“ erstellen, also lautet unser Befehl:
tesseract bold-italic.png fett --dpi 150
Dieser bereitete keine Probleme und der Text wurde perfekt extrahiert.
Verwendung verschiedener Sprachen
Tesseract OCR unterstützt rund 100 Sprachen. Um eine Sprache zu verwenden, müssen Sie sie zuerst installieren. Wenn Sie die Sprache, die Sie verwenden möchten, in der Liste finden, notieren Sie sich ihre Abkürzung. Wir werden Unterstützung für Walisisch installieren. Seine Abkürzung ist „Cym“, was die Abkürzung für „Cymru“ ist, was walisisch bedeutet.
Das Installationspaket heißt „tesseract-ocr-“, wobei das Sprachkürzel am Ende angehängt ist. Um die walisische Sprachdatei in Ubuntu zu installieren, verwenden wir:
sudo apt-get install tesseract-ocr-cym
Das Bild mit dem Text ist unten. Es ist die erste Strophe der walisischen Nationalhymne.
Mal sehen, ob Tesseract OCR der Herausforderung gewachsen ist. Wir verwenden die Option -l
(Sprache), um tesseract
die Sprache mitzuteilen, in der wir arbeiten möchten:
tesseract hen-wlad-fy-nhadau.png hymne -l cym --dpi 150
tesseract
kommt perfekt zurecht, wie der extrahierte Text unten zeigt. Da iawn , Tesseract OCR.
Wenn Ihr Dokument zwei oder mehr Sprachen enthält (z. B. ein walisisch-englisches Wörterbuch), können Sie ein Pluszeichen ( +
) verwenden, um tesseract
, eine weitere Sprache hinzuzufügen, etwa so:
tesseract image.png Textdatei -l eng+cym+fra
Verwenden von Tesseract OCR mit PDFs
Der Befehl tesseract
ist für die Arbeit mit Bilddateien konzipiert, kann jedoch keine PDFs lesen. Wenn Sie jedoch Text aus einer PDF-Datei extrahieren müssen, können Sie zuerst ein anderes Dienstprogramm verwenden, um eine Reihe von Bildern zu generieren. Ein einzelnes Bild repräsentiert eine einzelne Seite der PDF-Datei.
Das benötigte Dienstprogramm pdftppm
sollte bereits auf Ihrem Linux-Computer installiert sein. Das PDF, das wir für unser Beispiel verwenden, ist eine Kopie von Alan Turings bahnbrechendem Artikel ü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“ und so weiter:
pdftoppm -png turing.pdf turing
Um tesseract
für jede Bilddatei mit einem einzigen Befehl auszuführen, müssen wir eine for-Schleife verwenden. Für jede unserer „turing- nn.png “-Dateien führen wir tesseract
aus und erstellen eine Textdatei namens „text-“ plus „turing- nn “ als Teil des Bilddateinamens:
für i in turing-??.png; Tesseract "$i" "text-$i" -l eng; fertig;
Um alle Textdateien zu einer zusammenzufassen, können wir cat
verwenden:
cat text-turing* > complete.txt
Also, wie hat es geklappt? Sehr gut, wie Sie unten sehen können. Die erste Seite sieht jedoch ziemlich herausfordernd aus. Es hat verschiedene Textstile und -größen sowie Dekorationen. Es gibt auch ein vertikales „Wasserzeichen“ am rechten Rand der Seite.
Die Ausgabe ist jedoch nahe am Original. Offensichtlich ist die Formatierung verloren gegangen, aber der Text ist korrekt.
Das vertikale Wasserzeichen wurde als Kauderwelsch-Zeile am Ende der Seite transkribiert. Der Text war zu klein, um von tesseract
genau gelesen zu werden, aber es wäre leicht genug, ihn zu finden und zu löschen. Das schlimmste Ergebnis wären Streuzeichen am Ende jeder Zeile gewesen.
Merkwürdigerweise wurden die einzelnen Buchstaben am Anfang der Liste mit Fragen und Antworten auf Seite zwei ignoriert. Der Ausschnitt aus dem PDF ist unten dargestellt.
Wie Sie unten sehen können, bleiben die Fragen bestehen, aber das „Q“ und „A“ am Anfang jeder Zeile gingen verloren.
Auch Diagramme werden 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 können, wurden die Zeichen gelesen, aber das Format des Diagramms ging verloren.
Auch hier hatte tesseract
mit der geringen Größe der Indizes zu kämpfen, und sie wurden falsch gerendert.
Fairerweise war es dennoch ein gutes Ergebnis. Wir konnten keinen einfachen Text extrahieren, aber dieses Beispiel wurde bewusst gewählt, weil es eine Herausforderung darstellte.
Eine gute Lösung, wenn Sie sie brauchen
OCR ist nicht etwas, das Sie täglich verwenden müssen. Bei Bedarf ist es jedoch gut zu wissen, dass Ihnen eine der besten OCR-Engines zur Verfügung steht.