mcp_server_image_selector
by lka
README.md
# MCP Server Image Selector
Dieses Projekt stellt einen MCP-kompatiblen Server bereit, mit dem sich interaktiv Bildausschnitte aus Bildern (z.B. JPEG, PNG) und PDF-Dateien auswählen und als separate Dateien exportieren lassen.
## Übersicht
Der MCP Server Image Selector ermöglicht es, **mehrere Bilder in einer Session** zu bearbeiten und gezielt Bereiche als separate Dateien zu exportieren. Perfekt für Workflows, bei denen aus verschiedenen Dokumenten oder Scans bestimmte Bereiche extrahiert werden müssen.
## Features
- Interaktive GUI zur Auswahl von Bild- und Textregionen
- **Auto-Load**: Ohne Bildpfad werden automatisch die ersten 4 Bilder aus dem Bildverzeichnis geladen
- **Multi-Bild-Unterstützung**: Mehrere Bilder in einer GUI-Sitzung bearbeiten
- Unterstützung für verschiedene Bildformate (JPEG, PNG, BMP, GIF)
- **PDF-Unterstützung**: Automatische Extraktion von eingebetteten Bildern oder Rendering der ersten Seite
- **Bild-Rotation**: Bilder können um 90°, -90° oder 180° gedreht werden
- **OCR-Integration**: Automatische Texterkennung mit Tesseract für Text-Bereiche (optional)
- **Automatische Textzusammenfassung**: Alle erkannten Texte werden alphabetisch konkateniert und als `full_recipe_text` zurückgegeben
- Export der ausgewählten Regionen als Bild- und/oder Textdateien
- Automatische Benennung und Ablage der Exportdateien im tmp-Verzeichnis
- Integration in MCP-Workflows
## Voraussetzungen
- Python 3.8+
- Virtuelle Umgebung empfohlen (`python -m venv venv`)
- Abhängigkeiten aus `pyproject.toml` installieren (z.B. mit `pip install -e .`)
### Optionale OCR-Unterstützung
Für automatische Texterkennung in Text-Bereichen ist Tesseract OCR optional verfügbar. Die Software funktioniert auch ohne OCR - in diesem Fall wird ein Hinweis in den Text-Dateien ausgegeben.
#### Installation (optional)
1. **Tesseract OCR installieren**:
- **Windows**: [Tesseract Installer](https://github.com/UB-Mannheim/tesseract/wiki) herunterladen und installieren
- Bei Installation unbedingt die deutschen Sprachpakete mit auswählen!
- **Linux**: `sudo apt-get install tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng`
- **macOS**: `brew install tesseract tesseract-lang`
2. **Python-Package installieren**:
```bash
# Mit optional dependencies aus pyproject.toml:
pip install -e ".[ocr]"
# Oder direkt:
pip install pytesseract
```
3. **Sprachpakete prüfen**:
Die OCR-Funktion nutzt standardmäßig Deutsch + Englisch (`deu+eng`). Ohne diese Sprachpakete funktioniert die OCR nicht korrekt.
Verfügbare Sprachen prüfen:
```bash
tesseract --list-langs
```
#### OCR-Funktionalität
- Wird **automatisch** bei Text-Bereichen (Modus "Text") angewendet
- Erkennt deutschen und englischen Text
- Schreibt erkannten Text in die `.txt`-Dateien
- Ohne Tesseract: Platzhalter-Text mit Installationshinweis wird eingefügt
## Starten des Servers
### MCP-Server-Modus (Default)
1. Virtuelle Umgebung aktivieren:
- Windows: `venv\Scripts\activate`
- Linux/Mac: `source venv/bin/activate`
2. Server starten:
```bash
# MCP-Server-Modus (default)
python src/mcp_server_image_selector/server.py
```
3. Server starten (mit venv automatisch):
```bash
# MCP-Server-Modus (default)
`....mcp_server_image_selector\venv\Scripts\mcp-server-image-selector.exe`
```
### Standalone-Modus (nur GUI, ohne MCP)
```bash
# Ohne Bildpfad - lädt automatisch die ersten 4 Bilddateien aus dem Bildverzeichnis
python -m mcp_server_image_selector.server --standalone
# Mit Bildpfad
python -m mcp_server_image_selector.server --standalone pfad/zum/bild.jpg
# Alternative: Beispiel-Script verwenden
python example_standalone.py
```
## Benutzung
### Grundfunktionen
1. **Bild öffnen**: Ohne Bildpfad werden automatisch die ersten 4 Bilder aus dem Bildverzeichnis geladen. Optional kann ein expliziter Bildpfad angegeben werden.
2. **Weitere Bilder hinzufügen**: Über den Button "+ Bild hinzufügen" können weitere Bilder zur Session hinzugefügt werden
- Standardverzeichnis: `working_dir/Eingang` (falls vorhanden)
3. **Zwischen Bildern wechseln**: Klick auf ein Bild in der Bildliste wechselt zum entsprechenden Bild
4. **Regionen auswählen**:
- Modus wählen: "Foto" oder "Text"
- Mit der Maus einen Bereich aufziehen
- "Auswahl speichern" klicken
5. **Bild rotieren**: Buttons zum Drehen um 90° links, 90° rechts oder 180°
6. **Export**: "Fertig & Exportieren" exportiert alle Regionen von allen Bildern
### Details
- Bei PDF-Dateien wird automatisch das erste eingebettete Bild extrahiert oder die erste Seite als Bild gerendert
- Jedes Bild kann unabhängig bearbeitet werden (eigene Regionen, Rotation)
- Die Bildliste zeigt den aktuellen Status: `▶ dateiname.jpg [3 Bereiche]`
- Alle exportierten Dateien werden im `tmp`-Verzeichnis des Working Directory abgelegt
- Dateinamen enthalten den Bildnamen, Timestamp und Region-Nummer für eindeutige Identifikation
### Beispiel-Workflow
1. MCP-Tool aufrufen: `select_image_regions()` (ohne Parameter) oder `select_image_regions("dokument1.jpg")` (mit Bild)
2. GUI öffnet sich - bei Auto-Load mit den ersten 4 Bildern aus dem Bildverzeichnis
3. Bereiche auswählen und speichern (Modus "Foto" oder "Text")
4. Optional: "+ Bild hinzufügen" für weitere Bilder
5. "Fertig & Exportieren" klicken
6. Alle Bereiche werden exportiert, Text-Bereiche per OCR erkannt
7. Die Antwort enthält eine Zusammenfassung sowie `full_recipe_text` mit allen erkannten Texten
**Ergebnis im tmp-Verzeichnis:**
```
dokument1_20250122_143022_region01_foto.png
dokument1_20250122_143022_region02_text.png
dokument1_20250122_143022_region02_text.txt
dokument2_20250122_143022_region01_foto.png
```
**Beispiel-Antwort (Auszug):**
```
✓ Erfolgreich 3 Bereiche von 2 Bild(ern) exportiert:
...
--- full_recipe_text ---
Textbereich 1
...
Textbereich 2
...
```
## MCP Tools
Der Server stellt folgende MCP-Tools bereit:
### `select_image_regions`
Öffnet die GUI zur interaktiven Auswahl von Bildausschnitten.
**Parameter:**
- `image_path` (string, optional): Pfad zum Bild oder PDF (relativ zum Working Directory oder absolut). Ohne Angabe werden automatisch die ersten 4 Bilder aus dem Bildverzeichnis geladen.
**Funktionalität:**
- Ohne `image_path`: Lädt automatisch die ersten 4 Bilder aus dem Bildverzeichnis (`IMAGE_SUBDIRECTORY`)
- Mit `image_path`: Startet mit dem angegebenen Bild
- Ermöglicht das Hinzufügen weiterer Bilder während der Session
- Exportiert alle Regionen von allen bearbeiteten Bildern
- Alle `_text.txt`-Dateien werden alphabetisch konkateniert und als `full_recipe_text` in der Antwort zurückgegeben
- Gibt eine Zusammenfassung der exportierten Dateien zurück
### `list_exported_regions`
Listet alle exportierten Bildausschnitte aus dem tmp-Verzeichnis auf.
### `get_working_directory`
Zeigt das aktuelle Working Directory an.
## Projektstruktur
Das Projekt ist modular aufgebaut für bessere Wartbarkeit:
```
src/mcp_server_image_selector/
├── server.py # MCP-Server und Tool-Definitionen
├── gui.py # GUI-Komponente (ImageSelectorGUI)
├── utils.py # Utility-Funktionen (Verzeichnisse, Koordinaten)
├── pdf_utils.py # PDF-Verarbeitung und Bildextraktion
└── export.py # Export-Funktionen inkl. OCR
tests/
├── test_export.py # Export-Funktionalität
├── test_export_errors.py # Export-Fehlerbehandlung
├── test_gui.py # GUI-spezifische Tests
├── test_pdf.py # PDF-Verarbeitung
├── test_rotation.py # Bild-Rotation
├── test_server.py # Server/GUI-Initialisierung
└── test_utils.py # Utility-Funktionen
```
## Konfiguration
### MCP-Integration
Die Datei `claude_desktop_config.json` enthält die Konfiguration für die Integration in MCP-Umgebungen.
### Umgebungsvariablen
- `IMAGE_SELECTOR_WORKING_DIR`: Optionales Working Directory (Standard: aktuelles Verzeichnis)
- `IMAGE_SUBDIRECTORY`: Optionales Unterverzeichnis für Bilder relativ zum Working Directory (Standard: Working Directory selbst)
## Entwicklung
### Tests ausführen
Alle Tests mit pytest:
```bash
# Aktiviere virtuelle Umgebung
venv\Scripts\activate # Windows
source venv/bin/activate # Linux/Mac
# Installiere Dev-Dependencies
pip install -e ".[dev]"
# Führe Tests aus
pytest -q # Kurze Ausgabe
pytest -v # Verbose
pytest -xvs # Stop bei erstem Fehler, verbose
```
### Test-Organisation
- **28 Tests** decken alle Hauptfunktionen ab
- Tests sind nach Modulen organisiert
- Verwendet pytest mit fixtures für Isolation
- Monkeypatch für Umgebungsvariablen
### CI/CD
Ein GitHub Actions Workflow (`.github/workflows/ci.yml`) führt Tests automatisch bei Push/PR auf `main` aus.
## Lizenz
MIT License
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues