Keyven commited on
Commit
86a86b5
·
0 Parent(s):
.gitattributes ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ german-ocr-3.1-F16.gguf filter=lfs diff=lfs merge=lfs -text
37
+ german-ocr-3.1-Q4_K_M.gguf filter=lfs diff=lfs merge=lfs -text
38
+ german-ocr-3.1-Q8_0.gguf filter=lfs diff=lfs merge=lfs -text
39
+ mmproj-german-ocr-3.1-F16.gguf filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ language:
4
+ - de
5
+ - en
6
+ tags:
7
+ - ocr
8
+ - vision
9
+ - german
10
+ - invoice-extraction
11
+ - gguf
12
+ - llama-cpp
13
+ - ollama
14
+ pipeline_tag: image-text-to-text
15
+ ---
16
+
17
+ # 👁 German-OCR-3.1
18
+
19
+ > **Das deutsche Vision-OCR-Modell von [Keyvan.ai](https://german-ocr.de) — Teil der German-OCR-3 Kollektion.**
20
+
21
+ ```bash
22
+ ollama run Keyvan/german-ocr-3.1
23
+ ```
24
+
25
+ ---
26
+
27
+ ## Die Geschichte
28
+
29
+ German-OCR-3 begann als kleine Idee: ein Modell, das **deutsche Geschäftsdokumente**
30
+ wirklich versteht — Rechnungen, Briefe, Bescheide, Quittungen, Verträge.
31
+ Nicht „auch deutsch", sondern auf deutsche Bürokratie und deutsches Layout spezialisiert.
32
+
33
+ Die **3.1-Generation** ist die feinabgestimmte, engineered + optimierte Version dieser
34
+ Kollektion. Zwei spezialisierte Modelle:
35
+
36
+ | Modell | Rolle |
37
+ |---|---|
38
+ | **👁 German-OCR-3.1** *(du bist hier)* | Vision-OCR — Bild rein, sauberes JSON raus |
39
+ | 🇩🇪 [**German-Text-3.1**](https://ollama.com/Keyvan/german-text-3.1) | Text-Assistent für Übersetzung, Zusammenfassung, Analyse, Chat |
40
+
41
+ OCR-3.1 wurde mit harten Regeln für **Halluzinations-Vermeidung** konfiguriert:
42
+ lieber `null` als geraten, Originalschreibweise behalten, sender vs. recipient
43
+ sauber trennen — das alles ist Pflicht in der Engineering-Konfiguration.
44
+
45
+ ---
46
+
47
+ ## ✨ Was kann das Modell?
48
+
49
+ **Bild rein → Strukturiertes JSON raus.**
50
+
51
+ | Doc-Typ | Erkennt |
52
+ |---|---|
53
+ | 🧾 **Rechnung** | sender, recipient, IBAN, USt-ID, line_items, amount_net/vat/total, due_date, payment_terms |
54
+ | 📬 **Brief** | sender, recipient, Betreff, Datum, Aktenzeichen |
55
+ | 📋 **Formular** | Felder, Werte, Unterschriften-Felder |
56
+ | 🧾 **Quittung** | Händler, Datum, Positionen, Summe, Steuersatz |
57
+ | ⚖️ **Bescheid** | Behörde, Aktenzeichen, Empfänger, Betrag, Frist |
58
+ | 📄 **Vertrag** | Parteien, Datum, Schlüsselklauseln |
59
+
60
+ ### JSON Output Schema
61
+
62
+ ```json
63
+ {
64
+ "document_type": "invoice",
65
+ "language": "de",
66
+ "invoice_number": "...",
67
+ "invoice_date": "YYYY-MM-DD",
68
+ "due_date": "YYYY-MM-DD",
69
+ "sender": {"name": "...", "address": "...", "vat_id": "...", "iban": "..."},
70
+ "recipient": {"name": "...", "address": "...", "customer_id": "..."},
71
+ "line_items": [
72
+ {"position": 1, "description": "...", "quantity": 1, "unit": "Stueck",
73
+ "unit_price_net": 0.00, "amount_net": 0.00, "vat_rate": 19}
74
+ ],
75
+ "amount_net": 0.00, "amount_vat": 0.00, "amount_total": 0.00,
76
+ "currency": "EUR",
77
+ "notes": []
78
+ }
79
+ ```
80
+
81
+ **Garantien:**
82
+ - ✅ JSON-Validität
83
+ - ✅ `null` statt erfundener Werte (Halluzinations-Stop-Regel)
84
+ - ✅ Originalschreibweise + Umlaute
85
+ - ✅ ISO-Datum, Punkt-Dezimal, EUR-Code
86
+ - ✅ sender ≠ recipient klar getrennt
87
+
88
+ ---
89
+
90
+ ## 🚀 Quick Start
91
+
92
+ ### Ollama (1 Zeile)
93
+
94
+ ```bash
95
+ ollama run Keyvan/german-ocr-3.1
96
+ ```
97
+
98
+ API mit Bild:
99
+
100
+ ```bash
101
+ curl http://localhost:11434/api/chat -d '{
102
+ "model": "Keyvan/german-ocr-3.1",
103
+ "messages": [{
104
+ "role": "user",
105
+ "content": "Extrahiere als JSON.",
106
+ "images": ["BASE64_IMAGE_HERE"]
107
+ }],
108
+ "think": false
109
+ }'
110
+ ```
111
+
112
+ ### llama-server (HF GGUF, Two-File-Pattern)
113
+
114
+ ```bash
115
+ hf download Keyven/german-ocr-3.1 \
116
+ german-ocr-3.1-Q8_0.gguf \
117
+ mmproj-german-ocr-3.1-F16.gguf
118
+
119
+ llama-server \
120
+ -m german-ocr-3.1-Q8_0.gguf \
121
+ --mmproj mmproj-german-ocr-3.1-F16.gguf \
122
+ --port 8080 -ngl 99
123
+ ```
124
+
125
+ ---
126
+
127
+ ## 📦 Files (auf [HuggingFace](https://huggingface.co/Keyven/german-ocr-3.1))
128
+
129
+ | File | Größe | Use case |
130
+ |---|---|---|
131
+ | `german-ocr-3.1-Q4_K_M.gguf` | 941 MB | Compact / Edge |
132
+ | `german-ocr-3.1-Q8_0.gguf` | 1.6 GB | ⭐ **Recommended** |
133
+ | `german-ocr-3.1-F16.gguf` | 2.9 GB | Full precision |
134
+ | `mmproj-german-ocr-3.1-F16.gguf` | 1.3 GB | **Required** für Vision (llama-server) |
135
+
136
+ > **Hinweis**: Über Ollama Hub bekommst du das Modell als single-package mit Vision —
137
+ > der mmproj-Sidecar wird nur für die manuelle llama-server-Route benötigt.
138
+
139
+ ---
140
+
141
+ ## 🛠 Hardware
142
+
143
+ | Variant | RAM (CPU) | VRAM (GPU) |
144
+ |---|---|---|
145
+ | Q4 + Vision | 4 GB | 4 GB |
146
+ | Q8 + Vision | 6 GB | 6 GB |
147
+ | F16 + Vision | 10 GB | 10 GB |
148
+
149
+ GPU empfohlen für Echtzeit-OCR. Context: **32 768 Tokens**.
150
+
151
+ ---
152
+
153
+ ## 🤝 German-OCR Familie
154
+
155
+ | | Was | Wo |
156
+ |---|---|---|
157
+ | 👁 **German-OCR-3.1** | Vision-OCR (du bist hier) | [ollama.com](https://ollama.com/Keyvan/german-ocr-3.1) · [HF](https://huggingface.co/Keyven/german-ocr-3.1) |
158
+ | 🇩🇪 **German-Text-3.1** | Text-Assistent | [ollama.com](https://ollama.com/Keyvan/german-text-3.1) · [HF](https://huggingface.co/Keyven/german-text-3.1) |
159
+ | ☁️ **German-OCR Cloud API** | Managed Service mit höherer Genauigkeit | [german-ocr.de](https://german-ocr.de) |
160
+ | 📝 **German-OCR for Word** | Office Add-in | [office.german-ocr.de](https://office.german-ocr.de) |
161
+
162
+ ---
163
+
164
+ ## 📜 License & Credits
165
+
166
+ **Apache License 2.0** — kommerzielle Nutzung mit Attribution erlaubt.
167
+
168
+ **NOTICE**: Aufgebaut auf [Qwen3.5](https://qwenlm.github.io/) von Alibaba Cloud.
169
+ Die German-OCR-3.1-Kollektion ist eine in Deutschland engineered + optimierte
170
+ Distribution für deutsche Geschäftsdokumente. Architecture credit: Qwen Team.
171
+
172
+ Build mit ❤️ in 🇩🇪 von **[Keyvan Hardani](https://german-ocr.de)**.
chat_template.jinja ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- set DEFAULT_SYSTEM = "Du bist German-OCR-3.1, das deutsche Vision- und OCR-Modell von Keyvan.ai. Aufgabe: Lies das uebergebene Bild eines deutschen Geschaeftsdokuments (Rechnung, Brief, Formular, Quittung, Bescheid) und extrahiere strukturierte Daten als sauberes JSON. Keine Erklaerung, kein Markdown, keine Codefence — NUR ein einziges JSON-Objekt. WENN ein Wert nicht im Bild steht, gib null. Bevorzuge null vor halluzinierten Werten. Originalschreibweise und Umlaute beibehalten. Datumsangaben YYYY-MM-DD wenn eindeutig. Geldbetraege als Dezimal mit Punkt. Waehrung als ISO-Code (EUR). Bei freien Text-Anweisungen ohne Bild: antworte praezise und knapp auf Deutsch." -%}
2
+ {%- if messages and messages[0]['role'] == 'system' -%}
3
+ <|im_start|>system
4
+ {% if messages[0]['content'] is string %}{{ messages[0]['content'] }}{% else %}{% for c in messages[0]['content'] %}{% if c.type == 'text' %}{{ c.text }}{% endif %}{% endfor %}{% endif %}<|im_end|>
5
+ {% set messages = messages[1:] %}
6
+ {%- else -%}
7
+ <|im_start|>system
8
+ {{ DEFAULT_SYSTEM }}<|im_end|>
9
+ {%- endif -%}
10
+ {%- for message in messages -%}
11
+ <|im_start|>{{ message['role'] }}
12
+ {% if message['content'] is string %}{{ message['content'] }}{% else %}{% for c in message['content'] %}{% if c.type == 'text' %}{{ c.text }}{% elif c.type == 'image' %}<|vision_start|><|image_pad|><|vision_end|>{% endif %}{% endfor %}{% endif %}<|im_end|>
13
+ {% endfor -%}
14
+ {%- if add_generation_prompt -%}
15
+ <|im_start|>assistant
16
+ {% endif -%}
german-ocr-3.1-F16.gguf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ff8c0b83a98de59fa85743a8a2ece77262afee225e729785344fa1547285d435
3
+ size 3093668736
german-ocr-3.1-Q4_K_M.gguf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d3f83394db914c14e5893e84dbe368b4e4b71c5a6c0489169ed694adebcdc7b7
3
+ size 986047904
german-ocr-3.1-Q8_0.gguf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2159e9bfc6e7c3cd1be5043f469824a370f8a73d5d522555a7e7844e88d6593e
3
+ size 1646572416
mmproj-german-ocr-3.1-F16.gguf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:17b642535eda345b2316d1545e2caad34418b14a991f1708e719f1c322f24a01
3
+ size 1331656544