Zum Inhalt
Birchville Wappen
Birchville Scholarly Synthesis
Automatisierte Digitalisierungs- und Editions-Pipeline

πŸ“š AlexandriaSandwich

Automatisierte Buch-Digitalisierung mit Hybrid-OCR (Tesseract + Mistral AI), GSD-Pipeline & Perfect Sandwich-PDF Output.


⚑ Schnellzugriff & Navigation

βš™οΈ Pipeline-Verfahren
Detaillierte Architektur von Image-Preprocessing, Tesseract/Mistral-Hybrid-OCR bis zum TEI- und PDF-Assembly.
πŸ“– Fallstudie BΓΆhtlingk 1887
Referenz-Realisierung: 478 Seiten Pāṇini-Grammatik mit 3.997 SΕ«tras und 100 % kanonischem Alignment.
πŸ“„ Zielformate & DualitΓ€t
DualitÀt aus 1:1 Sandwich-Faksimile und modernem Typst-Vektorsatz mit nativer Devanāgarī.
πŸ’» Quellcode & Container
VollstΓ€ndige Docker-Compose-Infrastruktur, CLI-Tools und Worker-Skripte auf GitHub.

AlexandriaSandwich ist eine containergestΓΌtzte Pipeline zur Archivierung und Digitalisierung historischer und moderner BΓΌcher. Sie verwandelt rohe Buchscans in perfekte 1:1 Sandwich-PDFs (visuelles Originalbild mit punktgenau hinterlegter, unsichtbarer Textebene), standardkonformes TEI-P5 XML fΓΌr Langzeitarchive sowie typografisch neu gesetzte Vektor-PDFs via Typst.


πŸš€ Schnellstart (CLI in 3 Schritten)

Voraussetzung: Docker Engine mit Docker Compose v2.

1. Repository klonen & Konfiguration anlegen

git clone https://github.com/birchville-org/AlexandriaSandwich.git
cd AlexandriaSandwich
cp .env.example .env

2. OCR-Worker starten

docker compose up -d ocr_worker

3. Beispiel-Job ausfΓΌhren

Die Pipeline enthΓ€lt synthetische Testseiten unter examples/sample_book:

docker exec alexandria_worker /opt/alexandria/scripts/run_pipeline.sh \
  --job sample_book \
  --input /opt/alexandria/examples/sample_book \
  --no-mistral

Ergebnis: Die fertigen Artefakte liegen sofort im Host-Verzeichnis ./data/output/: * πŸ“„ 1:1 Sandwich-PDF: ./data/output/pdf/sample_book.sandwich.pdf * πŸ›οΈ TEI-P5 XML: ./data/output/tei/sample_book.tei.xml * πŸ“– Neusatz-PDF: ./data/output/pdf/sample_book.digital.pdf * πŸ“Š AusfΓΌhrlicher JSON-Report: ./data/output/reports/sample_book.pipeline.json

Web-UI & n8n gewΓΌnscht? Der gesamte Stack lΓ€sst sich mit einem Befehl starten:

docker compose --profile all up -d
* QA Viewer & Dashboard: http://localhost:8080/ * n8n Orchestrator: http://localhost:5678/


✨ Features

  • πŸͺ“ Automatisches Pre-Processing: Ausrichten (Deskewing) und Reinigen vergilbter Seiten via ImageMagick + unpaper (scripts/preprocess.sh).
  • πŸ€– Hybrid Quality Loop:
  • Lokal & Schnell: Erste OCR-Ebene mit Tesseract OCR auf der lokalen Compute-Node.
  • KI-Fallback: Automatischer Wechsel auf Mistral OCR (mistral-ocr-latest) bei schlechten Scores (< 85% Confidence), Fraktur* πŸ“ Multi-Format Export (VollstΓ€ndige Zielformat-Matrix):
  • 1:1 Sandwich-PDF & KI-synchronisiertes Faksimile: UnverΓ€ndertes Faksimile mit unsichtbarem Textlayer (<job>.sandwich.pdf) bzw. semantisch mit Mistral OCR synchronisierter Textlayer ohne Rauschzeilen (<job>.aligned.pdf).
  • Reflowable EPUB 3 eBook: FΓΌr MobilgerΓ€te und E-Reader (<job>.epub) mit 102+ Kapiteln und eingebetteten Unicode-Schriften (Noto Serif Devanagari + Linux Libertine O).
  • Digitales Neusatz-PDF: Typografisch optimierter Vektorneusatz (<job>.digital.pdf) via Typst-Engine.
  • TEI-P5 XML: Standardkonformes Archivformat (<job>.tei.xml) fΓΌr Bibliotheken und Digital Humanities.
  • Semantischer AST & Markdown: Strukturierte book.json (Single Source of Truth mit Bounding-Boxes) sowie bereinigtes book.md fΓΌr KI- und Textpipelines. (Siehe ausfΓΌhrlich: Zielformat-Architektur & Duale Reproduktion)
  • πŸ› οΈ Zwei Korrekturverfahren:
  • Pre-Assembly hOCR-Korrektur: hOCR-Tokenkorrektur vor dem Zusammenbau des PDFs.
  • Post-Assembly Textlayer-Korrektur: Direktes Token-Alignment und Editieren der unsichtbaren Textschicht im fertigen PDF via pikepdf & QA-Viewer (<job>.aligned.pdf).
  • 🐳 Multi-Architektur Support: Native UnterstΓΌtzung fΓΌr linux/amd64 (Server / Proxmox VM) und linux/arm64 (Apple Silicon M-Serie).

πŸ”„ Pipeline-Ablauf

Scans (PNG / TIFF / JPEG)
         β”‚
         β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ 1. Preprocessing     β”‚ ──► ImageMagick & unpaper (Deskew, Entflecken, RΓ€nder)
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚
            β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ 2. Tesseract OCR     β”‚ ──► Lokale OCR-Engine (hOCR, Bounding Boxes, Konfidenz)
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚
            β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ 3. Quality Gate      β”‚ ── Konfidenz < 85%? ──► β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β”‚ 4. Mistral OCR Fallback   β”‚
            β”‚ Pass (>= 85%)                        β”‚ (LLM-Vision Extraktion)   β”‚
            β”‚                                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚
            β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ Multi-Artifact Assembly & Target Exports                                               β”‚
 β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
 β”‚ 5. Sandwich & Aligned PDF  β”‚ 6. TEI-P5 XML Export      β”‚ 7. Typst Satz β”‚ 8. EPUB 3     β”‚
 β”‚ (OCRmyPDF + Aligned Flow)  β”‚ (lxml + book.json Schema) β”‚ (book.typ)    β”‚ (Font Inlined)β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
            β–Ό                               β–Ό                     β–Ό               β–Ό
   <job>.sandwich / aligned.pdf       <job>.tei.xml          <job>.digital.pdf <job>.epub
 (Faksimile + korrigierter Text)  (Akademie-Standard)    (Vektor-Neusatz)  (eBook Mobil)

πŸ› οΈ Skripte im Überblick (scripts/)

Skript Typ Funktion
run_pipeline.sh Bash Haupt-Orchestrator: steuert Preprocessing, Quality Gate, Fallback, Assembly und Multi-Format-Exporte.
build_typeset_edition.py Python Erzeugt sektionsspezifische Typst-Vektorneueditionen (BΓΆhtlingk-Standard) mit automatischem Font-Vendoring.
align_dhatupatha.py Python Bilinguale Facing-Page-Alignment-Engine: Gleicht Devanāgarī & IAST gegen kanonische Ground-Truth ab.
align_mistral_pdf.py Python Post-Assembly: Synchronisiert Mistral-Text mit Tesseract-Bounding-Boxes direkt im PDF-Inhaltsstrom (.aligned.pdf).
export_epub.py Python Baut standardkonformes EPUB 3 mit semantischem XHTML und eingebetteten Unicode-Schriften.
render_digital_pdf.py Python Erzeugt ein typografisches Neusatz-PDF mit modernem Schriftsatz via Typst-Engine.
export_tei.py Python Generiert standardkonformes TEI-P5 XML fΓΌr Langzeitarchive und Metadatenkataloge.
consolidate_book.py Python FΓΌhrt Einzelseiten-hOCR/Markdown-Daten in ein einheitliches Zwischenformat (book.json / book.md) zusammen.
mistral_ocr.py Python Parallelisierter API-Client fΓΌr LLM-Vision mit exponentiellem Backoff und Caching.
assemble_sandwich.py Python Baut 1:1 Sandwich-PDFs mit unsichtbarer Textebene (Mode 3) aus bereinigten Seitenbildern.
quality_check.py Python FΓΌhrt Tesseract aus, analysiert Wort- und Seitenkonfidenzen und steuert das Quality Gate.
preprocess.sh Bash Bereinigt Scans via ImageMagick und unpaper (Deskew, Randentfernung, Kontrast).
inject_toc.py Python Injiziert hierarchische Outlines (TOC), Metadaten und Seitennummerierungs-Labels in PDFs.
hocr_correct.py Python Pre-Assembly: ErmΓΆglicht hOCR-Textkorrekturen vor dem PDF-Bau.
pdf_text_correct.py Python Post-Assembly: Low-Level-Stream-Editor fΓΌr In-PDF-Textlayer-Korrekturen.
sync_storage.sh Bash Synchronisiert Eingabe- und Ausgabedaten optional mit zentralem NAS-/NFS-Storage.

πŸ›οΈ Architektur & Referenz-Deployment

Das Standard-Setup lÀuft vollstÀndig auf jedem Entwicklungsrechner mit Docker (localhost). In grâßeren Produktivumgebungen kann AlexandriaSandwich verteilt betrieben werden:

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ Control Node / NAS                                          β”‚
 β”‚                                                             β”‚
 β”‚  β€’ n8n Workflow Orchestrator (Docker Container)             β”‚
 β”‚  β€’ Central Storage (NFS/SMB Share fΓΌr Scans & Artefakte)    β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                β”‚ NFS Mount & REST / SSH
                                β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ Compute Node (z. B. Proxmox VM "alex" - 16 GB RAM / 4 vCPUs)β”‚
 β”‚                                                             β”‚
 β”‚  β€’ Docker OCR Worker Container (`alexandria_worker`)        β”‚
 β”‚    β”œβ”€β”€ ImageMagick + unpaper (Deskew & Cleanup)             β”‚
 β”‚    β”œβ”€β”€ Tesseract OCR (Lokale Primary Engine, hOCR Export)   β”‚
 β”‚    β”œβ”€β”€ Mistral OCR Client (API-Fallback & Layout Analysis)  β”‚
 β”‚    └── OCRmyPDF / img2pdf / Typst (Artifact Assembly)       β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜