OCR
Diese Gruppe enthält Funktionen zur optischen Zeichenerkennung (Optical Character Recognition).
Die OCR-Funktionen identifizieren Zeichen in einem Bild und geben die erkannte Zeichenkette als String zurück. Die Klassifizierung basiert auf klassischen Machine Learning Modellen. Die Modelle werden trainiert bereitgestellt, so dass die Funktionen direkt angewendet werden können. Zusätzliche Einstellungen oder ein eigenes Training sind nicht erforderlich. Die unterstützen Zeichen und Fonts hängen von den im Training verwendeten Daten ab. Daher gibt es verschiedene Modelle deren Funktionsumfang, sowie die generellen Vorbedingungen und Anforderungen, im Folgenden beschrieben werden.
Für alle Zeichen, die in einem Bild erkannt werden, ordnen die Modelle die einzelnen Zeichen einer bekannten Klasse zu, bei der die Übereinstimmung am höchsten ist. Das Ergebnis besteht also immer aus den bekannten Zeichen des verwendeten Modelles. Eine Zurückweisung oder Aussortierung unbekannter Zeichen ist nicht enthalten.
Die Funktionen unterstützen nur einzeilige Zeichenfolgen, mehrere Zeilen müssen in einzelne ROIs unterteilt und mit mehreren Funktionsaufrufen gelesen werden.
Generelle Anforderungen zur Erkennung von Zeichen:
- Zeichenhöhe min. 20 Pixel
- Strichstärke min. 3 Pixel
- Punkte min. 3 x 3 Pixel
- Striche min. 3 x 6 Pixel
- Zeichenabstand / -trennung min. 4 Pixel
- Zeichen dürfen sich nicht überlappen
- Nur horizontale Ausrichtung / Anordnung der Zeichen max. ± 6° Abweichung
- Der Strich / Kontur eines Zeichens darf nicht unterbrochen sein
- Die Zeichen dürfen nicht gespiegelt oder auf den Kopf gestellt sein
Generelle Anforderungen an das Bild:
- ROI nur mit den zu erkennenden Zeichen und einer störungsfreien Zone um die Zeichen
- Innerhalb der ROI dürfen die Zeichen nicht von einer weiteren Kontur wie z.B. einem Rechteck umschlossen sein
- Guter Kontrast zwischen Zeichen und Hintergrund
- Homogener, nicht verrauschter oder gestörter, intransparenter Hintergrund
Anforderungen an die Fonts:
- Nur proportionale Schriftarten mit gleichen Zeichenbreiten
- Größere Lücken werden immer nur als ein Leerzeichen erkannt
- Nur serifenlose Schriftarten wie z.B. Arial, Tahoma, Courier, Univers, Frutiger, Verdana, OCR-B
- Keine gemischten Schriftarten
- Keine Punktdruck (dot print) oder kursiv (italic) Fonts
Modelle:
Das Enum ETcVnOcrModelType ermöglicht den Zugriff auf die folgenden Modelle:
TCVN_OMT_NUMBERS
- ermöglich die Klassifizierung von Zahlen
- enthält die Zeichen von
0-9
TCVN_OMT_NUMBERS_SC
- ermöglich die Klassifizierung von Zahlen und Sonderzeichen
- enthält die Zeichen von
0-9
und sechs Sonderzeichen. / - : = +
TCVN_OMT_UCLETTERS
- ermöglich die Klassifizierung von Großbuchstaben
- enthält die Zeichen von
A-Z
TCVN_OMT_NUMBERS_SC_UCLETTERS
- ermöglich die Klassifizierung von Zahlen, Sonderzeichen und Großbuchstaben
- enthält die Zeichen von
0-9
, die sechs Sonderzeichen. / - : =
+ undA-Z
Bei der Verwendung des kombinierten Modells (TCVN_OMT_NUMBERS_SC_UCLETTERS
) kann es, aufgrund der großen Ähnlichkeit von bestimmten Zeichen, zu Verwechselungen kommen. Beispiele dafür sind O und 0, S und 5 sowie B und 8.
Wenn bekannt ist an welcher Stelle eine Zahl oder ein Buchstabe steht, sollte alternativ die Expert-Funktion mit der Formatierungsvorgabe (sPattern
) und der Kombination von den separaten Modellen verwendet werden. Alternativ können im Anschluss die Zeichen des Ergebnisstrings (ipCharacters
) auch einzeln analysiert werden, so dass man individuell entscheiden kann ob z.B. anstatt O auch eine 0 akzeptiert wird.
Funktionen initialisieren
Um die OCR-Funktion mit einem oder mehreren Modellen verwenden zu können, muss die Funktion zuvor über den Baustein FB_VN_InitializeFunction mit den jeweiligen Modellen initialisiert werden.
Die Dauer für das Laden der Modelle ist abhängig von der Leistungsfähigkeit des verwendeten IPC, sowie der Modellgröße und kann mehrere hundert Millisekunden, bis hin zu mehreren Sekunden dauern. Daher ist bei kürzeren Taskzykluszeiten mit Zykluszeitüberschreitungen zu rechnen.
Wenn das kombinierte Modell TCVN_OMT_NUMBERS_SC_UCLETTERS
verwendet werden soll, muss aufgrund der Dateigröße der Router Speicher auf mindestens 512 MB gesetzt werden.
Die genaue Größe ist abhängig von der sonstigen Verwendung des Router Speichers und evtl. vorhandener Fragmentierung. Wenn der Baustein FB_VN_InitializeFunction
z.B. einen Return Code 0x80004005
zurückgibt, deutet das auf zu wenig Router Speicher hin. Daher sollte zuerst der Router Speicher geprüft und ggf. vergrößert werden. Nach dem Laden eines Modells wird ein Großteil des Speichers wieder freigegeben und steht für die Anwendung zur Verfügung.
Interpretation des HRESULT
- Bei der Standardfunktion wird
S_OK
zurückgegeben, wenn Zeichen auf dem Bild erkannt wurden. Bei der Exp-Funktion hängt es davon ab, ob einsPattern
angegeben wurde. Wenn keine Formatierungsvorgabe angegeben wurde, entspricht die Rückgabe der Standardfunktion. Wenn eine Formatierungsvorgabe übergeben wurde, wird nurS_OK
zurückgegeben, wenn die erkannten Zeichen mit der Pattern-Vorgabe übereinstimmen. - Wenn die Standardfunktion erfolgreich ausgeführt wurde und keine Zeichen gefunden wurden oder bei der Exp-Funktion die Zeichen nicht mit der Pattern-Vorgabe übereinstimmen, wird
S_FALSE
zurückgegeben. - Wenn bei der Expert-Funktion eine
sPattern
Angabe gemacht wird, zu der das übergebene Modell fehlt, wird einHRESULT = ADSERR_DEVICE_NOTINIT
zurückgegeben. - Wenn der Standardfunktion mehrere Modelle übergeben werden, wird immer ein
HRESULT = ADSERR_DEVICE_INVALIDPARM
zurückgegeben, da die Funktion pro Aufruf nur ein Modell unterstützt. Bei der Expert-Funktion hängt es davon ab, ob einsPattern
angegeben wurde. WennsPattern
leer ist, wird immer nur dasTCVN_OMT_NUMBERS_SC_UCLETTERS
Model verwendet. Wenn dieses Modell nicht übergeben wurde, wird einHRESULT = ADSERR_DEVICE_INVALIDPARM
zurückgegeben.
Beispiele für die Verwendung von sPattern
Die F_VN_OCRExp stellt mit den Parametern sPattern
und eOcrOptions
zusätzliche Möglichkeiten bereit. Je nach Kombination der Zeichen auf dem Eingangsbild, den Angaben von sPattern
und eOcrOptions
und den erkannten Zeichen, wird bei einer Nicht-Übereinstimmung S_FALSE
zurückgegeben. Danach können die Zeichen des Ergebnis-Strings (ipCharacters
) auch einzeln analysiert werden, da z.B. bei abweichender Länge auch S_FALSE
zurückgegeben wird. Die Beispiele beziehen sich auf die Verwendung des TCVN_OMT_NUMBERS_SC_UCLETTERS
Modells.
Zeichen auf dem ipSrcImage | sPattern | eOcrOptions | ipCharacters | HRESULT |
---|---|---|---|---|
12/34 | dd.dd |
| 12/34 | S_OK |
12534 | dd.dd |
| 12534 | S_OK |
12/34 | dd!dd |
| 1234 | S_OK |
12 34 | dd!d |
| 124 | S_OK |
12534 | dd!dd |
| 1234 | S_OK |
12 34 | dd_dd |
| 12 34 | S_OK |
AB12/ | uudd# |
| AB12/ | S_OK |
12 34 | dddd | WITHBLANKS | 12 34 | S_OK |
12/4 | dd#d | WITHBLANKS | 12/4 | S_OK |
12 34 | dd_dd | WITHBLANKS | 12 34 | S_OK |
12 34 56 | dd_dddd | WITHBLANKS | 12 34 56 | S_OK |
12 3 4 | dd.dd | WITHBLANKS | 12 3 4 | S_FALSE |
12 34 | dd!dd |
| 124 | S_FALSE |
12 34 | dd.dd |
| 1234 | S_FALSE |
1234 | !dddd |
| 234 | S_FALSE |
12 34 | dd_dd |
| 12.34 | S_FALSE |
12 3 | dd_dd |
| 123 | S_FALSE |
12 3 4 | dd_d_d |
| 123 4 | S_FALSE |
AB12/ | uddd# |
| AB12/ | S_FALSE |
AB12/ | uuddd |
| AB12/ | S_FALSE |