OCR-Texterkennung

Tesseract ist eine Open-Source-OCR-Engine (Optical Character Recognition Engine), die die beliebteste und qualitativ hochwertigste OCR-Bibliothek ist.


OCR verwendet neuronale Netze, um Text in Bildern zu suchen und zu erkennen.


Tesseract sucht nach Mustern in Pixeln, Buchstaben, Wörtern und Sätzen und verwendet einen zweistufigen Ansatz, der als adaptive Erkennung bezeichnet wird. Es dauert einen Durchgang durch die Daten zur Zeichenerkennung und dann einen zweiten Durchgang, um alle Buchstaben, in denen er sich nicht sicher war, mit Buchstaben zu füllen, die höchstwahrscheinlich dem angegebenen Wort oder Kontext des Satzes entsprechen.


Eines der Projekte bestand darin, Schecks von Fotografien zu erkennen.


Das verwendete Erkennungswerkzeug war Tesseract OCR . Zu den Vorteilen dieser Bibliothek gehören trainierte Sprachmodelle (> 192), verschiedene Arten der Erkennung (Bild als Wort, Textblock, vertikaler Text) und eine einfache Einrichtung. Da Tesseract OCR in C ++ geschrieben ist, wurde ein Wrapper eines Drittanbieters mit Github verwendet.


Die Unterschiede zwischen den Versionen sind verschiedene trainierte Modelle (Version 4 hat eine größere Genauigkeit, daher haben wir sie verwendet).


Wir benötigen Datendateien zur Texterkennung, jede Sprache hat ihre eigene Datei. Sie können die Daten hier herunterladen.


Je besser die Qualität des Originalbildes (Größe, Kontrast, Beleuchtungsmaterial) ist, desto besser ist das Erkennungsergebnis.


Es wurde auch ein Bildverarbeitungsverfahren für seine weitere Erkennung unter Verwendung der OpenCV-Bibliothek gefunden. Da OpenCV in C ++ geschrieben ist und es keinen geschriebenen Wrapper für unsere Lösung gibt, wurde beschlossen, einen eigenen Wrapper für diese Bibliothek mit den erforderlichen Bildverarbeitungsfunktionen zu schreiben. Die Hauptschwierigkeit ist die Auswahl der Werte für den Filter für die korrekte Bildverarbeitung. Es ist auch möglich, die Konturen von Schecks / Text zu finden, aber nicht vollständig verstanden. Das Ergebnis war besser (5-10%).


Parameter:


Sprache - Die Sprache des Textes aus dem Bild. Sie können mehrere auswählen, indem Sie sie mit "+" auflisten.


pageSegmentationMode - Art der Textposition im Bild;


charBlacklist - Zeichen, die ignoriert werden sollen, wobei Zeichen ignoriert werden.


Die Verwendung von nur Tesseract ergab eine Genauigkeit von ~ 70% bei einem idealen Bild, bei schlechter Licht- / Bildqualität betrug die Genauigkeit ~ 30%.



Vision + Tesseract OCR


Da das Ergebnis unbefriedigend war, wurde beschlossen, die Bibliothek von Apple - Vision zu verwenden. Wir haben Vision verwendet, um Textblöcke zu finden, das Bild weiter in separate Blöcke zu unterteilen und sie zu erkennen. Das Ergebnis war um ~ 5% besser, aber Fehler traten aufgrund wiederholter Blöcke auf.


Die Nachteile dieser Lösung waren:


  1. Arbeitsgeschwindigkeit. Die Betriebsgeschwindigkeit hat sich um das> 4-fache verringert (möglicherweise gibt es eine Ausbreitungsvariante)
  2. Einige Textblöcke wurden mehr als einmal erkannt
  3. Der Text wird von rechts nach links erkannt, weshalb der Text auf der rechten Seite des Schecks früher als der Text auf der linken Seite erkannt wurde.


MLKit


Eine weitere Methode zum Erkennen von Text ist das auf Firebase bereitgestellte MLKit von Google. Diese Methode zeigte die besten Ergebnisse (~ 90%), aber der Hauptnachteil dieser Methode ist die Unterstützung nur lateinischer Zeichen und die schwierige Verarbeitung von geteiltem Text in einer Zeile (Name - links, Preis - rechts).



Am Ende können wir sagen, dass das Erkennen von Text in Bildern eine machbare Aufgabe ist, aber es gibt einige Schwierigkeiten. Das Hauptproblem ist die Qualität (Größe, Beleuchtung, Kontrast) des Bildes, die durch Filtern des Bildes gelöst werden kann. Bei der Erkennung von Text mit Vision oder MLKit traten Probleme mit der falschen Reihenfolge der Texterkennung und der Verarbeitung von geteiltem Text auf.


Erkannter Text kann manuell korrigiert werden und ist zur Verwendung geeignet. In den meisten Fällen wird beim Erkennen von Text aus Schecks der Gesamtbetrag gut erkannt und muss nicht angepasst werden.

Source: https://habr.com/ru/post/de471542/


All Articles