Messung der OCR-Qualität in Python#

In diesem Notebook bewerten wir die OCR-Qualität. Wir werden denselben Beispielartikel zur Bewertung verwenden:

grippe.png

Durchführen von OCR#

Zuerst führen wir die OCR durch:

Hide code cell content
import pytesseract
from PIL import Image

## for interactivity in jupyter books
from bokeh.io import output_notebook, show
from bokeh.layouts import column
from bokeh.models import CustomJS, TextInput
ocr_output = pytesseract.image_to_string(Image.open('grippe.jpeg'), 
                                         lang='frk') # Wir verwenden das Fraktur-OCR-Modell
print(ocr_output)
Zie Grippe wüfel weiter

Zunahme der ſchweren Fälle in Berlin.

Die Zahl der Grippefälle iſt in den leßten
beider Tagen auch in Groß-Berlin noH
erf>lih zeftiegen. Die Worenhäuſer und ſon-
Kaen aroßen GeſhHäfte, die Krirgs- unh die prie
n Betriebe lagen, daß übermäig viele An«

- fich heben rer? melden müſſen,-und an<
; “ Loſt und 5ei der Straßenbahn iſt der
ſoz der Grippelrantken bedeuten) g&

7 3 >r 2 8 1


Manuell die ‘Ground Truth’ zur Bewertung erstellen #

Hide code cell content
output_notebook()

capture_ground_truth = TextInput(value="""Die Grippe wütet weiter. Zunahme der schweren Fälle in Berlin. Die Zahl der Grippefälle ist in den letzten Tagen auch in Groß-Berlin noch erheblich gestiegen. Die Warenhäuser und sonstigen großen Geschäfte, die Kriegs- und die privaten Betriebe klagen, daß übermäßig viele Angestellte sich haben krank melden müssen und auch bei der Post und bei der Straßenbahn ist der Prozentsatz der Grippekranken deutlich gestiegen.""", 
                                 title="Please insert corrected string: ") 

ground_truth = capture_ground_truth.value.strip()

rewrite_var_after_input = CustomJS(args=dict(text_input=capture_ground_truth), code="""
    var word = text_input.value.trim();
    console.log('Input value:', word);
    function sendToPython(){
    var kernel = IPython.notebook.kernel;
    kernel.execute("ground_truth = '" + word + "'");
    }
    sendToPython();
""")



capture_ground_truth.js_on_change('value', rewrite_var_after_input)
Loading BokehJS ...
# Layout and display
layout = column(capture_ground_truth)

show(layout)
print(ground_truth)
Die Grippe wütet weiter. Zunahme der schweren Fälle in Berlin. Die Zahl der Grippefälle ist in den letzten Tagen auch in Groß-Berlin noch erheblich gestiegen. Die Warenhäuser und sonstigen großen Geschäfte, die Kriegs- und die privaten Betriebe klagen, daß übermäßig viele Angestellte sich haben krank melden müssen und auch bei der Post und bei der Straßenbahn ist der Prozentsatz der Grippekranken deutlich gestiegen.

Berechnung von Precision, Recall und F1-Measure #

from aux.measure_ocr_quality import measure_ocr_quality
precision, recall, f_score = measure_ocr_quality(ocr_output, ground_truth)
print(f'Precision: {round(precision, 4)}\nRecall: {round(recall, 4)}\nF1-score: {round(f_score, 4)}')
Precision: 0.7804
Recall: 0.7956
F1-score: 0.788