{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_update",
"tool_input": {
"id": 143,
"content": "# PDF-Rotationserkennung\n\n## Status: Implementiert\n\n**Task #442** - Abgeschlossen am 27.12.2025\n\n## Problem\n\nPDF-Dokumente können Seiten enthalten, die um 90°, 180° oder 270° gedreht sind. Ohne Korrektur führt dies zu:\n\n- **Fehlerhafter OCR**: Text wird nicht oder falsch erkannt\n- **Unlesbaren Vision-Analysen**: LLM kann Inhalt nicht interpretieren\n- **Korrupten Embeddings**: Semantisch falscher Inhalt wird gespeichert\n\n## Lösung: Mehrstufige Orientierungserkennung\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ Stufe 1: PDF-Metadaten (\/Rotate Flag) │\n│ → Schnell, kostenlos, 0ms │\n└─────────────────────┬───────────────────────────────────┘\n │ Falls rotation == 0\n ▼\n┌─────────────────────────────────────────────────────────┐\n│ Stufe 2: Tesseract OSD │\n│ → Erkennt 0°\/90°\/180°\/270° │\n│ → ~50-100ms pro Seite │\n└─────────────────────┬───────────────────────────────────┘\n │ Falls Confidence < 2.0\n ▼\n┌─────────────────────────────────────────────────────────┐\n│ Stufe 3: Vision-LLM Fallback │\n│ → Für Bilder ohne Text (optional) │\n└─────────────────────────────────────────────────────────┘\n```\n\n## Implementierte Dateien\n\n| Datei | Funktion | Status |\n|-------|----------|--------|\n| `orientation.py` | Orientierungslogik (NEU) | ✓ |\n| `extract.py` | Rotation vor OCR | ✓ |\n| `vision.py` | Bilder rotieren | ✓ |\n| `config.py` | Konfigurationswerte | ✓ |\n\n## Konfiguration\n\n```python\n# config.py\nROTATION_DETECTION_ENABLED = True\nROTATION_OSD_CONFIDENCE_THRESHOLD = 2.0\nROTATION_USE_VISION_FALLBACK = False\n```\n\n## Abhängigkeiten\n\n| Komponente | Status |\n|------------|--------|\n| tesseract-ocr 5.5.0 | ✓ Installiert |\n| tesseract-ocr-deu | ✓ Installiert |\n| tesseract-ocr-osd | ✓ Installiert |\n| PyMuPDF | ✓ Vorhanden |\n| pytesseract | ✓ Vorhanden |\n| Pillow | ✓ Vorhanden |\n\n## API\n\n### `detect_orientation(image_bytes) -> dict`\n\nErkennt Orientierung eines Bildes mittels Tesseract OSD.\n\n**Returns:**\n```python\n{\n 'rotation': 90, # 0, 90, 180, 270\n 'confidence': 3.5, # OSD Confidence\n 'script': 'Latin', # Erkanntes Skript\n 'method': 'osd' # 'osd', 'fallback' oder 'disabled'\n}\n```\n\n### `get_page_rotation(page) -> int`\n\nKombiniert PDF-Metadaten und OSD-Erkennung.\n\n**Returns:** `int` (0, 90, 180, 270)\n\n### `rotate_image(image_bytes, rotation) -> bytes`\n\nRotiert Bild um angegebene Grad.\n\n### `correct_page_orientation(page, target_dpi) -> tuple[bytes, int]`\n\nConvenience-Funktion für korrekt orientiertes Bild.\n\n## Referenz\n\n- Task #442: Implementierung\n- PyMuPDF Docs: https:\/\/pymupdf.readthedocs.io\/\n- Tesseract OSD: https:\/\/tesseract-ocr.github.io\/"
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 143,\n \"parent_id\": 111,\n \"slug\": \"pdf-rotation\",\n \"path\": \"\/prozesse\/rag-prozess\/dokument-import\/pdf-rotation\",\n \"title\": \"PDF-Rotationserkennung\",\n \"description\": \"Automatische Erkennung und Korrektur von gedrehten PDF-Seiten in der Pipeline\",\n \"content\": \"# PDF-Rotationserkennung\\n\\n## Status: Implementiert\\n\\n**Task #442** - Abgeschlossen am 27.12.2025\\n\\n## Problem\\n\\nPDF-Dokumente können Seiten enthalten, die um 90°, 180° oder 270° gedreht sind. Ohne Korrektur führt dies zu:\\n\\n- **Fehlerhafter OCR**: Text wird nicht oder falsch erkannt\\n- **Unlesbaren Vision-Analysen**: LLM kann Inhalt nicht interpretieren\\n- **Korrupten Embeddings**: Semantisch falscher Inhalt wird gespeichert\\n\\n## Lösung: Mehrstufige Orientierungserkennung\\n\\n```\\n┌─────────────────────────────────────────────────────────┐\\n│ Stufe 1: PDF-Metadaten (\/Rotate Flag) │\\n│ → Schnell, kostenlos, 0ms │\\n└─────────────────────┬───────────────────────────────────┘\\n │ Falls rotation == 0\\n ▼\\n┌─────────────────────────────────────────────────────────┐\\n│ Stufe 2: Tesseract OSD │\\n│ → Erkennt 0°\/90°\/180°\/270° │\\n│ → ~50-100ms pro Seite │\\n└─────────────────────┬───────────────────────────────────┘\\n │ Falls Confidence < 2.0\\n ▼\\n┌─────────────────────────────────────────────────────────┐\\n│ Stufe 3: Vision-LLM Fallback │\\n│ → Für Bilder ohne Text (optional) │\\n└─────────────────────────────────────────────────────────┘\\n```\\n\\n## Implementierte Dateien\\n\\n| Datei | Funktion | Status |\\n|-------|----------|--------|\\n| `orientation.py` | Orientierungslogik (NEU) | ✓ |\\n| `extract.py` | Rotation vor OCR | ✓ |\\n| `vision.py` | Bilder rotieren | ✓ |\\n| `config.py` | Konfigurationswerte | ✓ |\\n\\n## Konfiguration\\n\\n```python\\n# config.py\\nROTATION_DETECTION_ENABLED = True\\nROTATION_OSD_CONFIDENCE_THRESHOLD = 2.0\\nROTATION_USE_VISION_FALLBACK = False\\n```\\n\\n## Abhängigkeiten\\n\\n| Komponente | Status |\\n|------------|--------|\\n| tesseract-ocr 5.5.0 | ✓ Installiert |\\n| tesseract-ocr-deu | ✓ Installiert |\\n| tesseract-ocr-osd | ✓ Installiert |\\n| PyMuPDF | ✓ Vorhanden |\\n| pytesseract | ✓ Vorhanden |\\n| Pillow | ✓ Vorhanden |\\n\\n## API\\n\\n### `detect_orientation(image_bytes) -> dict`\\n\\nErkennt Orientierung eines Bildes mittels Tesseract OSD.\\n\\n**Returns:**\\n```python\\n{\\n 'rotation': 90, # 0, 90, 180, 270\\n 'confidence': 3.5, # OSD Confidence\\n 'script': 'Latin', # Erkanntes Skript\\n 'method': 'osd' # 'osd', 'fallback' oder 'disabled'\\n}\\n```\\n\\n### `get_page_rotation(page) -> int`\\n\\nKombiniert PDF-Metadaten und OSD-Erkennung.\\n\\n**Returns:** `int` (0, 90, 180, 270)\\n\\n### `rotate_image(image_bytes, rotation) -> bytes`\\n\\nRotiert Bild um angegebene Grad.\\n\\n### `correct_page_orientation(page, target_dpi) -> tuple[bytes, int]`\\n\\nConvenience-Funktion für korrekt orientiertes Bild.\\n\\n## Referenz\\n\\n- Task #442: Implementierung\\n- PyMuPDF Docs: https:\/\/pymupdf.readthedocs.io\/\\n- Tesseract OSD: https:\/\/tesseract-ocr.github.io\/\",\n \"status\": \"published\",\n \"sort_order\": 2,\n \"depth\": 3,\n \"created_at\": \"2025-12-27T11:37:41\",\n \"updated_at\": \"2025-12-27T11:45:17\"\n },\n \"message\": \"Document #143 updated\"\n}"
}
]
}