Tutorial: Erstellen einer benutzerdefinierten Texterkennung mit YOLO und Tesseract

In diesem Artikel erfahren Sie, wie Sie mithilfe von Deep Learning Ihre eigene benutzerdefinierte Texterkennung erstellen, um Text aus einem Bild zu lesen. Ich werde Sie durch das Beispiel von PAN-Kartenbildern für die Texterkennung und Texterkennung führen. Machen wir uns zunächst mit dem Prozess der optischen Zeichenerkennung vertraut.

Was ist OCR?

OCR steht für Optical Character Recognition. Es wird zum Lesen von Text aus Bildern wie gescannten Dokumenten oder Bildern verwendet. Diese Technologie wird verwendet, um praktisch alle Arten von Bildern, die geschriebenen Text (eingegeben, handgeschrieben oder gedruckt) enthalten, in maschinenlesbare Textdaten umzuwandeln.

Hier erstellen wir eine OCR, die nur die Informationen liest, die Sie aus einem bestimmten Dokument lesen möchten.

OCR besteht aus zwei Hauptbausteinen:

  • Texterkennung
  • Texterkennung

1. Texterkennung

Unsere erste Aufgabe ist es, den benötigten Text aus Bildern / Dokumenten zu erkennen. Je nach Bedarf möchten Sie häufig nicht das gesamte Dokument lesen, sondern nur Informationen wie Kreditkartennummer, Aadhaar / PAN-Kartennummer, Name, Betrag und Datum von Rechnungen usw. Erkennen des erforderlichen Texts Eine schwierige Aufgabe, aber dank intensiven Lernens können wir selektiv Text aus einem Bild lesen.

Die Texterkennung oder allgemein die Objekterkennung war ein Bereich intensiver Forschung, der durch tiefes Lernen beschleunigt wurde. Die Objekterkennung und in unserem Fall die Texterkennung kann heute auf zwei Wegen erfolgen.

  • Regionsbasierte Detektoren
  • Einzelschussdetektoren

Bei regionsbasierten Methoden besteht das erste Ziel darin, alle Regionen zu finden, in denen sich die Objekte befinden, und diese Regionen an einen Klassifizierer weiterzuleiten, der die Positionen der erforderlichen Objekte angibt. Es ist also ein zweistufiger Prozess.

Erstens findet es den Begrenzungsrahmen und danach die Klasse davon. Dieser Ansatz wird als genauer angesehen, ist jedoch im Vergleich zum Single-Shot-Ansatz vergleichsweise langsam. Algorithmen wie Faster R-CNN und R-FCN verfolgen diesen Ansatz.

Single-Shot-Detektoren sagen jedoch gleichzeitig sowohl den Begrenzungsrahmen als auch die Klasse voraus. Da es sich um einen einstufigen Prozess handelt, ist er viel schneller. Es muss jedoch beachtet werden, dass Einzelschussdetektoren beim Erkennen kleinerer Objekte eine schlechte Leistung erbringen. SSD und YOLO sind Einzelschussdetektoren.

Oft gibt es einen Kompromiss zwischen Geschwindigkeit und Genauigkeit bei der Auswahl des Objektdetektors. Zum Beispiel hat Faster R-CNN die höchste Genauigkeit, während YOLO unter allen am schnellsten ist. Hier ist ein großartiger Artikel, der verschiedene Detektoren vergleicht und umfassende Einblicke in ihre Funktionsweise bietet.

Ob Sie sich für eine entscheiden, hängt ganz von Ihrer Anwendung ab. Hier verwenden wir YOLOv3 hauptsächlich, weil

  • Niemand kann es schlagen, wenn es um Geschwindigkeit geht.
  • Hat eine ausreichende Genauigkeit für unsere Anwendung.
  • YOLOv3 verfügt über ein Feature Pyramid Network (FPN), um kleine Objekte besser erkennen zu können.

Genug gesagt, tauchen wir ein in YOLO

Verwenden von YOLO (Sie suchen nur einmal) für die Texterkennung

YOLO ist ein modernes Echtzeit-Objekterkennungsnetzwerk. Es gibt viele Versionen davon. YOLOv3 ist die neueste und schnellste Version.

YOLOv3 verwendet Darknet-53 als Feature-Extraktor. Es hat insgesamt 53 Faltungsschichten, daher der Name „Darknet-53“. Es hat aufeinanderfolgende 3 × 3 und 1 × 1 Faltungsschichten und einige Verknüpfungsverbindungen.

Zum Zwecke der Klassifizierung werden unabhängige logistische Klassifizierer mit der Funktion des binären Kreuzentropieverlusts verwendet.

Schulung von YOLO mit dem Darknet-Framework

Wir werden das neuronale Netzwerk-Framework von Darknet für Schulungen und Tests verwenden. Das Framework verwendet Multi-Scale-Training, viele Datenerweiterungen und Batch-Normalisierung. Es ist ein Open-Source-Framework für neuronale Netze, das in C und CUDA geschrieben wurde. Es ist schnell, einfach zu installieren und unterstützt die Berechnung von CPU und GPU.

Sie finden die Quelle auf GitHub.

So einfach können Sie das Darknet-Framework installieren. Nur 3 Zeilen! (Wenn Sie GPU verwenden möchten, aktualisieren Sie GPU = 1 und CUDNN = 1 im Makefile.)

Git-Klon https://github.com/pjreddie/darknet.git
cd darknet
machen

Beginnen wir mit dem Bau

Holen Sie sich Ihre Daten zuerst ...

Daten sind das Erste und Wichtigste in jedem Projekt, das auf maschinellem Lernen basiert. Was auch immer Ihre Anwendung ist, stellen Sie sicher, dass Sie ungefähr 100 Bilder dafür haben. Wenn Sie weniger Bilder haben, können Sie die Größe Ihrer Daten mithilfe der Bildverbesserung erhöhen. Bei der Bildvergrößerung ändern wir Bilder im Wesentlichen, indem wir Größe, Ausrichtung, Licht, Farbe usw. ändern.

Es gibt viele Methoden zur Erweiterung, und Sie können ganz einfach jede Methode auswählen, die Sie mögen. Ich möchte eine Bildbibliothek mit dem Namen Albumentations erwähnen, die von Kaggle Masters und Grandmaster erstellt wurde.

Ich habe 50 Bilder der im Internet schwebenden PAN-Karte gesammelt und mithilfe der Bildverbesserung einen Datensatz mit 100 PAN-Kartenbildern erstellt.

Datenanmerkung

Sobald wir die Daten gesammelt haben, fahren wir mit dem nächsten Schritt fort, der darin besteht, sie zu kennzeichnen. Es stehen viele kostenlose Tools für Datenanmerkungen zur Verfügung. Ich habe VoTT v1 verwendet, weil es ein einfaches Tool ist und wie ein Zauber wirkt. Folgen Sie diesem Link, um den Prozess der Datenanmerkung zu verstehen.

Beachten Sie, dass es wichtig ist, alle Textfelder zu markieren, die aus den Bilddaten gelesen werden sollen. Es werden auch die Datenordner generiert, die während des Trainings benötigt werden.

Stellen Sie sicher, dass das Exportformat nach dem Taggen auf YOLO eingestellt ist. Kopieren Sie nach der Annotation alle generierten Dateien in den Datenordner des geklonten Repositorys.

Ausbildung

Um alle Unklarheiten zu beseitigen, verfügt Darknet über zwei Repositorys, von denen eines vom ursprünglichen Autor stammt und das andere das gespaltene ist. Wir verwenden das Forked-Repository, da es eine großartige Dokumentation enthält.

Um mit dem OCR-Training zu beginnen, müssen wir zuerst unsere Konfigurationsdatei ändern. Sie erhalten die gewünschte Konfigurationsdatei im Ordner "cfg" mit dem Namen "yolov3.cfg". Hier müssen Sie die Chargengröße, Unterteilung, Anzahl der Klassen und Filterparameter ändern. Befolgen Sie die erforderlichen Änderungen in der Konfigurationsdatei, wie in der Dokumentation angegeben.

Wir werden mit vortrainierten Gewichten von darknet-53 trainieren. Dies wird dazu beitragen, dass unser Modell früh konvergiert.

Um das Training zu starten, drücken Sie diesen Befehl

./dunkelmelderzugdaten / obj.data yolo-obj.cfg darknet53.conv.74

Das Beste ist, dass es Multi-GPU-Unterstützung bietet. Wenn Sie feststellen, dass der durchschnittliche Verlust "0.xxxxxx Durchschnitt" nach einer bestimmten Anzahl von Iterationen nicht mehr abnimmt, sollten Sie das Training beenden. Wie Sie in der folgenden Grafik sehen können, habe ich bei 14200 Iterationen angehalten, als der Verlust konstant wurde.

Verlustkurve

Es ist nicht immer so, dass Sie mit der Last Weight-Datei die besten Ergebnisse erzielen. Ich habe die besten Ergebnisse bei der 8000. Iteration erzielt. Sie müssen sie auf der Grundlage des mAP-Scores (Mean Average Precision) bewerten. Wählen Sie eine Gewichtsdatei mit der höchsten mAP-Punktzahl. Hier haben sie die Details zur Verwendung des mAP-Scores angegeben. Wenn Sie diesen Detektor nun auf einem Beispielbild ausführen, erhalten Sie den Begrenzungsrahmen des erkannten Textfelds, aus dem Sie diesen Bereich problemlos zuschneiden können.

Ta daaaa!

Texterkennung auf Dummy-Pan-Karte

2. Texterkennung

Nachdem wir unseren benutzerdefinierten Textdetektor für die Texterkennung implementiert haben, fahren wir mit dem nachfolgenden Prozess der Texterkennung fort. Sie können entweder eine eigene Texterkennung erstellen oder eine Open-Source-Erkennung verwenden.

Obwohl es eine gute Praxis ist, einen eigenen Texterkenner zu implementieren, ist es schwierig, die beschrifteten Daten dafür zu erhalten. Wenn Sie jedoch bereits über viele beschriftete Daten verfügen, um Ihre benutzerdefinierte Texterkennung zu erstellen, wird dies die Genauigkeit auf jeden Fall verbessern.

In diesem Artikel verwenden wir jedoch die Tesseract-OCR-Engine für die Texterkennung. Mit nur wenigen Handgriffen wirkt die Tesseract OCR-Engine Wunder für unsere Anwendung. Wir werden Tesseract 4 verwenden, das ist die neueste Version. Zum Glück werden auch viele Sprachen unterstützt.

Tesseract OCR Engine installieren

Unter Ubuntu 14.04, 16.04, 17.04, 17.10. Für 18.04 überspringen Sie die ersten 2 Befehle.

sudo add-apt-repository ppa: alex-p / tesseract-ocr
sudo apt-get update
sudo apt install tesseract-ocr
sudo apt install libtesseract-dev
sudo pip install pytesseract

Tesseract hier kennenzulernen ist ein schönes Beispiel.

3. Dinge zusammenfügen

Sobald wir den Prozess der Texterkennung und Texterkennung implementiert haben, ist es Zeit, sie zu kombinieren, um den folgenden Ablauf zu erzielen:

  • Ermitteln Sie den gewünschten Bereich aus dem Bild
  • Übergebe die erkannten Regionen an Tesseract
  • Speichern Sie die Ergebnisse von Tesseract in Ihrem gewünschten Format

Aus dem obigen Diagramm geht hervor, dass zuerst das Bild der Pan-Karte an YOLO übergeben wird. Anschließend erkennt YOLO die erforderlichen Textbereiche und schneidet sie aus dem Bild aus. Später übergeben wir diese Regionen einzeln an tesseract. Tesseract liest sie und wir speichern diese Informationen.

Um die Ergebnisse darzustellen, können Sie eine beliebige Form der Auswahl treffen. Hier habe ich ein Excel-Blatt verwendet, um die Ergebnisse zu zeigen.

Ich habe diese gesamte Pipeline offen beschafft. Klonen Sie das Repository und verschieben Sie Ihren Datenordner und die nach dem Training generierte Gewichtsdatei in dieses Repository-Verzeichnis. Sie müssen darknet hier mit dem folgenden Befehl installieren.

bash ./darknet.sh

Führen Sie nun Ihre OCR mit diesem Befehl aus

pan.py -d -t

Herzliche Glückwünsche! Jetzt können Sie die OCR-Ergebnisse im Ausgabeordner in Form einer CSV-Datei anzeigen. Während Sie Ihre benutzerdefinierte Texterkennung testen, müssen Sie möglicherweise die Größe des Bildes ändern. Passen Sie dazu den Parameter basewidth in der Datei locate_asset.py an.

Ressourcen

  • Objekterkennung
  • Regionsbasierte Methoden
  • Single-Shot-Methoden
  • Vergleich verschiedener Detektoren

Ich hoffe, dass Sie mit diesem Artikel ein umfassendes Verständnis der verschiedenen Schritte der optischen Zeichenerkennung erhalten und neben dem Lesen dieses Artikels Ihr eigenes OCR-Programm implementieren konnten. Ich empfehle Ihnen, diese Methode an verschiedenen Bildsätzen auszuprobieren und verschiedene Detektoren für Ihre Anwendung zu verwenden, um die besten Ergebnisse zu erzielen.

Wenn Sie Fragen haben, können Sie diese gerne kommentieren. Gerne helfe ich Ihnen weiter. Wenn Ihnen dieser Artikel in irgendeiner Weise weitergeholfen hat, zögern Sie nicht, auf die Schaltfläche "Klatschen" zu klicken.