🚀 Messung der OCR-Qualität in Python#

🔔 Feinlernziel(e) dieses Kapitels
Sie können die Schritte zur Qualitätsmessung eines OCR-Outputs aufzählen und die Qualitätsmaße interpretieren.

In diesem Notebook bewerten wir die OCR-Qualität.

Installationen und Importe#

Hide code cell content
# 🚀 Install libraries  
!sudo apt install tesseract-ocr
!sudo apt install tesseract-ocr-frk
!sudo apt install poppler-utils
!pip install pytesseract pillow Levenshtein
Hide code cell content
import pytesseract
from PIL import Image
from pathlib import Path

## for interactivity in jupyter books
from bokeh.io import output_notebook, show
from bokeh.layouts import column
from bokeh.models import CustomJS, TextInput

Durchführen von OCR#

Wir werden denselben Beispielartikel zur Bewertung verwenden:

grippe.png

Hide code cell content
# 🚀 get the image to process in Colab
!wget https://raw.githubusercontent.com/dh-network/quadriga/refs/heads/main/data-input/grippe.jpeg

Zuerst führen wir die OCR durch:

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 lezten
beider Tagen auch in Groß-Berlin noH
erf>lig zeftiegen. Die Warenhäuſer und ſon-
Haen aroßen GeſHöäfte, die Krirgs- unh die prie
n Betriebe lagen, daß übermäig viele An«-

. fich 5cben rep? melden müſſen,-und an<
; .“ Loft und 5ei der Straßenbahn iſt der
ſos der Grippelranten bedeuten) gt&

MeB 4 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 #

Hide code cell content
# 🚀 create folder and get the auxiliary python script to run in Colab
aux_dir = Path("auxiliary")
if not aux_dir.exists():
    aux_dir.mkdir(parents=True)
Hide code cell content
# 🚀 create folder and get the auxiliary python script to run in Colab
!wget https://raw.githubusercontent.com/dh-network/quadriga/refs/heads/main/data-input/auxiliary/measure_ocr_quality.py
!mv measure_ocr_quality.py auxiliary/
from auxiliary.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.778
Recall: 0.7932
F1-score: 0.7855