Best Picks Labor

Destilliertes Wissen zu Schule und Technik

Texterkennung im Batch

Viele Inhalte welche wir im Unterricht brauchen, benötigen wir auch digital für Anpassungen. Ein Beispiel ist der DAZ unterricht wo die Lehrperson gerne Inhalte vereinfacht schreiben möchte. Da wir viele bestehende Scans von Materialien haben welche noch ohne OCR sindk, habe ich ein kleines Script gemacht, welches einen ganzen Ordner durchsucht und alle PDF Dateien mit Hilfe von Tesseract mit OCR verarbeitet.

Das Script benötigt Tesseract sowie die zuoberst oben gelisteten 3 Bibliotheken. tesseract lässt sich auf einem Mac z.B. mit Homebrew installieren. Anschlessend führt man das Script aus. Es sucht im unterordner „pdfs_to_ocr“ und speichert im Ordner „searchable_pdfs“

Beachte in der Konfiguration: Die Sprache sollte idealerweise vorgegeben werden. Standard ist deutsch. Sprachen können auch mit homebrew sehr einfach nachinstalliert werden.

Die OCR Qualität ist bei den meisten Scans super.

Das Script hat mir mehrheitlich Gemini geschrieben aber es erfüllt seinen Zweck gut. Puristen dürfen gerne Kritik anbringen.

Hier ist das Script zum kopieren

import subprocess
import os
import glob

# ==========================================================
# --- KONFIGURATION HIER ANPASSEN ---
# ==========================================================

# 1. Pfad zum Ordner mit den gescannten PDF-Dateien
SOURCE_FOLDER = "pdfs_to_ocr"

# 2. Pfad zum Ordner, in dem die durchsuchbaren PDFs gespeichert werden sollen
OUTPUT_FOLDER = "searchable_pdfs"

# 3. OCR-Sprache (Standard ist Deutsch)
# 'deu' = Deutsch | 'eng' = Englisch |'fra' = Franzoesisch| 'eng+deu' = Deutsch und Englisch
OCR_LANGUAGE = "deu"

# ==========================================================
# --- SKRIPT-LOGIK ---
# ==========================================================

def create_searchable_pdf_batch(source_dir, output_dir, language):
"""
Durchsucht den Quellordner und alle Unterordner nach PDF-Dateien,
führt OCRmyPDF aus und speichert die Ergebnisse im Zielordner
unter Beibehaltung der ursprünglichen Ordnerstruktur.
"""

# Prüfen, ob der Quellordner existiert
if not os.path.isdir(source_dir):
print(f" FEHLER: Der Quellordner '{source_dir}' wurde nicht gefunden.")
return

# Zielordner erstellen, falls er noch nicht existiert
os.makedirs(output_dir, exist_ok=True)

# 🔎 Alle PDF-Dateien im Quellordner und in allen Unterordnern finden
# (recursive=True ist der Schlüssel)
input_files = glob.glob(os.path.join(source_dir, "**/*.pdf"), recursive=True)

if not input_files:
print(f" Keine PDF-Dateien im Ordner '{source_dir}' oder seinen Unterordnern gefunden.")
return

print(f"Gefunden: {len(input_files)} PDFs (inkl. Unterordner). Starte Batch-OCR mit Sprache: **{language.upper()}**")
print(f"Quellordner: {source_dir}")
print(f"Zielordner: {output_dir}")

success_count = 0

for input_path in input_files:
# 📂 Den Pfad relativ zum Quellordner ermitteln (z.B. 'Unterordner1/dokument.pdf')
relative_path = os.path.relpath(input_path, source_dir)

# Den vollständigen Ausgabepfad inkl. Unterordnern erstellen
output_path = os.path.join(output_dir, relative_path)

# Sicherstellen, dass der Unterordner im Zielordner existiert (wird rekursiv erstellt)
os.makedirs(os.path.dirname(output_path), exist_ok=True)

print(f"\n--- Verarbeite {relative_path} ---")

try:
# Aufruf des ocrmypdf-Befehls
subprocess.run(
['ocrmypdf', '-l', language, '--skip-text', input_path, output_path],
check=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
print(f" Erfolgreich: Durchsuchbare PDF gespeichert als **{os.path.relpath(output_path, output_dir)}**")
success_count += 1

except subprocess.CalledProcessError as e:
print(f" FEHLER bei der Verarbeitung von {relative_path} (Code: {e.returncode}):")
print(e.stderr.strip())
except FileNotFoundError:
print(f" KRITISCHER FEHLER: Der Befehl 'ocrmypdf' konnte nicht gefunden werden. Bitte installieren Sie OCRmyPDF.")
return

print("\n" + "="*70)
print(f" Batch-Verarbeitung abgeschlossen! {success_count} von {len(input_files)} Dateien erfolgreich.")
print(f"Ergebnisse gespeichert in: {os.path.abspath(output_dir)}")
print("="*70)


# Skript ausführen
create_searchable_pdf_batch(SOURCE_FOLDER, OUTPUT_FOLDER, OCR_LANGUAGE)

Related Posts

None found