Posts mit dem Label Erkennungsqualität werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Erkennungsqualität werden angezeigt. Alle Posts anzeigen

Mittwoch, 25. Dezember 2013

Was Training so ausmacht


Bin dank Clemens Neudecker auf das im Rahmen des succeed Projektes entwickelte Tool ocrevalUAtion gestoßen. Damit kann man seine OCR-Ergebnisse mit dem Original vergleichen und bekommt eine Übersicht über die typischen OCR-Fehler.

Ich habe mal eine Seite aus Bunte Bilder aus dem Sachſenlande genommen und hier sind die Werte für untrainiertes Tesseract 3.02.03 mit dem mitgelieferten "deu-frak":


CER7,74
CER-DL7,74
WER27,65
WER (bag of words)27,43
 
Dabei bedeutet CER: Character error rate, CER-DL: Character error rate nach Damerau-Levenshtein und WER: Word error rate.

Hier sind also nur knapp 92% aller Zeichen richtig und gar nur 72% aller Wörter.

Nun die im Laufe des Bunte Bilder Projektes auf den Buchtitel trainierte Variante:

CER2,83
CER-DL2,83
WER7,78
WER (bag of words)9,07

Es sind nun 97% aller Zeichen richtig und fast 91% aller Wörter! Fazit: Trainieren lohnt sich!

Dies deckt sich auch mit den Berechnung aus meinem früheren Beitrag "OCR Qualität bestimmen" bzw. aus Teil 9, wo die Worterkennungsrate 93% betrug.

Das Tool berechnet aber auch für jedes vorkommende Zeichen die Fehlerwahrscheinlichkeit, was hilft sein Augenmerk auf diese typischen Probleme zu lenken. Hier ein Beispiel des untrainierten Tesseract. Ins Auge fällt, daß dies (wie bereits beschrieben) kein langes-s erkennt. Sichtbar sind auch die Problemzeichen 'n', 'u' und 'ü':

Error rate per character and type

CharacterHex codeTotalSpuriousConfusedLostError rate
204632010,65
!210100Infinity
"220100Infinity
)2920000,00
*2a201050,00
,2c3314221,21
-2d602033,33
.2e2901313,79
131610016,67
23240000,00
53540000,00
83830000,00
93950000,00
A4160000,00
B42110109,09
D44100000,00
E4560000,00
F4690000,00
G4760000,00
H4860000,00
I494040100,00
J4a50000,00
K4b80000,00
L4c10000,00
M4d50000,00
N4e40000,00
O4f20000,00
P5030000,00
R5270000,00
S532603011,54
T5450000,00
U5540000,00
V5670000,00
W5770000,00
Z5a70000,00
a611230201,63
b62410102,44
c63660101,52
d641100000,00
e654300411,16
f664005012,50
g67710000,00
h681210403,31
i69178230012,92
j6a3400133,33
k6b210104,76
l6c912002,20
m6d64019029,69
n6e2497705,62
o6f480000,00
p70110000,00
r721480000,00
s73372005,41
t741330100,75
u75105011111,43
v76180000,00
w77310000,00
x7810000,00
y7910000,00
z7a380000,00
«ab0100Infinity
»bb0100Infinity
Äc4201050,00
ßdf70000,00
äe4130000,00
öf6110000,00
üfc2109042,86
ſ17f900900100,00
20132020100,00
20140100Infinity
201c3030100,00
201e3030100,00

Mittwoch, 5. Juni 2013

Teil 9, Selbstversuch Ebook - Befreiung am Beispiel "Bunte Bilder aus dem Sachsenlande", Verbesserung Tesseracts Erkennungsrate

Im letzten Blogpost "OCR Qualität bestimmen" habe ich grob beschrieben, wie man beurteilen kann, wie gut die Erkennungsqualität der verschiedenen OCR-Engines ist.
Als Maß hatte ich dort die Worterkennungsrate verwendet, da diese im Vergleich zur Zeichenerkennungsrate genauer ist. Gerade bei Verfahren, die intern Wörterbücher verwenden, kann die Zeichenerkennungsrate hoch sein, der Text bleibt dennoch unleserlich.

Um die Erkennungsqualität von Tesseract 3.02 zu verbessern habe ich mir die Beschreibung der Konfigurationsoptionen unter http://www.sk-spell.sk.cx/tesseract-ocr-parameters-in-302-version angeschaut.

Folgende Werte hatte ich bisher in der Datei deu-frak.config stehen:

enable_new_segsearch 1
textord_space_size_is_variable 1
load_bigram_dawg 1

Die Worterkennungsrate betrug damit 86% (die Diskrepanz zum Wert 60% aus Blogpost rührt daher, daß die Wörter der benutzten Seite da noch nicht im fürs Training verwendeten Wörterbuch steckten. Dies zeigt, wie wichtig die Pflege eines korrekten Wörterbuches für die Erkennungsrate von Tesseract ist).

Im ersten Schritt habe ich nur einzelne der ff. Parameter (* zeigt Default an) verändert:

Parameter01
enable_new_search92%(*) 86%
language_model_ngram(*) 86%36%
textord_old_baselines89%(*) 86%

Die Werte textord_space_size_is_variable, load_bigram_dawg, edges_use_new_outline_complexity, permute_script_word, ngram_permuter_activated, use_new_state_cost führten zu keiner Änderung der Erkennungsrate von 86%.

Warum die Erkennungsrate bei  language_model_ngram so stark einbricht, verstehe ich noch nicht.

Im zweiten Schritt habe ich die beiden Parameter, die eine Verbesserung zeigten, kombiniert. Voila!, die Worterkennungsrate steigt auf 93%!

Wer noch Hinweise für sinnvolle Kombinationsmöglichkeiten anderer Parameter hat, immer her damit! :)

OCR Qualität bestimmen

wdiff


Mit 'wdiff' habe ich nun mal den Vergleich gemacht zwischen trainiertem Tesseract, trainiertem Ocropus, und Tesseract in Standardauslieferung mit Deutsch (deu).

Dazu habe ich eine Seite als Vergleich herangezogen, die ich schon in http://art1pirat.blogspot.de/2013/01/teil-8-selbstversuch-ebook-befreiung-am.html voll korrigiert hatte.

Der Aufruf sieht so aus: "wdiff -s $CORRECT $OCRED | tail -1"

Ergebnisse


Tesseract (trainiert)
img110_tesseract.txt: 322 Wörter  193 60% gleich  0 0% eingefügt  129 40% verändert

Tesseract (deu)
img110_tesseract.txt: 322 Wörter  62 19% gleich  0 0% eingefügt  260 81% verändert

Ocropus 0.7 (trainiert)
img110_ocropus.txt: 419 Wörter  108 26% gleich  0 0% eingefügt  311 74% verändert


Fazit


Wie man sieht, Training lohnt sich. ;)
 
Ocropus 0.7 stürzt beim Training (sh. http://art1pirat.blogspot.de/2013/05/ocropus-07-training.html) ab, ich habe den letzten funktionierenden Zwischenstand (nach 5190 Schritten) des Modells genommen, den man via ff. Aufruf bekommt:

ocropus-rtrain 'ocropus/*/*.bin.png' -F 30 -d 1 -o bbads_fraktur

Dabei sorgt die Option -F 30 dafür, daß aller 30 Schritte das Modell (bbads_fraktur) gesichert wird.

Tesseract hat noch einen vermutlich für Fraktur besser arbeitenden Trainingsmodus namens Cube. Wer dazu Infos hat, immer her damit.

Ansonsten habe ich jetzt ein Werkzeug an der Hand die Auswirkungen der verschiedenen Optionen der OCR-Engines und der Vorverarbeitungen quantitativ zu überprüfen.

Sonntag, 21. April 2013

Ocropus 0.7, erste Tests

S.99 der »Bunte Bilder aus dem Sachsenlande«,
 Band1, 1902, selbstgescannt
Im April ist Ocropus in der Version 0.7 erschienen und dies war eine gute Gelegenheit zu schauen, wie gut es mit der Erkennungsqualität gegenüber dem trainierten Tesseract 3.02 aussieht.

Installation


Die Installation ist auf der Webseite gut beschrieben und hat diesmal auch unter Debian Wheezy funktioniert:

    $ hg clone -r ocropus-0.7 https://code.google.com/p/ocropus
    $ cd ocropus/ocropy
    $ sudo apt-get install $(cat PACKAGES)
    $ python setup.py download_models
    $ sudo python setup.py install
    $ ./run-test
 


Test


Als Test habe ich die Seite 99 der »Bunte Bilder aus dem Sachsenlande« genommen, die oben zu sehen ist. Diese Seite enthält ua. zwei Schriftgrößen und ein Bild der Kurfürstin Anna.

Da Ocropus ein Modell für Fraktur mitbringt, habe ich dieses getestet. Als Vorlage benutzte ich die Schritte der run-test.sh wie folgt:

 convert Bunte_Bilder_aus_dem_Sachsenlande/ppm_single/img110.ppm temp/img110.png
 ocropus-sauvola temp/img110.png  -o temp
 ocropus-gpageseg 'temp/????.bin.png'
 ocropus-rpred -m fraktur.pyrnn 'temp/????/??????.bin.png'
 ocropus-hocr 'temp/????.bin.png' -o temp.html
 ocropus-visualize-results temp
 ocropus-gtedit html temp/????/??????.bin.png -o temp-correction.html

Ergebnis


Das Ergebnis läßt sich, bis auf die fehlende Unterstützung des langen-S durchaus sehen.

Hier die Ergebnisse im Vergleich, zuerst Tesseract:

 die Muſik nnd Handarbeit, nainentlich das Drechſeliu Zu den Schiitzenſeſten der
Bürger reiſte er gern. Den Schützengilden verlieh er Böller und Kanonen als Aus-
zeichnung. überhaupt nahm er an den Freuden und Leiden ſeiner Landeskinder
gern teil; er und ſeine Gemahlin ließen ſich oft als Taufpaten wählen und ſtat-
teten Brautleute reichlich aus.

So war er ein trefflicher Landesvater. Sollte er nlcht auch ein trefflicher
Gatte und Familienvater geweſen ſein2 Bolle 37 Jahre ſtand ihni die Kurfürſtin
Anna in Liebe und Treue zur Seite; ja, in dieſem langen Eheleben war fie nur
wenige Wochen von ihni entfernt. Sie begleitete ihn auf Reiſen zu Reichs- und
Kurfürſtentagen, an auswärtige Höfe, ja ſelbſt auf Jagdzüge. Sie beſuchte an
ſeiner Seite den Landwirt, den Bienenzüchter, den Obſt- und Weinbauer, den
Handwerksmann und den Künſtler. Aufs treulichſte wachte ſie über ihre Kinder,
9 Prinzen und 6 Prin-
zeſſinnen, von denen aber
nur vier die Eltern über-
lebten. In der Kapelle

des Auguſtusburger

Schloſſes wird ein Altar-
bild gezeigt, gemalt von
dem jüngeren Cranach,
welches den ani Kreuz er-
höhten Chriſtus und dar-
nnter zu beiden Seiten
den Kurfürſten niit den
Prinzen und die Kur-
fürſtin mit den Prinzeſ-
ſinnen in betender Hal-
tnng darſtellt.

Anna war das .
ßlttuſter einer Haus-
frau. Auf dem Oſtra-
uortnerke ſtellte ſie die
dtttägde an und hielt auf
Ordnung und Sittſamkeit.
In aller Frühe erſchien ſie täglich in der Gutswirtſchaft, nnterſuchte deu Stall,
prüfte die Molkerei und ordnete den Verkauf für den Markt an. Sie ſchäinte
ſich nlcht, ihre Tafelbutter ſelbſt zu rühren, ihrem Gemahl die feine Wäſche ſelbſt
zu maſchen und zu plätten. Den Schlüſſel zu ihreui eigenen Wäſchevorrat führte
ſie ſtets bei ſich. Sie hielt es niit Luthers Ausſprnch:

„Der Mann inuß ſelber ſein der Knecht,
Will er ini Hauſe ſchaffen recht;

Die Frau inuß ſelber ſein die Mad,

Soll ſie im Hauſe ſchaffen Rat.

Geſinde nininierhiu bedenkt,

Was Nutz und Schad dem Hauſe brengtltt



Mutter Anna.

7*


Und hier Ocropus:


=- Iß -
die Musik und Handarbeit, namentlich das Drechseln. Zu den Schützenfesten der
Bürger reiste er gern. Den Schützengilden verlieh er Böller und Kanonen als Aus-

zeichnung. Überhaupt nahm er an den Freuden und Leiden seiner Landeskinder

gern teil; er und seine Gemahlin ließen sich oft als Taufpaten wählen und stat-

teten Brautleute reichlich aus.


So war er ein trefflicher Landesvater. Sollte er nicht auch ein trefflicher
Gatte und Familienvater gewesen sein? Volle 8? Jahre stand ihm die Kurfüür stin

Anna in Liebe und Treue zur Seite; ja, in diesem langen Eheleben war sie nur

wenige Wochen von ihm entfernt. Sie begleitete ihn auf Reisen zu Reichs- und

Kurfürstentagen, an auswärtige Höfe, ja selbst auf Jagdzüge. Sie besuchte an

seiner Seite den Landwirt, den Bienenzüchter, den Obst- und Weinbauer, den

Handwerksmann und den Künstler. Aufs trenlichste wachte sie über ihre Kinder,

9 Prinzen und G Prin-

zessinnen, von denen aber

nur vier die Eltern über-

lebten. In der Kapelle

des Augustusburger

Schlosses wird ein Altar-

bild gezeigt, gemalt von

dem jüngeren Cranach,

welches den am Krenz er-

höhten Christus und dar-

unter zu beiden Seiten ,


z

?


den Kurfürsten mit den z
Vze = »- =. zF-

fütrstin mit den Prinzes-

sinnen in betender Hal-

tung darstellt.

- ?

. --'


-=- - ?

?

=e..-


=-D

a=FI


Anna war das -
Mägde an und hielt auf
Ordnung und Sittsamkeit.

- R «

- - ? =.

:; --

s?

? -

,. - =-

?F

R?? - - - --=

vorwerke stellte sie die

--S

-''. ? .---

'? e --


! ?? -
Flutter Anna.
-e


«


s- E
It aller Frühe erschien sie täglich in der Gutswirtschaft, untersuchte den Stall,
prüüfte die Molkerei und ordnete den Verkauf für den Markt an. Sie schämte
sich nicht, ihre Tafelbutter selbst zu rühren, ihrem Gemahl die feine Wäsche selbst
z waschen und zu plätten. Den Schlüssel zu ihrem eigenen Wäschevorrat führte
sie stets bei sich.
Sie hielt es mit Luthers Ausspruch:
, Der Mann muß selber sein der Knecht,
Will er im Hause schaffen recht;
Die Frau muß selber sein die Mad,
Soll sie im Hause schaffen Rat.
Gesinde nimmerhin bedenkt,
Was Nutz und Schad dem Hause brengt!

Fazit

Insgesamt ist die Entwicklung von Ocropus vielversprechend. Da allerdings wieder mal der Trainingsmodus geändert wurde, müssen die Daten, die ich für das Training von Tesseract verwende erstmal in die Zeilenbasierte Variante von Ocropus umgewandelt werden. Sicherlich läßt sich die Erkennungsqualität noch steigern. Im Vergleich zu Tesseract fällt auf, daß Ocropus Bilder noch nicht zuverlässig erkennt und vor dem OCR Prozess herausfiltert. Hilfreich ist die Ausgabe von hOCR, da man so leicht Probleme im OCR-Prozess visualisieren und erkennen kann.

Bei Tesseract besteht aber auch noch Hoffnung, da es einen (leider noch nicht dokumentierten) Cube-Trainings-Modus mitbringt, der die Probleme bei der Erkennung von Fraktur, insbesondere die Verwechslung von 'u' mit 'n' und 'f' mit 'ſ' verringern sollte.