Euro Muenzen Scanner Pro
- Python 64.3%
- HTML 31.4%
- PowerShell 2.3%
- Batchfile 1.3%
- Shell 0.6%
- Other 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| backend | ||
| deploy | ||
| frontend | ||
| standard_refs | ||
| test_crops | ||
| test_fixed_crops | ||
| tests | ||
| training | ||
| .gitignore | ||
| 2_Euro_Scanunterlage_10_Muenzen.docx | ||
| 2_Euro_Scanunterlage_10_Muenzen.pdf | ||
| 2_Euro_Scanunterlage_300dpi.png | ||
| 2_Euro_Scanunterlage_Vorschau.png | ||
| add_standard_coins.py | ||
| build_dinov2_cache.py | ||
| centered_slot_01.png | ||
| centered_slot_02.png | ||
| create_coin_mat_docx.py | ||
| create_coin_mat_pdf.py | ||
| DE_2025_SAARLAND_SAARSCHLEIFE.png | ||
| debug_auto_upright.jpg | ||
| debug_coin1.png | ||
| debug_coin2.png | ||
| debug_empty3.png | ||
| debug_empty4.png | ||
| debug_gw_bot.jpg | ||
| debug_gw_top.jpg | ||
| debug_hough_3334_856.png | ||
| debug_hough_3355_2023.png | ||
| debug_hough_3871_374.png | ||
| debug_hough_3874_670.png | ||
| debug_hough_3883_1501.png | ||
| debug_hough_3884_1121.png | ||
| debug_hough_3887_1726.png | ||
| debug_hough_3890_1864.png | ||
| debug_hough_3893_1999.png | ||
| debug_thresh.jpg | ||
| debug_warped_a4.jpg | ||
| dinov2_quantized.onnx | ||
| docker-compose.yml | ||
| Dockerfile | ||
| enhanced_slot_01.png | ||
| enhanced_slot_02.png | ||
| euro-coin-scanner.tar.gz | ||
| generate_scan_templates.py | ||
| latest_front.jpg | ||
| latest_overview.jpg | ||
| mobilenetv2-7.onnx | ||
| package_training_zips.py | ||
| polar_slot_02.png | ||
| README.md | ||
| ref_FI_REGULAR.png | ||
| ref_FR_COMMONS.jpg | ||
| ref_FR_REGULAR.gif | ||
| ref_FR_REGULAR.png | ||
| ref_PT_REGULAR.png | ||
| requirements.txt | ||
| reset_album.py | ||
| search_all_dinov2.py | ||
| shift_1_top.jpg | ||
| shift_3_top.jpg | ||
| slot_01.png | ||
| slot_02.png | ||
| slot_03.png | ||
| slot_04.png | ||
| slot_05.png | ||
| slot_06.png | ||
| slot_07.png | ||
| slot_08.png | ||
| slot_09.png | ||
| slot_10.png | ||
| test_annotated.jpg | ||
| test_ct107_run.py | ||
| test_detector_new.py | ||
| test_dinov2.py | ||
| test_full_pipeline_ct107.py | ||
| test_match_real.py | ||
| test_remote.py | ||
| test_rot.py | ||
| test_standard_coins.py | ||
| user_scan_sample.jpg | ||
🪙 Euro Münzen Scanner Pro
KI-gestützte Erkennung und Verwaltung von 2-Euro-Gedenkmünzen.
Scanne deine Münzen mit dem Handy oder PC — die KI identifiziert Motiv, Land, Jahr und erkennt seltene Prägefehler.
✨ Features
- KI-Erkennung via OpenRouter (Gemini 2.5 Flash/Pro) — 8 Winkel, CLAHE + Unsharp Masking
- Katalog mit allen 2-Euro-Gedenkmünzen der EU (EZB + Wikidata)
- Passmarken-Matte für präzise, reproduzierbare Aufnahmen
- Prägefehler-Erkennung (Spiegelei, Dezentrierungen)
- Cross-Device Sync — Handy scannen, am PC sofort sehen
- Sammlung mit SQLite-Datenbank und Duplikat-Erkennung
- Vergleichsansicht — Dein Scan neben dem Katalog-Referenzbild
🏗️ Systemvoraussetzungen
| Komponente | Version |
|---|---|
| Proxmox VE | 8.x |
| Docker | 24+ |
| Python | 3.11 |
| RAM (Container) | ≥ 2 GB empfohlen |
| OpenRouter API-Key | Erforderlich für KI-Erkennung |
🚀 Deployment (Proxmox + Docker)
1. Projektdateien auf den Server kopieren
# Auf deinem Windows-PC (PowerShell)
scp -r C:\Users\<user>\.gemini\antigravity\scratch\euro-coin-scanner\ root@10.10.10.163:/opt/euro-coin-scanner/
2. Docker Container starten
# Auf dem Proxmox-Host (CT 107 via SSH oder Shell)
cd /opt/euro-coin-scanner
# Bauen und starten
docker compose up -d --build
# Oder: direkter Start (ohne Compose)
docker run -d \
--name euro_coin_scanner \
-p 8088:8000 \
-v /opt/euro-coin-scanner/backend/storage:/app/backend/storage \
euro-coin-scanner:latest
3. App aufrufen
http://10.10.10.163:8088
🔑 OpenRouter einrichten
- Account erstellen auf openrouter.ai
- API-Key generieren unter Keys
- In der App: ⚙️ → KI-Einstellungen
- API-Key einfügen
- Modell wählen:
google/gemini-2.5-flash(empfohlen) odergoogle/gemini-2.5-pro - KI aktivieren ✅
Der Key wird nur im Browser-LocalStorage gespeichert und nie an den Server gesendet.
📱 Cross-Device Sync (Handy → PC)
- Öffne die App auf dem Handy:
http://10.10.10.163:8088 - Scanne eine Münze
- Auf dem PC erscheint der Scan automatisch nach ≤ 3 Sekunden
(Live-Sync-Button 📲 muss aktiv/grün sein)
📸 Scan-Tipps
Passmarken-Matte verwenden
Die Vorlage (PDFs im Ordner docs/) enthält 4 Passmarken-Quadrate:
- Einzelne Münze: für Nahaufnahmen und optimale Erkennung
- 10 Münzen: für Batch-Scans bei guten Lichtverhältnissen
Beste Ergebnisse
| ✅ Gut | ❌ Vermeiden |
|---|---|
| Diffuses Tageslicht | Direktes Sonnenlicht / starke Schatten |
| Makro-Modus aktivieren | Digitaler Zoom |
| Münze reinigen | Fettige/verschmutzte Münzen |
| Kamera senkrecht über Münze | Schräger Winkel |
| Gleichmäßige Beleuchtung von vorn | Seitenlicht (Schattenrelief) |
| Helle, matte Unterlage | Glänzende/gemusterte Unterlage |
Warum einzeln fotografieren?
Bei Gruppenaufnahmen können:
- Schatten benachbarter Münzen das Relief verdecken
- Lichtverhältnisse auf mehrere Münzen ungleichmäßig wirken
- Die Passmarken-Erkennung Münzen überspringen
→ Für zuverlässige KI-Erkennung: eine Münze pro Aufnahme
🔧 Troubleshooting
KI erkennt Münze nicht
- Prüfe ob OpenRouter API-Key konfiguriert ist (⚙️ → KI-Einstellungen)
- Probiere
google/gemini-2.5-prostatt Flash - Verbessere die Aufnahme (Licht, Makro, senkrecht)
- Drehe die Münze um 90° und scanne erneut
Scan schlägt fehl (JSON-Fehler)
Scan fehlgeschlagen: Unexpected token 'I'...
→ OpenRouter-Modell gibt kein JSON zurück. Wechsle das Modell in den Einstellungen.
Passmarken werden nicht erkannt
- Vorlage nicht verknittert oder falsch beleuchtet (Reflexionen auf glänzendem Papier)
- Vorlage auf mattem Papier drucken
- Mindestens A4, besser A3
Container startet nicht
docker logs euro_coin_scanner
# oder
docker compose logs -f
Dateien im Container aktualisieren
# Einzelne Datei
docker cp /opt/euro-coin-scanner/backend/api/main.py euro_coin_scanner:/app/backend/api/main.py
docker restart euro_coin_scanner
# Alle Backend-Dateien
docker cp /opt/euro-coin-scanner/backend/. euro_coin_scanner:/app/backend/
docker restart euro_coin_scanner
📁 Projektstruktur
euro-coin-scanner/
├── backend/
│ ├── api/
│ │ └── main.py # FastAPI Hauptanwendung
│ ├── ai/
│ │ └── openrouter_matcher.py # KI-Erkennung (8 Winkel, CLAHE)
│ ├── cv/
│ │ ├── coin_detector.py # Passmarken + Münz-Cropping
│ │ ├── coin_aligner.py # DINOv2 Feature-Matching
│ │ └── error_detector.py # Prägefehler-Erkennung
│ ├── catalog/
│ │ └── catalog_updater.py # EZB/Wikidata Sync
│ ├── database/
│ │ ├── models.py # SQLAlchemy Modelle
│ │ └── db.py # Datenbankverbindung
│ └── storage/ # Bilder, DB, Cache (persistent)
├── frontend/
│ └── index.html # Single-Page App (Tailwind CSS)
├── docs/
│ ├── 2_Euro_Scanunterlage.pdf # 10-Münzen Matte
│ └── 2_Euro_Scanunterlage_1.pdf # 1-Münze Matte
├── Dockerfile
├── docker-compose.yml
└── README.md
🧠 KI-Erkennung (Technische Details)
Die Münzerkennung nutzt einen mehrstufigen Ansatz:
- Passmarken-Erkennung (
coin_detector.py) — 4 schwarze Quadrate lokalisieren den Münzbereich - Bildvorverarbeitung — CLAHE (Kontrastverstärkung) + Unsharp Masking für metallische Reliefs
- 8-Winkel-Kollage — 0°, 45°, 90°, 135°, 180°, 225°, 270°, 315° werden zu einem Grid kombiniert
- Vision-KI (OpenRouter Gemini) — analysiert das Grid und extrahiert Motiv, Inschriften, Land, Jahr
- Katalog-Matching — Motiv-Token-Abgleich gegen 525+ Katalogeinträge
- Prägefehler (
error_detector.py) — Spiegelei-Erkennung via Kreisflächen-Analyse
📜 Lizenz
MIT License — freie Nutzung und Weiterentwicklung.