Die besten Open-Source-Tools zur Texterkennung (OCR)

In letzter Zeit habe ich mich intensiv mit dem Thema OCR (Optimal Character Regonition) beschäftigt, da ich für ein Projekt nach einer passenden Open-Source-Lösung gesucht habe. In diesem Artikel möchte ich meine Ergebnisse teilen und Dir einen Überblick zu dem Thema geben.

Ziel von der Texterkennung (OCR) ist es, den enthaltenen Text aus einer Bilddatei zu extrahieren und diese damit in ein digital zu verarbeitendes Format zu konvertieren. Häufig wird die Texterkennung mit der Extrahierung von spezifischen Informationen aus einem Dokument, wie z.B. Rechnungsnummern oder Adressen, kombiniert.

OCR vs. Screen Text Detection

Das Problem der Texterkennung lässt sich in zwei Gruppen einteilen:

Gescannte Dokumente

Das ist der klassische Fall von OCR. Dokumente werden mittels Scanner digitalisiert und anschließend per OCR Software durchsuchbar gemacht.

Scene Text Detection/Recognition

In diese Gruppe fallen alle Bilddateien, die mittels Smartphone oder einer anderen Kamera aufgenommen wurden. Das können abfotografierte Dokumente, handschriftliche Notizen auf Papier oder Whiteboard sein, aber auch Straßenschilder oder Plakate. In diesen Fotos müssen dann die Bereiche identifiziert werden, die Schriftzeichen enthalten. Das ist die Aufgabe der Screen Text Detection. Daher ist sie quasi eine Vorstufe zur OCR-Texterkennung. Durch die Anwendung von Screen Text Detection kann die Genauigkeit und Effizienz auf solche Bilddaten verbessert werden, als wenn direkt ein OCR-Prozess darauf angewendet wird.

Für die Screen Text Recognition werden oft auf eines der beiden Modelle zurückgegriffen:

Beispielbild für die Scene Text Detection

Beide Gruppen haben ihre eigenen Herausforderungen und benötigen daher unterschiedliche Ansätze und Verarbeitungsprozesse. Daher ist es wichtig zu wissen, mit welcher Quelle man es in dem konkreten Einsatzfall zu tun hat. Ob die die Bilder (größtenteils) von einem Scanner oder einer Kamera stammen.

Komplizierter ist es natürlich, wenn bei dem eigen Projekt unklar ist, was für Daten angeliefert werden oder ob das Konzept grundsätzlich beide Arten zulassen soll. Zudem gibt es auch Misch-Einsatzgebiete, wo eine klare Unterscheidung zwischen OCR und Text Scene Detection schwierig ist, weil es sich beispielsweise um komplexe Dokumente handelt.

In diesem Fall kann entweder eine Erkennung vorgeschaltet wird, die prüft, ob eine Bilddatei von einem Scanner oder einer Kamera stammt und dann in unterschiedlichen Prozessen weiterverarbeitet. Dadurch wird die Genauigkeit erhöht und Ressourcen geschont. Dies bedeutet jedoch, dass die Komplexität bei den Pipelines stark zunimmt, wenn beide Verfahren integriert werden sollen.

Aus diesem Grund sollte der Fokus – wann immer möglich – auf einen der beiden Ansätze gelegt werden.

Die Bildqualität ist entscheidend für die Genauigkeit der Ergebnisse

Den größten Einfluss auf die Korrektheit des extrahierten Textes hat nicht die verwendete OCR Software, sondern die Bildqualität. Je besser der Input (Bildqualität) ist, desto wird auch die Genauigkeit und das Ergebnis bei der Texterkennung.

Ausreichende Auflösung

Die empfohlene Auflösung ist in den meisten Fällen 300 dpi. Bei Dokumenten mit Schriftgrößen unter 8 pt sollte die Auflösung zwischen 400 und 600 dpi liegen. Eine Erhöhung der dpi über 600 führt nicht mehr zu signifikanten Verbesserungen bei der Erkennungsrate, sondern erhöht lediglich die Dateigröße und verlangsamt die Verarbeitung, was zusätzliche Zeit und Ressourcen erfordert.

Hoher Kontrast zwischen Schrift und Hintergrund

In der OCR-Software wird intern die Bilddatei immer in schwarz/weiß umgewandelt. Allerdings kann es sinnvoll sein, diesen Prozessschritt vorab selbst auszuführen, um eine bessere Kontrolle über die Qualität zu haben, da es auch verschiedene Verfahren für diese Umwandlung gibt. Je nach Beleuchtungssituation und Quelle (Scanner, Kamera) sind hier unterschiedliche Techniken zu empfehlen.

Die Ausgangsfrage besteht darin, ob das Dokument gleichmäßig (bei Verwendung eines Scanners) oder ungleichmäßig (bei Verwendung eines Smartphones oder einer Kamera) beleuchtet wird. Wenn der Kontrast im Bild unterschiedlich ist, kann die Adaptive Histogramm Equalization (AHE) als Technik zur Konvertierung eingesetzt werden.

Gerade Kanten und keine Verzerrungen

Insbesondere wenn die Bildquelle eine Kamera ist, werden alle möglichen Arten von Verzerrungen im Bild enthalten sein. Diese können das Ergebnis der OCR sehr negativ beeinflussen. Eine vorherige Ausrichtung sowie Entzerrung (Geometrie, Trapez-Verzerrungen und Linienbegradigung) sind daher wichtige Schritte in der Preprocessing-Pipeline.

Wenig Bildstörungen

Es gibt verschiedene Arten von Bildstörungen: Artefakte, Unschärfen, Bildrauschen. Abhängig von der Art der Störungen können verschiedene Techniken zu dessen Reduzierung eingesetzt werden: Gaußscher Weichzeichner, Median Blur oder Bilateral Filter. Zusätzlich können Autoencoder mithilfe von neuronalen Netzen eingesetzt werden, um die Störungen zu entfernen.

Lösungen für die (vorherige) Bildoptimierung sind:

Open-Source OCR Tools

Im Open-Source-Umfeld gibt es sehr gute Lösungen, die zur Texterkennung eingesetzt werden können. Mit am bekanntesten ist hier sicherlich Tesseract. Je nach Einsatzgebiete können andere Produkte und insbesondere welche, die auf Deep Learning basieren, bessere Ergebnisse erzeugen.

Tesseract

Tesseract wurde von Google entwickelt und ist seit 2006 als Open-Source-Software verfügbar. Eine der zentralen Stärke ist die große Flexibilität und der Umfang von unterstützten Sprachen, die erkannt bzw. verarbeitet werden können. Geschrieben ist die Software in C++, aber es gibt sehr viele Wrapper und Integrationen für diverse Programmiersprachen. Dadurch ist eine Integration von Tesseract in die eigenen Projekte sehr einfach möglich.

Wichtige Parameter für die Konfiguration von Tesseract und die Optimierung der Ergebnisse sind:

Bildoptimierung

Vor der OCR-Verarbeitung führt Tesseract intern eine Bildoptimierung mittels der Leptonica Bibliothek durch. Über verschiedene Parameter hierauf Einfluss genommen werden: Verbesserung der Qualität des Ergebnisses.

Zu erkennende Sprachen: -l

Es ist von Vorteil, die möglichen Sprachen von vornherein zu begrenzen, beispielsweise auf Englisch und Deutsch, da dies Tesseract ermöglicht, sich auf diese Sprachen zu fokussieren und eine höhere Erkennungsgenauigkeit zu erzielen, im Gegensatz zu dem Versuch, Wörter aus allen möglichen Sprachen zu erkennen.

Mehrere Sprachen können mittels + angegeben werden: -l deu+eng. Die Reihenfolge kann einen Einfluss auf die Priorität und damit auch auf das Ergebnis. Wenn der -l Parameter nicht angegeben wird, wird Englisch als Standard verwendet.

Ausgabeformat

Tesseract unterstützt verschiedene Ausgabeformate (als Config bezeichnet). Die zu verwendende Konfiguration wird im Ende des tesseract Befehls angegeben. Beispiel: tesseract scan.jpg -l deu pdf für eine durchsuchbare PDF-Datei.

Weitere Ausgabeformate können u.a. sein:

  • hocr (hOCR Format)
  • tsv
  • txt
  • stdout oder - für die Ausgabe direkt auf der Kommandozeile

Vorteile

  • Sehr vielseitig einsetzbar
  • Führt insbesondere bei gescannten Dokumenten zu sehr guten Ergebnissen
  • Kann mehrsprachige Dokumente verarbeiten
  • Auch (einfach) via Docker einsetzbar

Nachteile

  • Bei komplexen Layouts und geringer Bildqualität kann die Erkennungsgenauigkeit rapide abnehmen.
  • Setzt in vielen Fällen eine sorgfältige Vorbereitung und Optimierung der Bilddaten voraus.
  • Erzielt keine guten Ergebnisse bei der Verarbeitung von handgeschriebenen Texten oder wenn diese nicht aus lateinischen Zeichen bestehen, sowie bei sehr kreativen Schriftarten im Dokument.
  • Nicht für die Stapelverarbeitung oder GPU-Berechnungen optimiert.

EasyOCR

Im Gegensatz tu Tesseract ist EasyOCR gut für die Erkennung von Scene Text geeignet. Das Tool besteht aus einer Reihe von Bibliotheken und ist sozusagen eine fertige Process-Pipeline. Es werden über 80 Sprachen unterstützt.

Die Pipeline besteht aus:

  • einem Text Data Generator, um Trainingsdaten für das OCR-Modell zu erstellen,
  • CRAFT für die Scene Text Detection,
  • ResNet+LSTM+CTC für die Texterkennung,
  • in Kombination mit einem Greedy Detector, welcher das beste nächste Zeichen basierend auf der höchsten Wahrscheinlichkeit auswählt.

Insbesondere die Kombination von der grundlegenden Texterkennung mit dem Greedy Detector kann die Erkennungsgenauigkeit erheblich steigern und die Verarbeitungszeit reduzieren.

Vorteile

  • Gut geeignet für Scene Text Recognition
  • Optimiert für die Verarbeitung per GPU
  • Unterstützung für Stapelverarbeitung
  • Erkennt zahlreiche Sprachen und vertikalen Text

Nachteile

  • Erkennt noch keine Handschriften (jedoch in Zukunft geplant)
  • Keine bessere Erkennungsrate bei gescannten Dokumenten im Vergleich zu Tesseract
  • Ohne GPU langsamer im Vergleich zu Tesseract

PaddleOCR

Die OCR-Lösung basiert auf PaddlePaddle, einem Deep-Learning-Framework des chinesischen Suchmaschinenanbieters Baidu. Es nutzt PGNet, einem End-to-End-Training-Model. Dieses Modell kann direkt von einem Bild in Text umwandeln, ohne dass eine separate Textsegmentierung erforderlich ist.

Vorteile

  • End-to-End-Modell
  • Unterstützung von Data Synthesis und bietet ein semi-automatisches grafisches Tool zur Annotation, wodurch die Qualität und Vielfalt der Trainingsdaten für Erkennungs- und Detektionsmodelle erhöht wird
  • Scene Text Detection mittels EAST
  • Unterstützt verschiedene Sprachen, mit einer sehr guten Erkennung von asiatischen Schriftzeichen

Nachteile

  • Direkte Abhängigkeit zur PaddlePaddle-Bibliothek
  • Langsamer im Vergleich zu den anderen beiden Lösungen
  • Ist aufwendiger in der Einrichtung und die Dokumentation ist nicht vollständig in Englisch verfügbar

Weitere Lösungen

  • MMOCR: Es bietet eine breite Palette von Modellen und Algorithmen für unterschiedliche Anwendungsfälle. Die modulare Architektur ermöglicht eine flexible Anpassung an spezifische OCR-Aufgaben. Es mangelt jedoch (noch) an der Unterstützung für verschiedene Sprachen.
  • KerasOCR: Ist eine leichtgewichtige OCR-Bibliothek, welche ein CRNN (Convolutional Recurrent Neural Network) nutzt, sowie CRAFT für die Scene Text Detection.

Entscheidungshilfe

Wie bereits erwähnt, ist die Quelle der Bilddaten eine zentrale Frage. Eine weitere wichtige Frage ist, ob der zu verarbeitende Text ausschließlich in Englisch oder in anderen Sprachen vorliegt bzw. mehrsprachig ist.

Bei Daten aus dem Scanner gibt es sehr viele mögliche Lösungen: Tesseract (CPU) oder GPU-basiert, mit EasyOCR oder PaddleOCR. MMOCR und KerasOCR sind vor allem bei (rein) englischsprachigen Dokumenten interessant.

Wird Scene Text Detection benötigt, dann ist EasyOCR oder PaddleOCR eine gute Wahl.

Die Wahl der geeigneten Methode hängt von der Datenmenge und der verfügbaren technischen Infrastruktur ab. Zudem empfiehlt es sich, verschiedene Ansätze mit demselben Datensatz zu vergleichen.

Profile picture for user cbeier
Autor

Christian Beier

Hi, ich bin Christian! Ich unterstütze Unternehmen dabei ihre Geschäftsanwendungen und Prozesse zu digitalisieren. Hier blogge ich über Drupal, Webentwicklung, Digitalisierung, Projektmanagement und andere Themen, die mich interessieren. Per RSS abonnieren. Schreibe mir eine Mail an [email protected] oder folge mir auf LinkedIn oder Mastodon.