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“):
Book-Only Mode
Cloud Mode: Dafür auf 🚀 klicken und z.B. in Colab ausführen.
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:
Durchführen der OCR auf einem Beispielbild mit Tesseract (Fraktur-Modell)
Manuelle Erstellung eines Ground-Truth-Textes als Referenz
Berechnung von Precision, Recall und F1-Score zum Vergleich von OCR-Output und Ground Truth
4.6.3. Installationen und Importe#
Show 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
Show code cell content
import pytesseract
from PIL import Image
from pathlib import Path
Show 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:
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 #
Show 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)
Show 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