{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_update",
"tool_input": {
"id": 143,
"content": "<h1>PDF-Rotationserkennung<\/h1>\n\n<h2>Status: Implementiert<\/h2>\n\n<p><strong>Task #442<\/strong> - Abgeschlossen am 27.12.2025<\/p>\n\n<h2>Problem<\/h2>\n\n<p>PDF-Dokumente können Seiten enthalten, die um 90°, 180° oder 270° gedreht sind. Ohne Korrektur führt dies zu:<\/p>\n\n<ul>\n<li><strong>Fehlerhafter OCR<\/strong>: Text wird nicht oder falsch erkannt<\/li>\n<li><strong>Unlesbaren Vision-Analysen<\/strong>: LLM kann Inhalt nicht interpretieren<\/li>\n<li><strong>Korrupten Embeddings<\/strong>: Semantisch falscher Inhalt wird gespeichert<\/li>\n<\/ul>\n\n<h2>Lösung: Mehrstufige Orientierungserkennung<\/h2>\n\n<pre><code>┌─────────────────────────────────────────────────────────┐\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└─────────────────────────────────────────────────────────┘<\/code><\/pre>\n\n<h2>Implementierte Dateien<\/h2>\n\n<table>\n<tr><th>Datei<\/th><th>Funktion<\/th><th>Status<\/th><\/tr>\n<tr><td><code>orientation.py<\/code><\/td><td>Orientierungslogik (NEU)<\/td><td>✓<\/td><\/tr>\n<tr><td><code>extract.py<\/code><\/td><td>Rotation vor OCR<\/td><td>✓<\/td><\/tr>\n<tr><td><code>vision.py<\/code><\/td><td>Bilder rotieren<\/td><td>✓<\/td><\/tr>\n<tr><td><code>config.py<\/code><\/td><td>Konfigurationswerte<\/td><td>✓<\/td><\/tr>\n<\/table>\n\n<h2>Konfiguration<\/h2>\n\n<pre><code class=\"language-python\"># config.py\nROTATION_DETECTION_ENABLED = True\nROTATION_OSD_CONFIDENCE_THRESHOLD = 2.0\nROTATION_USE_VISION_FALLBACK = False<\/code><\/pre>\n\n<h2>Abhängigkeiten<\/h2>\n\n<table>\n<tr><th>Komponente<\/th><th>Status<\/th><\/tr>\n<tr><td>tesseract-ocr 5.5.0<\/td><td>✓ Installiert<\/td><\/tr>\n<tr><td>tesseract-ocr-deu<\/td><td>✓ Installiert<\/td><\/tr>\n<tr><td>tesseract-ocr-osd<\/td><td>✓ Installiert<\/td><\/tr>\n<tr><td>PyMuPDF<\/td><td>✓ Vorhanden<\/td><\/tr>\n<tr><td>pytesseract<\/td><td>✓ Vorhanden<\/td><\/tr>\n<tr><td>Pillow<\/td><td>✓ Vorhanden<\/td><\/tr>\n<\/table>\n\n<h2>API<\/h2>\n\n<h3>detect_orientation(image_bytes) -> dict<\/h3>\n\n<p>Erkennt Orientierung eines Bildes mittels Tesseract OSD.<\/p>\n\n<p><strong>Returns:<\/strong><\/p>\n<pre><code class=\"language-python\">{\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}<\/code><\/pre>\n\n<h3>get_page_rotation(page) -> int<\/h3>\n\n<p>Kombiniert PDF-Metadaten und OSD-Erkennung.<\/p>\n\n<p><strong>Returns:<\/strong> <code>int<\/code> (0, 90, 180, 270)<\/p>\n\n<h3>rotate_image(image_bytes, rotation) -> bytes<\/h3>\n\n<p>Rotiert Bild um angegebene Grad.<\/p>\n\n<h3>correct_page_orientation(page, target_dpi) -> tuple[bytes, int]<\/h3>\n\n<p>Convenience-Funktion für korrekt orientiertes Bild.<\/p>\n\n<h2>Referenz<\/h2>\n\n<ul>\n<li>Task #442: Implementierung<\/li>\n<li>PyMuPDF Docs: <a href=\"https:\/\/pymupdf.readthedocs.io\/\">https:\/\/pymupdf.readthedocs.io\/<\/a><\/li>\n<li>Tesseract OSD: <a href=\"https:\/\/tesseract-ocr.github.io\/\">https:\/\/tesseract-ocr.github.io\/<\/a><\/li>\n<\/ul>"
}
}
{
"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\": \"<h1>PDF-Rotationserkennung<\/h1>\\n\\n<h2>Status: Implementiert<\/h2>\\n\\n<p><strong>Task #442<\/strong> - Abgeschlossen am 27.12.2025<\/p>\\n\\n<h2>Problem<\/h2>\\n\\n<p>PDF-Dokumente können Seiten enthalten, die um 90°, 180° oder 270° gedreht sind. Ohne Korrektur führt dies zu:<\/p>\\n\\n<ul>\\n<li><strong>Fehlerhafter OCR<\/strong>: Text wird nicht oder falsch erkannt<\/li>\\n<li><strong>Unlesbaren Vision-Analysen<\/strong>: LLM kann Inhalt nicht interpretieren<\/li>\\n<li><strong>Korrupten Embeddings<\/strong>: Semantisch falscher Inhalt wird gespeichert<\/li>\\n<\/ul>\\n\\n<h2>Lösung: Mehrstufige Orientierungserkennung<\/h2>\\n\\n<pre><code>┌─────────────────────────────────────────────────────────┐\\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└─────────────────────────────────────────────────────────┘<\/code><\/pre>\\n\\n<h2>Implementierte Dateien<\/h2>\\n\\n<table>\\n<tr><th>Datei<\/th><th>Funktion<\/th><th>Status<\/th><\/tr>\\n<tr><td><code>orientation.py<\/code><\/td><td>Orientierungslogik (NEU)<\/td><td>✓<\/td><\/tr>\\n<tr><td><code>extract.py<\/code><\/td><td>Rotation vor OCR<\/td><td>✓<\/td><\/tr>\\n<tr><td><code>vision.py<\/code><\/td><td>Bilder rotieren<\/td><td>✓<\/td><\/tr>\\n<tr><td><code>config.py<\/code><\/td><td>Konfigurationswerte<\/td><td>✓<\/td><\/tr>\\n<\/table>\\n\\n<h2>Konfiguration<\/h2>\\n\\n<pre><code class=\\\"language-python\\\"># config.py\\nROTATION_DETECTION_ENABLED = True\\nROTATION_OSD_CONFIDENCE_THRESHOLD = 2.0\\nROTATION_USE_VISION_FALLBACK = False<\/code><\/pre>\\n\\n<h2>Abhängigkeiten<\/h2>\\n\\n<table>\\n<tr><th>Komponente<\/th><th>Status<\/th><\/tr>\\n<tr><td>tesseract-ocr 5.5.0<\/td><td>✓ Installiert<\/td><\/tr>\\n<tr><td>tesseract-ocr-deu<\/td><td>✓ Installiert<\/td><\/tr>\\n<tr><td>tesseract-ocr-osd<\/td><td>✓ Installiert<\/td><\/tr>\\n<tr><td>PyMuPDF<\/td><td>✓ Vorhanden<\/td><\/tr>\\n<tr><td>pytesseract<\/td><td>✓ Vorhanden<\/td><\/tr>\\n<tr><td>Pillow<\/td><td>✓ Vorhanden<\/td><\/tr>\\n<\/table>\\n\\n<h2>API<\/h2>\\n\\n<h3>detect_orientation(image_bytes) -> dict<\/h3>\\n\\n<p>Erkennt Orientierung eines Bildes mittels Tesseract OSD.<\/p>\\n\\n<p><strong>Returns:<\/strong><\/p>\\n<pre><code class=\\\"language-python\\\">{\\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}<\/code><\/pre>\\n\\n<h3>get_page_rotation(page) -> int<\/h3>\\n\\n<p>Kombiniert PDF-Metadaten und OSD-Erkennung.<\/p>\\n\\n<p><strong>Returns:<\/strong> <code>int<\/code> (0, 90, 180, 270)<\/p>\\n\\n<h3>rotate_image(image_bytes, rotation) -> bytes<\/h3>\\n\\n<p>Rotiert Bild um angegebene Grad.<\/p>\\n\\n<h3>correct_page_orientation(page, target_dpi) -> tuple[bytes, int]<\/h3>\\n\\n<p>Convenience-Funktion für korrekt orientiertes Bild.<\/p>\\n\\n<h2>Referenz<\/h2>\\n\\n<ul>\\n<li>Task #442: Implementierung<\/li>\\n<li>PyMuPDF Docs: <a href=\\\"https:\/\/pymupdf.readthedocs.io\/\\\">https:\/\/pymupdf.readthedocs.io\/<\/a><\/li>\\n<li>Tesseract OSD: <a href=\\\"https:\/\/tesseract-ocr.github.io\/\\\">https:\/\/tesseract-ocr.github.io\/<\/a><\/li>\\n<\/ul>\",\n \"status\": \"published\",\n \"sort_order\": 2,\n \"depth\": 3,\n \"created_at\": \"2025-12-27T11:37:41\",\n \"updated_at\": \"2025-12-29T14:48:00\"\n },\n \"message\": \"Document #143 updated\"\n}"
}
]
}