4.6. 🚀 Messung der OCR-Qualität in Python#

4.6.1. Hinweise zur Ausführung des Notebooks#

Dieses Notebook kann auf unterschiedlichen Levels erarbeitet werden (siehe Abschnitt „Technische Voraussetzungen“):

  1. Book-Only Mode

  2. Cloud Mode: Dafür auf 🚀 klicken und z.B. in Colab ausführen.

  3. Local Mode: Dafür auf Herunterladen ↓ klicken und „.ipynb“ wählen.

4.6.2. Übersicht#

In diesem Notebook wird die Qualität von OCR-Ergebnissen gemessen und bewertet. Ziel ist es, den OCR-Output eines historischen Zeitungsartikels (in Frakturschrift) mit einem manuell erstellten Referenztext (Ground Truth) zu vergleichen und die Güte der Texterkennung anhand standardisierter Metriken zu quantifizieren.

Dafür werden folgende Schritte durchgeführt:

  1. Durchführen der OCR auf einem Beispielbild mit Tesseract (Fraktur-Modell)

  2. Manuelle Erstellung eines Ground-Truth-Textes als Referenz

  3. Berechnung von Precision, Recall und F1-Score zum Vergleich von OCR-Output und Ground Truth

4.6.3. Installationen und Importe#

Hide code cell content
# 🚀 Install libraries
import sys
if 'google.colab' in sys.modules:
    !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
Hide code cell content
# 🚀 get the image to process in Colab
!wget https://raw.githubusercontent.com/quadriga-dk/Text-Fallstudie-1/refs/heads/main/ocr/grippe.jpeg

4.6.4. Durchführen von OCR#

Wir werden denselben Beispielartikel zur Bewertung verwenden:

../_images/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 #

ground_truth = """Die Grippe wütet weiter 
Zunahme der schweren Fälle in Berlin. 
Die Zahl der Grippefälle ist in den letzten 
beiden Tagen auch in Groß-Berlin noch 
erheblich gestiegen. Die Warenhäuser und son-
stigen großen Geschäfte, die Kriegs- und die pri-
vaten Betriebe klagen, daß übermäßig viele An-
gestellte sich haben krank melden müssen und auch 
bei der Post und bei der Straßenbahn ist der 
Prozentsatz der Grippekranken bedeutend ge-
stiegen."""
print(ground_truth)
Die Grippe wütet weiter 
Zunahme der schweren Fälle in Berlin. 
Die Zahl der Grippefälle ist in den letzten 
beiden Tagen auch in Groß-Berlin noch 
erheblich gestiegen. Die Warenhäuser und son-
stigen großen Geschäfte, die Kriegs- und die pri-
vaten Betriebe klagen, daß übermäßig viele An-
gestellte sich haben krank melden müssen und auch 
bei der Post und bei der Straßenbahn ist der 
Prozentsatz der Grippekranken bedeutend ge-
stiegen.

4.6.5. Berechnung von Precision, Recall und F1-Score #

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
if 'google.colab' in sys.modules:
    !wget https://raw.githubusercontent.com/quadriga-dk/Text-Fallstudie-1/main/ocr/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.7864
Recall: 0.8418
F1-score: 0.8132