Deep OCR

Liste der Operatoren ↓

Dieses Kapitel beschreibt, wie Deep Learning-basierte OCR (Deep OCR) genutzt wird.

Mit Deep OCR wird Text in einem Bild lokalisiert und/oder erkannt. Deep OCR findet und erkennt verbundene Zeichen, welche fortan als 'Wörter' bezeichnet werden (im Gegensatz zu OCR-Methoden, die genutzt werden um Zeichen einzeln zu lesen).

image/svg+xml
Ein mögliches Beispiel für Deep OCR: In einem Bild werden Wörter lokalisiert und erkannt.

Ein Deep OCR-Modell kann aus zwei Komponenten bestehen, welche jeweils unterschiedliche Aufgaben abdecken, nämlich die Lokalisierung von Wörtern und das Erkennen von Wörtern. Standardmäßig wird ein Modell mit beiden Komponenten erstellt, allerdings kann das Modell auch auf eine der Aufgaben reduziert werden.

HALCON stellt bereits vortrainierte Komponenten bereit, welche ohne weiteres Training für eine Vielzahl von Anwendungsfällen geeignet sind, da das erstellte Modell bereits auf einem vielfältigen Datensatz trainiert worden ist und daher mit vielen verschiedenen Schriftarten umgehen kann. Informationen zum verfügbaren Zeichensatz und den Modellparametern können mit get_deep_ocr_paramget_deep_ocr_paramGetDeepOcrParamGetDeepOcrParamget_deep_ocr_param abgefragt werden. Um das Lesen von Wörtern auf eine spezifische Aufgabe auszurichten, können die für die Erkennung oder Lokalisierung zuständigen Komponenten des Modells für einen gegebenen Anwendungsbereich mit Deep Learning-Operatoren nachtrainiert werden. Es ist zu beachten, dass jeweils nur eine Komponente nachtrainiert werden kann.

image/svg+xml
Die Lokalisierungskomponente kann besser auf die Anwendung abgestimmt werden, indem das Deep OCR-Modell mit eigenen Daten nachtrainiert wird.
image/svg+xml 'lemon'
Die Erkennungskomponente kann besser auf die Anwendung abgestimmt werden, indem das Deep OCR-Modell mit eigenen Daten nachtrainiert wird.

In HALCON erfordert die Erkennungskomponente für das Lesen von Text in Bildern enge Zuschnitte um Worte. Eine Möglichkeit, diese engen Zuschnitte zu erhalten, besteht in der Anwendung der Lokalisierungskomponente, die darauf trainiert ist, die genaue Position mehrerer Wortboxen in einem Bild zu finden. Für Bilder, welche ein einzelnes Wort mit viel Hintergrund enthalten, bietet HALCON eine Alignment-Unterstützung für die Erkennungskomponente an. Diese stellt sicher, dass relevante Textbereiche korrekt für die Erkennungskomponente transformiert und ausgerichtet werden.

image/svg+xml 'lemon'
Die Erkennungskomponente kann für die Alignment-Unterstützung optimiert werden, indem die Erkennungskomponente mit benutzerdefinierten Daten neu trainiert wird. Die vortrainierte Alignment-Unterstützung ist auf einer Vielzahl von Schrift- und Aufbringungsarten anwendbar und kann nicht mit benutzerdefinierten Daten nachtrainiert werden.

In den folgenden Abschnitten werden der allgemeine Workflow, sowie das Nachtrainieren erläutert.

Allgemeiner Workflow der Deep OCR Inferenz

Dieser Abschnitt beschreibt den Ablauf des Lokalisieren und Erkennens von Wörtern mit einem Deep OCR-Modell. Siehe auch das HDevelop-Beispiel deep_ocr_workflow.hdev für einen Anwendungsfall.

Erstellen des Deep OCR-Modells

Mit create_deep_ocrcreate_deep_ocrCreateDeepOcrCreateDeepOcrcreate_deep_ocr wird ein Deep OCR-Modell erstellt, das aus einer oder beiden der folgenden Modellkomponenten besteht:

  • detection_model und

  • recognition_model.

Um eine nachtrainierte Modellkomponente anstatt der zur Verfügung gestellten zu verwenden, kann sie im erstellten Modell als 'recognition_model'"recognition_model""recognition_model""recognition_model""recognition_model" oder 'detection_model'"detection_model""detection_model""detection_model""detection_model" mittels set_deep_ocr_paramset_deep_ocr_paramSetDeepOcrParamSetDeepOcrParamset_deep_ocr_param gesetzt werden.

Inferenz

Mit set_deep_ocr_paramset_deep_ocr_paramSetDeepOcrParamSetDeepOcrParamset_deep_ocr_param können Modellparameter gesetzt werden, beispielsweise bezüglich der verwendeten Hardware-Einheit, der Bilddimensionen oder Mindest-Scores.

Das Deep OCR-Modell wird mit apply_deep_ocrapply_deep_ocrApplyDeepOcrApplyDeepOcrapply_deep_ocr auf die aufgenommenen Bilder angewandt. Die Ergebnisse der Inferenz sind von den verwendeten Modellkomponenten abhängig. Siehe apply_deep_ocrapply_deep_ocrApplyDeepOcrApplyDeepOcrapply_deep_ocr für Details zu den Dictionary-Einträgen der jeweiligen Modellzusammensetzungen.

Die Ergebnisse der Inferenz können aus dem Dictionary DeepOCRResultDeepOCRResultDeepOCRResultdeepOCRResultdeep_ocrresult abgefragt werden. Zur Visualisierung der Ergebnisse und Scores stehen einige Prozeduren zur Verfügung:

  • Anzeigen der Position und/oder des erkannten Wortes mit dev_display_deep_ocr_results.

  • Anzeigen der Position (und, falls inferiert, des erkannten Wortes) mit dev_display_deep_ocr_results_preprocessed (nur falls die Modellkomponente detection_model enthalten ist).

  • Visualisierung der Scores mit dev_display_deep_ocr_score_maps (nur falls die Modellkomponente detection_model enthalten ist).

Training und Evaluierung der Modellkomponenten

Dieser Abschnitt beschreibt das Nachtrainieren und die Evaluierung der für das Erkennen beziehungsweise Lokalisieren von Wörtern zuständigen Komponenten eines Deep OCR Modells mit eigenen Daten. Siehe auch die HDevelop-Beispiele deep_ocr_recognition_training_workflow.hdev oder deep_ocr_detection_training_workflow.hdev für ein Anwendungsbeispiel.

Vorverarbeitung des Datensatzes

Dieser Abschnitt behandelt die notwendigen Anpassungen des Datensatzes. Für Informationen darüber, welche Daten in welcher Phase des des Deep OCR-Workflows verwendet werden, wird auf den unteren Absatz „Daten“ verwiesen.

  1. Die Informationen des Datensatzes müssen eingelesen werden. Dazu kann die Prozedur

    • read_dl_dataset_ocr_recognition für die Erkennungskomponente eines Deep OCR Modells.

    • read_dl_dataset_ocr_detection für die Lokalisierungskomponente eines Deep OCR Modells.

    verwendet werden. Dabei wird ein Dictionary DLDataset erstellt, welches als Datenbank dient und alle notwendigen Informationen über die Daten abspeichert. Für mehr Information zu Datensätzen, wird auf das Kapitel Deep Learning / Modell verwiesen.

  2. Die Daten von DLDataset sollen in drei getrennte Datensätze aufgeteilt werden. Dazu kann die Prozedur

    • split_dl_dataset

    verwendet werden.

  3. Das Netzwerk stellt mehrere Anforderungen an die Bilder (wie z.B. die Bilddimensionen und den Grauwertbereich). Diese Werte können mit

    abgefragt werden. Dafür muss das Modell erst eingelesen werden mittels

  4. Der Datensatz kann nun vorverarbeitet werden. Dazu kann die Prozedur

    • preprocess_dl_dataset

    verwendet werden.

    Um diese Prozedur zu verwenden, müssen die Vorverarbeitungsparameter wie z.B. die Bildgröße festgelegt werden. Die Parameter und ihre Werte sind im Dictionary DLPreprocessParam zu speichern. Zur Erzeugung dieses Dictionarys kann die Prozedur

    • create_dl_preprocess_param_from_model.

    verwendet werden. Es wird empfohlen, das Dictionary DLPreprocessParam abzuspeichern, um während der späteren Inferenz-Phase Zugang zu den Werten zu haben.

Trainieren der Modellkomponenten

Dieser Abschnitt behandelt das Trainieren der Erkennungs- oder Lokalisierungskomponente eines Deep OCR-Modells.

  1. Setzen der Trainingsparameter und Abspeichern derselben im Dictionary TrainParam. Für dies kann die Prozedur

    • create_dl_train_param

    verwendet werden.

  2. Trainieren des Modells. Dafür kann die Prozedur

    • train_dl_model

    verwendet werden. Diese Prozedur benötigt:

    • das Handle des Modells, DLModelHandleDLModelHandleDLModelHandleDLModelHandledlmodel_handle

    • das Dictionary mit den Informationen über den Datensatz, DLDataset

    • das Dictionary mit den Trainingsparametern, TrainParam

Evaluierung des trainierten Modells

Dieser Abschnitt behandelt das Evaluieren eines Deep OCR-Modells.

  1. Setzen aller Modellparameter, welche die Evaluieren beeinflussen können.

  2. Die Evaluierung kann bequem mit der Prozedur

    • evaluate_dl_model

    durchgeführt werden. Diese Prozedur erwartet ein Dictionary GenParamEval mit den Evaluierungsparametern.

  3. Das Dictionary EvaluationResults enthält die angefragten Evaluierungsmaße. Um einen Eindruck von der Leistung des nachtrainierten Modells im Verhältnis zum bereits vortrainierten Modell zu erhalten können deren Genauigkeitsmaße verglichen werden, siehe Abschnitt „Evaluierungsmaße für Deep OCR Ergebnisse“

Nach einer erfolgreichen Evaluierung kann das nachtrainierte Modell für die Inferenz verwendet werden (siehe weiter oben, im Abschnitt „Allgemeiner Workflow der Deep OCR Inferenz“).

Daten

Dieser Abschnitt enthält Informationen bezüglich Daten, die für die den verschiedenen Schritten der Deep OCR benötigt werden.

Es wird zwischen den Daten für Training und Evaluierung versus Daten für Inferenz unterschieden. Letztere bestehen ausschließlich aus Bildern. Wie die Daten zur Verfügung gestellt werden müssen, wird in den entsprechenden Abschnitten weiter unten erläutert.

Ein Grundgedanke der Datenhandhabung: Das Modell interagiert mit den Daten über Dictionaries. Dies bedeutet, das Modell erhält die Eingabedaten über das Dictionary DLSampleDLSampleDLSampleDLSampledlsample und gibt die Ausgabe über das Dictionary DLResultDLResultDLResultDLResultdlresult, bzw. DLTrainResultDLTrainResultDLTrainResultDLTrainResultdltrain_result zurück. Für weitere Informationen zur Datenhandhabung wird auf das Kapitel Deep Learning / Modell verwiesen.

Daten für das Training und die Evaluierung

Der Datensatz besteht aus Bildern und den dazugehörigen Informationen. Damit das Modell diese verarbeiten kann, müssen sie bestimmte Anforderungen erfüllen. Informationen zu den Bildanforderungen finden sich im unteren Abschnitt „Bilder“.

Die Trainingsdaten werden dazu genutzt, ein Netzwerk für ein spezifisches Szenario zur Erkennung von Wörtern zu trainieren. Mit Hilfe dieser Daten kann das Netzwerk lernen Beispieltexte zu erkennen, welche Wörtern ähneln die während der Inferenz auftreten können. Dafür notwendig ist, dass das abgebildete Wort für jedes Trainings- und Evaluierungsbild zur Verfügung gestellt wird.

Wie die Daten in HALCON für ein DL Modell vorliegen müssen, wird im Kapitel Deep Learning / Modell erklärt. Kurz gefasst fungiert ein Dictionary DLDatasetDLDatasetDLDatasetDLDatasetdldataset als Datenbank der Informationen, die von den Trainings- und Evaluierungs-Prozeduren benötigt werden.

Die Daten für DLDatasetDLDatasetDLDatasetDLDatasetdldataset können mit read_dl_dataset_ocr_recognition oder read_dl_dataset_ocr_detection eingelesen werden, abhängig davon, welcher Modelltyp verwendet wird.

Datensatz basierend auf Bildern mit gelabelten Wörtern (für Lokalisierung und Erkennung mit Alignment-Unterstützung)

In diesem Fall müssen Bilder zur Verfügung gestellt werden, auf denen die enthaltenen Wörter mit orientierten umschließenden Rechtecken gelabelt sind. Die Bilder können direkt mit Hilfe des MVTec Deep Learning Tools gelabelt werden (erhältlich auf der MVTec Webseite). Der Datensatz muss folgendermaßen aufgebaut sein:

  • 'class_ids': IDs der Klassen

  • 'class_names': Namen der Klassen (Muss eine Klasse 'word' enthalten. Alle weiteren Klassen werden ignoriert.)

  • 'image_dir': Pfad zum Bilderverzeichnis

  • 'samples': Dictionary mit allen Samples

    • 'image_file_name': Name der Bilddatei

    • 'image_id': Bild-ID

    • 'bbox_col': Spaltenkoordinate des umschließenden Rechtecks

    • 'bbox_row': Zeilenkoordinate des umschließenden Rechtecks

    • 'bbox_phi': Winkel des umschließenden Rechtecks

    • 'bbox_length1': Länge der ersten Halbachse des umschließenden Rechtecks

    • 'bbox_length2': Länge der zweiten Halbachse des umschließenden Rechtecks

    • 'label_custom_data': Liste

      • 'text' zu lesendes Wort

Datensatz basierend auf Bildern, die auf ein Wort zugeschnitten sind (nur Erkennung ohne Alignment-Unterstützung)

In diesem Fall müssen Bilder auf jeweils ein Wort zugeschnitten sein. Der Datensatz muss folgendermaßen aufgebaut sein:

  • 'image_dir': Pfad zum Bilderverzeichnis

  • 'samples': Dictionary mit allen Samples

    • 'image_file_name': Name der Bilddatei

    • 'image_id': Bild-ID

    • 'word': zu lesendes Wort

Das Beispielprogramm deep_ocr_prelabel_dataset.hdev kann zum zum Vorlabeln der Daten verwendet werden.

Die Trainingsdaten müssen den ganzen Zeichensatz, der bei der Inferenz auftreten kann abdecken. Falls ein Zeichen gar nicht oder nur sehr selten im Trainingsdatensatz vorkommt kann, das Modell dieses Zeichen nur ungenügend lernen. Um einen Überblick über die Häufigkeit der Zeichen innerhalb eines Datensatzes zu erhalten, kann die Prozedur gen_dl_dataset_ocr_recognition_statistics zur Erzeugung von Statistiken verwendet werden.

Für das Training der Erkennungskomponente, welche Alignment unterstützt, ist es entscheidend, dass der Datensatz Bilder enthält, in denen ein Wort mit orientiertem umschließenden Rechteck markiert ist. Die Alignment-Unterstützung stellt sicher, dass relevante Textregionen korrekt für die Erkennungskomponente transformiert und ausgerichtet werden.

Es sollten genügend Trainingsdaten vorliegen um diese in die drei Untermengen aufzuteilen, welche für das Training, die Evaluierung und das Testen des Netzwerks verwendet werden. Diese Untermengen sind idealerweise unabhängig und gleich verteilt, siehe den Abschnitt „Daten“ im Kapitel Deep Learning.

Bilder

Unabhängig von der Anwendung stellt das Netzwerk Anforderungen an die Bilder wie z.B. die Bilddimensionen. Die spezifischen Werte hängen vom Netzwerk selbst ab, für die spezifischen Werte der verschiedenen Netzwerke siehe die Dokumentation von read_dl_modelread_dl_modelReadDlModelReadDlModelread_dl_model. Für ein eingelesenes Netzwerk können die Werte mit get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamget_dl_model_param abgefragt werden. Um diese Anforderungen zu erfüllen, müssen die Bilder eventuell vorverarbeitet werden. Die Standard-Vorverarbeitung für das ganze Sample und damit auch für das Bild kann mit Hilfe der Prozedur preprocess_dl_samples durchgeführt werden.

Anforderungen an Bilder die zur Inferenz verwendet werden sind in apply_deep_ocrapply_deep_ocrApplyDeepOcrApplyDeepOcrapply_deep_ocr beschrieben.

Netzwerk Ausgabe

Die Netzwerk Ausgabe hängt vom Arbeitsschritt ab:

Training

Als Ausgabe gibt das Modell ein Dictionary DLTrainResultDLTrainResultDLTrainResultDLTrainResultdltrain_result mit dem aktuellen Wert der Gesamt-Zielfunktion sowie den Werten aller weiteren im Modell enthaltenen Zielfunktionen zurück.

Inferenz und Evaluierung

Als Ausgabe gibt das Netzwerk für jedes Bild ein Dictionary DLResultDLResultDLResultDLResultdlresult zurück. In diesem Dictionary ist das erkannte Wort, sowie die Kandidaten und deren Konfidenzen für jedes Zeichen dieses Wortes, enthalten

Evaluierungsmaße für Deep OCR Ergebnisse

Deep OCR Lokalisierung

Die folgenden Evaluierungsmaße werden in HALCON unterstützt. Zur Berechnung dieser Metriken für Tests oder Validierungen sind Ground Truth Annotationen erforderlich.

  • Precision, Recall und F-Score

    Die Ergebnisse der Deep OCR Lokalisierung werden bewertet, indem Precision und Recall für die Wörter umschließenden Rechtecke berechnet werden. Die Evaluierung verwendet die Intersection over Union (IoU) zum Vergleich von Ground Truth und Vorhersage des Netzwerks. Der standardmäßige IoU-Schwellenwert für eine Übereinstimmung ist 0.5, er kann bei Bedarf erhöht oder verringert werden.

    image/svg+xml image/svg+xml IoU=
    ( 1) ( 2)
    Visuelles Beispiel der IoU. (1) Im Eingabebild sind zwei umschließende Rechtecke dargestellt: die Ground Truth (in orange) und die Vorhersage des Modells (in hellblau). (2) Die IoU ist das Verhältnis zwischen der Flächenschnittmenge und der Vereinigung.

    Die Precision ist das Verhältnis von positiven Ergebnissen zu allen Ergebnissen (richtige und falsche). Sie ist also ein Maß dafür, wie treffsicher die Komponente ist.

    Der Recall ist das Verhältnis zwischen der Anzahl der richtig erkannten Wörter und der Anzahl der markierten Wörter.

    Um dies mit einer einzigen Zahl auszudrücken, wird der F-Score berechnet, das harmonische Mittel von Precision und Recall.

  • Score of Angle Precision (SoAP)

    Die Größe SoAP ist ein Maß für die Präzision der inferierten Orientierungswinkel. Dieses Maß bestimmt sich aus der Winkeldifferenzen zwischen den inferierten umschließenden Rechtecken (I) und den zugehörigen Ground Truth Annotationen (GT): wobei der Index über alle inferierten umschließenden Rechtecke läuft.

Deep OCR Erkennung

Die Accuracy einer Deep OCR-Erkennungsaufgabe wird als der Prozentsatz korrekt gelesener Wörter (CR) verglichen mit der Ground Truth (GT) eines Datensatzes gegeben. Die Accuracy wird wie folgt definiert:


Liste der Operatoren

apply_deep_ocrApplyDeepOcrapply_deep_ocrApplyDeepOcrapply_deep_ocr
Anwenden eines Deep OCR-Modells auf mehreren Bildern.
create_deep_ocrCreateDeepOcrcreate_deep_ocrCreateDeepOcrcreate_deep_ocr
Erstellen eines Deep OCR-Modells.
get_deep_ocr_paramGetDeepOcrParamget_deep_ocr_paramGetDeepOcrParamget_deep_ocr_param
Auslesen der Parameter des Deep OCR-Modells.
read_deep_ocrReadDeepOcrread_deep_ocrReadDeepOcrread_deep_ocr
Lesen eines Deep OCR-Modells aus einer Datei.
set_deep_ocr_paramSetDeepOcrParamset_deep_ocr_paramSetDeepOcrParamset_deep_ocr_param
Setzen der Parameter des Deep OCR-Modells.
write_deep_ocrWriteDeepOcrwrite_deep_ocrWriteDeepOcrwrite_deep_ocr
Abspeichern eines Deep OCR-Modells in eine Datei.