---
language:
- de
- en
- fr
- es
- ar
- fa
- it
- sv
- ru
- zh
license: apache-2.0
library_name: transformers
pipeline_tag: image-text-to-text
tags:
- german
- deutsch
- ocr
- vision
- document-ai
- invoice
- rechnung
- structured-extraction
- json-extraction
- kie
- ollama
- vllm
- llama-cpp
- apache-2.0
inference: true
datasets:
- neuralabs/german-synth-ocr
- Aoschu/German_invoices_dataset_for_donut
base_model:
- Qwen/Qwen3.5-2B
new_version: Keyven/german-ocr-3
---
German-OCR-3
Deutsche Vision-OCR. Kompakt. Lokal. Open Source.
Aus deutschem Dokument-Bild → strikt validiertes JSON. In unter 60 Sekunden lokal lauffähig.
---
## ⚡ At a glance
100 %Gültiges JSON |
95 %Sender korrekt |
0 %Halluzination |
5.0 sLatenz / Doc |
Auf 200+ echten anonymisierten deutschen Rechnungen (Default-Edition, 2.7 GB)
---
## Was ist German-OCR-3?
**German-OCR-3** ist eine kompakte, schnelle und voll lokal lauffähige **Vision-OCR-Distribution für deutsche Geschäftsdokumente** — Rechnungen, Briefe, Formulare, Quittungen, Bescheide. Aus dem Bild kommt **strikt validiertes JSON** nach unserem deutschen Extraktions-Schema. Ohne Cloud-Pflicht, ohne Vendor-Lock-in.
Zwei Editionen, beide Apache 2.0, beide unter 3 GB:
| Edition | Ollama | Größe | Zielhardware | Stärke |
|---|---|---:|---|---|
| **Nano** | `Keyvan/german-ocr-nano` | **1.0 GB** | CPU · Edge · Mobile | „läuft überall" |
| **Default** ⭐ | `Keyvan/german-ocr-3` | **2.7 GB** | 4–6 GB VRAM | beste Field-Erkennung |
> **Fine-tuned adapter** für deutsche Geschäftsdokument-Extraktion. Apache 2.0.
---
## 📊 Praxistest — 200+ echte deutsche Rechnungen (anonymisiert)
| Edition | Valid JSON | Sender korrekt | **Halluzination** | Latenz |
|---|---:|---:|---:|---:|
| `Keyvan/german-ocr-nano` | 84 % | 79 % | **0 %** | 6.6 s |
| **`Keyvan/german-ocr-3`** ⭐ | **100 %** | **95 %** | **0 %** | **5.0 s** |
**Keine "Mustermann"-Defaults.** German-OCR-3 liest echte Firma, Kundenadresse, Produkte, Beträge — statt zu raten.
---
## 📐 Größenvergleich
`german-ocr-3` (2.7 GB) ist **6× kleiner** als ein typischer 7B-OCR-VLM. Läuft auf einer **8 GB-Gaming-GPU** oder über CPU auf einem normalen Laptop.
---
## 🚀 Quickstart
### Ollama (empfohlen, eine Zeile)
```bash
ollama pull Keyvan/german-ocr-3
ollama run Keyvan/german-ocr-3 "Extrahiere die Rechnung im Bild als JSON." ./meine_rechnung.png
```
Beispiel-Output (anonymisiert, aus Praxistest) — klicken zum Aufklappen
```json
{
"document_type": "invoice",
"language": "de",
"invoice_number": "100137xXXXXX",
"invoice_date": "2024-01-22",
"due_date": "2024-01-27",
"sender": {
"name": "IONOS SE",
"address": "Elgendorfer Str. 57, 56410 Montabaur",
"vat_id": "DE81556XXX",
"iban": null
},
"recipient": {
"name": "Firma e.K.",
"address": "Muster Straße 32, 80335 München",
"customer_id": "5835XXX"
},
"line_items": [
{"position": 1, "description": "Mail Business 1 Liz.", "quantity": 1,
"unit": "Monat", "unit_price_net": 4.20, "amount_net": 4.20, "vat_rate": 19}
],
"amount_net": 4.20,
"amount_vat": 0.80,
"amount_total": 5.00,
"currency": "EUR",
"notes": ["Entsprechend Ihrem SEPA-Lastschriftmandat ..."]
}
```
### Python (via Ollama HTTP API)
```python
import base64, json, requests
from pathlib import Path
b64 = base64.b64encode(Path("rechnung.png").read_bytes()).decode()
resp = requests.post("http://localhost:11434/api/generate", json={
"model": "Keyvan/german-ocr-3",
"prompt": "Extrahiere die Rechnung im Bild als JSON.",
"images": [b64],
"stream": False,
"options": {"temperature": 0, "num_ctx": 32768},
})
data = json.loads(resp.json()["response"])
print(json.dumps(data, indent=2, ensure_ascii=False))
```
### Bundle herunterladen
```bash
huggingface-cli download Keyven/german-ocr-3 --local-dir ./german-ocr-3
# Enthält: Modelfile · JSON-Schemas · System-Prompt · GGUF-Quants · Charts
```
### llama.cpp (GGUF direkt)
```bash
llama-cli -m ./german-ocr-3/german-ocr-3-Q4_K_M.gguf \
--system-prompt-file ./german-ocr-3/system_prompt.txt \
-p "Extrahiere die Rechnung als JSON:" --temp 0
```
---
## 📚 Trainings- und Evaluations-Datensätze
| Datensatz | Umfang | Typ |
|---|---|---|
| [`neuralabs/german-synth-ocr`](https://huggingface.co/datasets/neuralabs/german-synth-ocr) | 4 500+ | Deutsche OCR-Samples (synthetisch, Apache-2.0) |
| [`Aoschu/German_invoices_dataset_for_donut`](https://huggingface.co/datasets/Aoschu/German_invoices_dataset_for_donut) | 129 | Echte deutsche Rechnungen (Donut-Format) |
| Eigenes synthetisches DE-Rechnungs-Set | 100 | Rechnungen mit Golden-JSON, deterministisch generiert |
| Anonymisierter DACH-Praxistest | 200+ | Echte Rechnungen verschiedener DACH-Anbieter (intern, DSGVO) |
---
## 🎯 Zielgruppen
- **Solo-Builder & Indies** — deutsche Dokumente lokal extrahieren, ohne Cloud-OCR-Kosten.
- **DACH-KMU mit Datenschutz-Anspruch** — lokal / on-prem hosten.
- **Agenturen & Studios** — Open-Source-Fundament unter der eigenen Pipeline.
Wer es **gemanagt** und mit noch größeren Modellen will:
> 🌐 **[german-ocr.de](https://german-ocr.de)** — gehostete deutsche OCR-API mit Premium-Modellen, höherer Genauigkeit, ohne eigene Hardware. Daten bleiben in der EU.
---
## ⚠️ Limitations
- Optimiert für **deutsche** Dokumente — andere Sprachen keine Garantie.
- Beste Qualität bei klaren, hochauflösenden Scans/Fotos.
- Handschriftliche Dokumente: nur begrenzt.
- Bei kritischen Vorgängen (Buchhaltung, Recht): **immer Human-in-the-Loop**.
---
## 🙏 Credit & Attribution
German-OCR-3 baut auf der hervorragenden Arbeit des **Qwen-Teams bei Alibaba Group** auf. Die zugrundeliegende Vision-Language-Architektur stammt aus der **Qwen 3.5 Small Series**, veröffentlicht unter Apache License 2.0. Ohne die offene Forschung und die saubere Veröffentlichung der Qwen-Weights wäre dieses Projekt nicht möglich.
- **Qwen 3.5** — https://huggingface.co/Qwen · https://qwen.ai
- **Apache License 2.0** (Weights) — © 2025–2026 Qwen Team, Alibaba Group
- **Qwen2.5-VL Technical Report** — [arXiv:2502.13923](https://arxiv.org/abs/2502.13923)
Vollständiger Attribution-Text in [`NOTICE`](NOTICE).
---
## 📄 License
**Apache License 2.0** für die gesamte German-OCR-3-Distribution (Modelfiles, System-Prompt, Schemas, Docs, GGUFs).
---
## 📑 Citation
Wenn du German-OCR-3 in Forschung oder Produktion verwendest, zitiere bitte **beides** — unsere Distribution und die Qwen-Basisarbeit:
```bibtex
@misc{german_ocr_3_2026,
title = {German-OCR-3: A compact German document-OCR distribution},
author = {Hardani, Keyvan},
year = {2026},
url = {https://github.com/Keyvanhardani/German-OCR}
}
@misc{qwen35_2026,
title = {Qwen 3.5 Small Series},
author = {{Qwen Team, Alibaba Group}},
year = {2026},
howpublished = {\url{https://huggingface.co/Qwen}},
note = {Apache License 2.0}
}
@article{qwen25vl_2025,
title = {Qwen2.5-VL Technical Report},
author = {{Qwen Team, Alibaba Group}},
journal = {arXiv preprint arXiv:2502.13923},
year = {2025}
}
```
---
## 👤 Author
**Keyvan Hardani**
· Website: [keyvan.ai](https://keyvan.ai)
· LinkedIn: [linkedin.com/in/keyvanhardani](https://linkedin.com/in/keyvanhardani)
· GitHub: [@Keyvanhardani](https://github.com/Keyvanhardani)
· Hosted Premium: [german-ocr.de](https://german-ocr.de)