Docker Compose with 24+ services: - PostgreSQL (PostGIS), Valkey, MinIO, Qdrant - Vault (PKI/TLS), Nginx (Reverse Proxy) - Backend Core API, Consent Service, Billing Service - RAG Service, Embedding Service - Gitea, Woodpecker CI/CD - Night Scheduler, Health Aggregator - Jitsi (Web/XMPP/JVB/Jicofo), Mailpit Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7.3 KiB
7.3 KiB
OCR Compare - Block Review Feature
Status: Produktiv Letzte Aktualisierung: 2026-02-08 URL: https://macmini:3002/ai/ocr-compare
Uebersicht
Das OCR Compare Tool ermoeglicht den Vergleich verschiedener OCR-Methoden zur Texterkennung aus gescannten Dokumenten. Die Block Review Funktion erlaubt eine zellenweise Ueberpruefung und Korrektur der OCR-Ergebnisse.
Hauptfunktionen
| Feature | Beschreibung |
|---|---|
| Multi-Method OCR | Vergleich von Vision LLM, Tesseract, PaddleOCR und Claude Vision |
| Grid Detection | Automatische Erkennung von Tabellenstrukturen |
| Block Review | Zellenweise Ueberpruefung und Korrektur |
| Session Persistence | Sessions bleiben bei Seitenwechsel erhalten |
| High-Resolution Display | Hochaufloesende Bildanzeige (zoom=2.0) |
Architektur
┌─────────────────────────────────────────────────────────────┐
│ admin-v2 (Next.js) │
│ /app/(admin)/ai/ocr-compare/page.tsx │
│ - PDF Upload & Session Management │
│ - Grid Visualization mit SVG Overlay │
│ - Block Review Panel │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ klausur-service (FastAPI) │
│ Port 8086 │
│ - /api/v1/vocab/sessions (Session CRUD) │
│ - /api/v1/vocab/sessions/{id}/pdf-thumbnail (Bild-Export) │
│ - /api/v1/vocab/sessions/{id}/detect-grid (Grid-Erkennung) │
│ - /api/v1/vocab/sessions/{id}/run-ocr (OCR-Ausfuehrung) │
└─────────────────────────────────────────────────────────────┘
Komponenten
GridOverlay
SVG-Overlay zur Visualisierung der erkannten Grid-Struktur.
Datei: /admin-v2/components/ocr/GridOverlay.tsx
interface GridOverlayProps {
grid: GridData
imageUrl?: string
onCellClick?: (cell: GridCell) => void
selectedCell?: GridCell | null
showEmpty?: boolean // Leere Zellen anzeigen
showLabels?: boolean // Spaltenlabels (EN, DE, Ex)
showNumbers?: boolean // Block-Nummern anzeigen
highlightedBlockNumber?: number | null // Hervorgehobener Block
className?: string
}
Zellenstatus-Farben:
| Status | Farbe | Bedeutung |
|---|---|---|
recognized |
Gruen | Text erfolgreich erkannt |
problematic |
Orange | Niedriger Confidence-Wert |
manual |
Blau | Manuell korrigiert |
empty |
Transparent | Keine Erkennung |
BlockReviewPanel
Panel zur Block-fuer-Block Ueberpruefung der OCR-Ergebnisse.
Datei: /admin-v2/components/ocr/BlockReviewPanel.tsx
interface BlockReviewPanelProps {
grid: GridData
methodResults: Record<string, { vocabulary: Array<...> }>
currentBlockNumber: number
onBlockChange: (blockNumber: number) => void
onApprove: (blockNumber: number, methodId: string, text: string) => void
onCorrect: (blockNumber: number, correctedText: string) => void
onSkip: (blockNumber: number) => void
reviewData: Record<number, BlockReviewData>
className?: string
}
Review-Status:
| Status | Beschreibung |
|---|---|
pending |
Noch nicht ueberprueft |
approved |
OCR-Ergebnis akzeptiert |
corrected |
Manuell korrigiert |
skipped |
Uebersprungen |
BlockReviewSummary
Zusammenfassung aller ueberprueften Bloecke.
interface BlockReviewSummaryProps {
reviewData: Record<number, BlockReviewData>
totalBlocks: number
onBlockClick: (blockNumber: number) => void
className?: string
}
OCR-Methoden
| ID | Name | Beschreibung |
|---|---|---|
vision_llm |
Vision LLM | Qwen VL 32B ueber Ollama |
tesseract |
Tesseract | Klassisches OCR (lokal) |
paddleocr |
PaddleOCR | PaddleOCR Engine |
claude_vision |
Claude Vision | Anthropic Claude Vision API |
API Endpoints
Session Management
| Method | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/vocab/upload-pdf-info |
PDF hochladen |
| GET | /api/v1/vocab/sessions/{id} |
Session-Details |
| DELETE | /api/v1/vocab/sessions/{id} |
Session loeschen |
Bildexport
| Method | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/v1/vocab/sessions/{id}/pdf-thumbnail/{page} |
Thumbnail (zoom=0.5) |
| GET | /api/v1/vocab/sessions/{id}/pdf-thumbnail/{page}?hires=true |
High-Res (zoom=2.0) |
Grid-Erkennung
| Method | Endpoint | Beschreibung |
|---|---|---|
| POST | /api/v1/vocab/sessions/{id}/detect-grid |
Grid-Struktur erkennen |
| POST | /api/v1/vocab/sessions/{id}/run-ocr |
OCR auf Grid ausfuehren |
Session Persistence
Die aktive Session wird im localStorage gespeichert:
// Speichern
localStorage.setItem('ocr-compare-active-session', sessionId)
// Wiederherstellen beim Seitenladen
const lastSessionId = localStorage.getItem('ocr-compare-active-session')
if (lastSessionId) {
// Session-Daten laden
}
Block Review Workflow
- PDF hochladen - Dokument in das System laden
- Grid erkennen - Automatische Tabellenerkennung
- OCR ausfuehren - Alle Methoden parallel ausfuehren
- Block Review starten - "Block Review" Button klicken
- Bloecke pruefen - Fuer jeden Block:
- Ergebnisse aller Methoden vergleichen
- Bestes Ergebnis waehlen oder manuell korrigieren
- Zusammenfassung - Uebersicht der Korrekturen
High-Resolution Bilder
Fuer die Anzeige werden hochaufloesende Bilder verwendet:
// Thumbnail URL mit High-Resolution Parameter
const imageUrl = `${KLAUSUR_API}/api/v1/vocab/sessions/${sessionId}/pdf-thumbnail/${pageNumber}?hires=true`
| Parameter | Zoom | Verwendung |
|---|---|---|
Ohne hires |
0.5 | Vorschau/Thumbnails |
Mit hires=true |
2.0 | Anzeige/OCR |
Dateien
Frontend (admin-v2)
| Datei | Beschreibung |
|---|---|
app/(admin)/ai/ocr-compare/page.tsx |
Haupt-UI |
components/ocr/GridOverlay.tsx |
SVG Grid-Overlay |
components/ocr/BlockReviewPanel.tsx |
Review-Panel |
components/ocr/CellCorrectionDialog.tsx |
Korrektur-Dialog |
components/ocr/index.ts |
Exports |
Backend (klausur-service)
| Datei | Beschreibung |
|---|---|
vocab_worksheet_api.py |
API-Router |
hybrid_vocab_extractor.py |
OCR-Extraktion |
Aenderungshistorie
| Datum | Aenderung |
|---|---|
| 2026-02-08 | Block Review Feature hinzugefuegt |
| 2026-02-08 | High-Resolution Bilder aktiviert |
| 2026-02-08 | Session Persistence implementiert |
| 2026-02-07 | Grid Detection und Multi-Method OCR |