do_ocr_word_svm
— Klassifikation einer Zeichengruppe mit einem OCR-Klassifikator.
do_ocr_word_svm(Character, Image : : OCRHandle, Expression, NumAlternatives, NumCorrections : Class, Word, Score)
do_ocr_word_svm
verhält sich wie do_ocr_multi_class_svm
,
indem es mit dem durch OCRHandle
gegebenen OCR-Klassifikator zu
den durch die Regionen Character
und die Grauwerte Image
gegebenen Zeichen die jeweils beste Klasse berechnet und diese in
Class
zurückgibt.
Im Gegensatz zu do_ocr_multi_class_svm
behandelt
do_ocr_word_svm
die Zeichengruppe als eine Einheit, die
durch Aneinanderhängen von Klassennamen für jedes einzelne Zeichen
ein Wort Word
liefert. Dies ermöglicht die Einschränkung
der erlaubten Klassifikationsergebnisse auf Textebene durch Angabe
eines Ausdrucks Expression
, der das erwartete Wort beschreibt.
Ein Ausdruck kann das Wort auf ein festes Lexikon, welches
zuvor durch create_lexicon
oder import_lexicon
erzeugt wurde, einschränken, indem der Name des Lexikons in
spitzen Klammern wie in '<meinlexikon>' angegeben wird.
Ist der Ausdruck nicht von dieser Form, so wird er als regulärer
Ausdruck mit derselben Syntax wie für tuple_regexp_match
interpretiert. Bei Verwendung von Quantifikatoren wie '*'
sollte man normalerweise mit einem Ausdruck der Form
'^...'$' '
dafür sorgen, dass das gesamte Wort verwendet wird.
Im Gegensatz zu tuple_regexp_match
erlaubt
do_ocr_word_svm
keine Angabe von
zusätzlichen Optionen für Expression
in einem Tupel.
Falls das aus den jeweils besten Klassen abgeleitete Wort dem Ausdruck
nicht genügt, versucht do_ocr_word_svm
eine Korrektur durch
Berücksichtigung der NumAlternatives
besten Klassen für
jedes Zeichen, so wie sie von do_ocr_single_class_svm
für
ein einzelnes Zeichen bestimmt werden. Hierzu werden alle möglichen
Korrekturen ausprobiert, bei denen die Klassifikation von höchstens
NumCorrections
Zeichenregionen geändert wird.
Zu beachten ist hierbei, dass NumAlternatives
und
NumCorrections
Auswirkungen auf die Komplexität des Algorithmus
haben und daher in manchen Fällen intern beschränkt werden müssen. Für
weitere Informationen siehe den Abschnitt 'Komplexität' weiter unten.
Falls der Ausdruck ein Lexikon beschreibt und die obige Prozedur
nicht zum Erfolg führte, so wird das ähnlichste Wort aus dem Lexikon
zurückgegeben, solange für die Korrektur weniger als NumCorrections
Editieroperationen benötigt werden (siehe suggest_lexicon
).
Das Ergebnis wird mit einem Score
zwischen 0.0 (keine Korrektur
gefunden) und 1.0 (ursprüngliches Wort war schon korrekt) bewertet.
Verringert wird der Score
durch das Anbringen einer Strafe
entsprechend der Anzahl korrigierter Zeichen und einer (kleineren)
Strafe für das Ignorieren besserer Klassen um um einen
Ausdruck Expression
zu erhalten:
wobei num_corr
die Anzahl tatsächlich angebrachter Korrekturen und
num_alt
die Anzahl ignorierter Alternativen ist.
Character
(input_object) region(-array) →
object
Zu erkennende Zeichen.
Image
(input_object) singlechannelimage →
object (byte / uint2)
Grauwerte der Zeichen.
OCRHandle
(input_control) ocr_svm →
(handle)
Handle des OCR-Klassifikators.
Expression
(input_control) string →
(string)
Ausdruck, der die erlaubte Wortstruktur beschreibt
NumAlternatives
(input_control) integer →
(integer)
Anzahl der Klassen pro Zeichen, die für die interne Wortkorrektur berücksichtigt werden.
Defaultwert: 3
Wertevorschläge: 3, 4, 5
Typischer Wertebereich: 1
≤
NumAlternatives
NumCorrections
(input_control) integer →
(integer)
Maximale Anzahl der korrigierten Zeichen.
Defaultwert: 2
Wertevorschläge: 1, 2, 3, 4, 5
Typischer Wertebereich: 0
≤
NumCorrections
Class
(output_control) string(-array) →
(string)
Ergebnis der Klassifikation der Zeichen durch die SVM.
Parameteranzahl: Class == Character
Word
(output_control) string →
(string)
Text des Wortes nach Klassifikation und Korrektur.
Score
(output_control) real →
(real)
Ähnlichkeitsmaß von korrigiertem Wort zum Original.
Die Komplexität des Prüfens aller möglichen Korrekturen hat die Größenordnung , wobei a die Anzahl der Alternativen, n die Anzahl der Zeichenregionen und c die Anzahl der erlaubten Korrekturen ist. Als Absicherung gegen quasi-unendliche Schleifen im Falle von großem n wird der Wert von c intern beschränkt auf 5, 3, oder 1, falls a*n >= 30, 60, bzw. 90.
Sind die Parameterwerte korrekt, dann liefert
do_ocr_word_svm
den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird
eine Fehlerbehandlung durchgeführt.
trainf_ocr_class_svm
,
read_ocr_class_svm
create_ocr_class_svm
,
classify_class_svm
OCR/OCV