OCR für gescannte Dokumente
Tesseract über pytesseract, Bildvorverarbeitung und Verbesserung der Genauigkeit.
OCR für gescannte Dokumente ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.
Wann OCR erforderlich ist
Nicht alle Dokumente sind digital erstellte PDFs. Gescannte Dokumente, Textfotografien, handschriftliche Notizen und bildbasierte PDFs erfordern Optical Character Recognition (OCR), um Text zu extrahieren.
OCR wandelt Pixelbilder von Text in maschinenlesbare Zeichen um. Zwei führende Python-Bibliotheken sind pytesseract (Google Tesseract) und EasyOCR (Deep Learning, mehrsprachig).
Grundlagen von pytesseract
pytesseract ist ein Python-Wrapper für Googles Tesseract-OCR-Engine. Installieren Sie zuerst Tesseract auf Betriebssystemebene und anschließend pip install pytesseract Pillow.
import pytesseract
from PIL import Image
# Simple text extraction
image = Image.open('scanned_document.png')
text = pytesseract.image_to_string(image)
print(text)
# Specify language (default: English)
text_fr = pytesseract.image_to_string(
Image.open('french_doc.png'),
lang='fra'
)
# Get detailed output with bounding boxes
data = pytesseract.image_to_data(
image,
output_type=pytesseract.Output.DICT
)
for i, word in enumerate(data['text']):
if word.strip():
conf = data['conf'][i]
print(f'Word: {word!r:20} Confidence: {conf}')Bildvorverarbeitung: Graustufen
Die OCR-Genauigkeit hängt stark von der Bildqualität ab. Der erste Schritt der Vorverarbeitung ist die Umwandlung in Graustufen — Farbe erzeugt zusätzliches Rauschen, ohne die Zeichenerkennung zu verbessern.
Verwenden Sie Pillow oder OpenCV für die Vorverarbeitung. Graustufen reduzieren das Rauschen und verbessern die Erkennung von Zeichengrenzen durch Tesseract.
from PIL import Image, ImageOps
import numpy as np
def preprocess_grayscale(image_path):
img = Image.open(image_path)
# Convert to grayscale
img = img.convert('L') # 'L' = 8-bit grayscale
# Optionally resize for better OCR (Tesseract works best at ~300 DPI)
# Scale up small images
width, height = img.size
if width < 800:
scale = 800 / width
new_size = (int(width * scale), int(height * scale))
img = img.resize(new_size, Image.LANCZOS)
return img
img = preprocess_grayscale('scan.jpg')
text = pytesseract.image_to_string(img)
print(text[:300])Bildvorverarbeitung: Schwellwertverfahren
Beim Schwellwertverfahren wird ein Graustufenbild in reines Schwarz-Weiß umgewandelt. Dadurch werden graue Schatten, ungleichmäßige Beleuchtung und Hintergrundrauschen entfernt, sodass der Text für die OCR deutlich hervortritt.
from PIL import Image, ImageFilter
import numpy as np
def apply_threshold(img):
# Method 1: Simple fixed threshold
img_array = np.array(img)
threshold = 128
binary = np.where(img_array > threshold, 255, 0).astype(np.uint8)
return Image.fromarray(binary)
def adaptive_threshold(img):
# Method 2: Otsu's method via OpenCV (better for uneven lighting)
try:
import cv2
img_array = np.array(img)
_, binary = cv2.threshold(
img_array, 0, 255,
cv2.THRESH_BINARY + cv2.THRESH_OTSU
)
return Image.fromarray(binary)
except ImportError:
return apply_threshold(img)
img = preprocess_grayscale('uneven_scan.png')
img_clean = adaptive_threshold(img)
text = pytesseract.image_to_string(img_clean)
print(text[:300])Bildvorverarbeitung: Schräglagenkorrektur
Gescannte Dokumente sind häufig leicht gedreht. Bereits eine Neigung von 2 Grad verringert die OCR-Genauigkeit erheblich. Bei der Schräglagenkorrektur wird der Drehwinkel erkannt und korrigiert, bevor das Bild an die OCR-Engine übergeben wird.
import numpy as np
from PIL import Image
def deskew(img):
try:
import cv2
img_array = np.array(img)
# Find rotation angle using Hough line transform
edges = cv2.Canny(img_array, 50, 150, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi/180, threshold=100)
if lines is None:
return img # no lines detected, return unchanged
angles = []
for line in lines:
rho, theta = line[0]
angle = np.degrees(theta) - 90
if -45 < angle < 45:
angles.append(angle)
if not angles:
return img
median_angle = np.median(angles)
if abs(median_angle) > 0.5: # only deskew if significant tilt
print(f'Deskewing by {median_angle:.2f} degrees')
return img.rotate(-median_angle, expand=True, fillcolor=255)
return img
except ImportError:
return img # OpenCV not available — skip deskewSprachoptionen von Tesseract
Tesseract unterstützt mehr als 100 Sprachen. Laden Sie Sprachpakete mit dem Paketmanager Ihres Betriebssystems herunter. Geben Sie bei mehrsprachigen Dokumenten mehrere Sprachen an und trennen Sie sie mit einem +.
import pytesseract
from PIL import Image
# List available languages
import subprocess
result = subprocess.run(['tesseract', '--list-langs'], capture_output=True, text=True)
print('Available languages:')
print(result.stdout)
# Single language
text_en = pytesseract.image_to_string(Image.open('doc.png'), lang='eng')
# Multiple languages (auto-detect best match)
text_multi = pytesseract.image_to_string(
Image.open('doc.png'),
lang='eng+fra+deu' # English + French + German
)
# Tesseract config options for better accuracy
custom_config = r'--oem 3 --psm 6' # OEM 3=LSTM, PSM 6=assume uniform block of text
text_tuned = pytesseract.image_to_string(
Image.open('doc.png'),
config=custom_config
)EasyOCR: Deep-Learning-basiert
EasyOCR verwendet Deep-Learning-Modelle und erzielt bei beeinträchtigten Bildern, gebogenem Text und nichtlateinischen Schriften bessere Ergebnisse als Tesseract. Eine Installation auf Betriebssystemebene ist nicht erforderlich.
Installieren Sie die Bibliothek mit pip install easyocr. Beim ersten Start werden die Modellgewichte (etwa 200 MB) heruntergeladen.
import easyocr
# Initialize reader (downloads model on first run)
reader = easyocr.Reader(
['en', 'tr'], # list of languages
gpu=False # set True if CUDA available
)
# Read text from image
results = reader.readtext('scanned_page.png')
for (bbox, text, confidence) in results:
print(f'Text: {text!r:30} Confidence: {confidence:.2f}')
# bbox = [[x1,y1],[x2,y2],[x3,y3],[x4,y4]] (four corners)
# Get plain text only
text_only = ' '.join(result[1] for result in results)
print('Full text:', text_only[:300])EasyOCR für mehrsprachige Dokumente
EasyOCR verarbeitet mehrsprachige Dokumente gut — beispielsweise internationale Verträge, wissenschaftliche Arbeiten mit Bildunterschriften in mehreren Sprachen oder Dokumente mit technischen Begriffen in einer anderen Schrift.
import easyocr
# For Arabic-English mixed document
reader_ar = easyocr.Reader(['ar', 'en'], gpu=False)
results = reader_ar.readtext('arabic_contract.png')
# For CJK languages
reader_cjk = easyocr.Reader(['ch_sim', 'en'], gpu=False) # Simplified Chinese + English
results_cjk = reader_cjk.readtext('chinese_report.png')
# Filter by confidence threshold
HIGH_CONFIDENCE = 0.7
def filter_confident_results(results, threshold=HIGH_CONFIDENCE):
return [
(bbox, text, conf)
for bbox, text, conf in results
if conf >= threshold
]Vollständige Vorverarbeitungspipeline
Führen Sie alle Vorverarbeitungsschritte — Graustufen, Schwellwertverfahren und Schräglagenkorrektur — in einer einzigen Pipeline-Funktion zusammen. Führen Sie die OCR am bereinigten Bild aus und geben Sie sowohl den Text als auch die Konfidenzmetriken zurück.
import pytesseract
from PIL import Image
def ocr_pipeline(image_path, lang='eng', engine='tesseract'):
print(f'Processing: {image_path}')
# 1. Load
img = Image.open(image_path)
# 2. Preprocess
img = img.convert('L') # grayscale
img = adaptive_threshold(img) # binarize
img = deskew(img) # correct rotation
# 3. OCR
if engine == 'easyocr':
reader = easyocr.Reader([lang], gpu=False)
results = reader.readtext(image_path)
text = ' '.join(r[1] for r in results if r[2] > 0.5)
else:
config = f'--oem 3 --psm 6 -l {lang}'
text = pytesseract.image_to_string(img, config=config)
# 4. Clean
text = '\n'.join(
line.strip() for line in text.splitlines()
if line.strip()
)
return text
text = ocr_pipeline('invoice_scan.jpg')
print(text[:500])Bildbasierte PDFs verarbeiten
Einige PDFs enthalten gescannte Seiten, die als Bilder im PDF-Container gespeichert sind. Erkennen Sie diese „Bild-PDFs“ und wenden Sie die OCR seitenweise an, indem Sie zunächst mit PyMuPDF die Bilder extrahieren.
import fitz
from PIL import Image
import io
import pytesseract
def is_image_pdf(doc):
# Check if first page has very little extractable text
text = doc[0].get_text().strip()
return len(text) < 50
def ocr_pdf(filepath):
doc = fitz.open(filepath)
if not is_image_pdf(doc):
# Native text — no OCR needed
return '\n'.join(doc[i].get_text() for i in range(len(doc)))
print('Image PDF detected — running OCR')
all_text = []
for page_num in range(len(doc)):
page = doc[page_num]
# Render page as image at 300 DPI
mat = fitz.Matrix(300/72, 300/72) # scale to 300 DPI
pix = page.get_pixmap(matrix=mat)
img = Image.open(io.BytesIO(pix.tobytes('png')))
text = pytesseract.image_to_string(img)
all_text.append(f'--- Page {page_num+1} ---\n{text}')
doc.close()
return '\n'.join(all_text)Konfidenzfilterung und Nachbearbeitung
OCR-Ausgaben enthalten Fehler, insbesondere bei beeinträchtigten Bildern. Bearbeiten Sie den Text nach, indem Sie Wörter mit niedriger Konfidenz herausfiltern, häufige OCR-Fehler korrigieren (0 statt O, 1 statt l) und Leerzeichen vereinheitlichen.
import re
COMMON_OCR_ERRORS = {
r'\b0([a-z])\b': r'O\1',
r'\bl([0-9])\b': r'1\1',
r'\|': 'I',
r' +': ' ',
}
def post_process_ocr(text):
for pattern, replacement in COMMON_OCR_ERRORS.items():
text = re.sub(pattern, replacement, text)
lines = [line.strip() for line in text.splitlines()]
return '\n'.join(line for line in lines if line)
def high_confidence_ocr(words_with_conf, min_confidence=60):
words = [w for w, conf in words_with_conf if w.strip() and conf >= min_confidence]
return post_process_ocr(' '.join(words))
fake_ocr_output = [('0range', 90), ('|s', 40), ('l5', 85), ('good', 95)]
print(high_confidence_ocr(fake_ocr_output))Wissensüberprüfung
Welchen Zweck hat die Anwendung eines Schwellwerts (Binarisierung) auf ein Bild vor der OCR?
Zusammenfassung: OCR für gescannte Dokumente
OCR wandelt gescannte Bilder in maschinenlesbaren Text um. pytesseract kapselt Google Tesseract — eine schnelle und ausgereifte Lösung mit mehr als 100 Sprachpaketen. EasyOCR verwendet Deep Learning und verarbeitet beeinträchtigte Bilder und mehrsprachigen Text besser.
Führen Sie immer eine Vorverarbeitung durch: Wandeln Sie das Bild in Graustufen um, wenden Sie die Otsu-Schwellwertmethode zur Binarisierung an und korrigieren Sie die Drehung durch Schräglagenkorrektur. Rendern Sie bei bildbasierten PDFs die Seiten mit PyMuPDF als Bilder mit hoher DPI und führen Sie anschließend die OCR aus. Filtern Sie die Ergebnisse anhand eines Konfidenzschwellwerts, um Rauschen auszuschließen.
Häufig gestellte Fragen
Ist die Lektion „OCR für gescannte Dokumente“ kostenlos?
Ja — der vollständige Text von „OCR für gescannte Dokumente“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „OCR für gescannte Dokumente“?
Tesseract über pytesseract, Bildvorverarbeitung und Verbesserung der Genauigkeit. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um AI Agents zu starten?
Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „OCR für gescannte Dokumente“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?
Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- PDFs mit PyMuPDF und pdfplumber parsen
- OCR für gescannte Dokumente
- Q&A-Agenten für mehrere Dokumente
- Dokumente klassifizieren und weiterleiten