Image-to-Text
Transformers
Safetensors
Turkish
English
ocr
turkish
document-intelligence
vision-language-model
svtrv2
qwen2.5-vl
kvkk
pii-redaction
legal-nlp
ictihat
financial-verification
visual-redaction
Eval Results (legacy)
Instructions to use ersanbil/TurkceOCR with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use ersanbil/TurkceOCR with Transformers:
# Use a pipeline as a high-level helper # Warning: Pipeline type "image-to-text" is no longer supported in transformers v5. # You must load the model directly (see below) or downgrade to v4.x with: # pip install "transformers<5.0.0" from transformers import pipeline pipe = pipeline("image-to-text", model="ersanbil/TurkceOCR")# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("ersanbil/TurkceOCR", device_map="auto") - Notebooks
- Google Colab
- Kaggle
File size: 64,943 Bytes
c8b6043 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 | ---
license: apache-2.0
language:
- tr
- en
library_name: transformers
pipeline_tag: image-to-text
tags:
- ocr
- turkish
- document-intelligence
- vision-language-model
- svtrv2
- qwen2.5-vl
- kvkk
- pii-redaction
- legal-nlp
- ictihat
- financial-verification
- visual-redaction
datasets:
- ersanbil/TurkceOCR-Bench
- hamzabagirsakci/turkish-court-decisions
base_model:
- Qwen/Qwen2.5-VL-3B-Instruct
- dbmdz/bert-base-turkish-cased
model-index:
- name: TurkceOCR-v2.0
results:
- task:
type: image-to-text
name: Document OCR & Layout Recognition
dataset:
name: TurkExternalBlindBench-v1 (35 Unseen Real Archival Pages)
type: ersanbil/TurkceOCR-Bench
split: external_blind_35
metrics:
- type: cer
value: 1.76
name: Mean Character Error Rate (%)
- type: wer
value: 7.57
name: Mean Word Error Rate (%)
- type: f1
value: 98.67
name: Position-Aligned Turkish Diacritic F1 (%)
- type: repetition_loop_rate
value: 0.00
name: KPI-14 6-Token Repetition Loop Rate (%)
- task:
type: image-to-text
name: Turkish Document Intelligence (15-KPI Suite)
dataset:
name: TurkceOCR-Bench-6Cat (ID + OOD)
type: ersanbil/TurkceOCR-Bench
split: docbench_15kpi
metrics:
- type: cer
value: 0.00
name: Full-System CER with TurkceVerify (%)
- type: f1
value: 100.0
name: I/İ/ı/i Dot Disambiguation F1 (%)
- type: accuracy
value: 100.0
name: Checksum-Verified KIE Rate (CVKR, %)
- type: recall
value: 100.0
name: Zero-Leakage KVKK PII Recall (%)
- type: coverage
value: 100.0
name: 2D Irreversible #000000 Visual Redaction Coverage (%)
- task:
type: image-to-text
name: Pure Neural CTC Line Recognition (No Language Model)
dataset:
name: TurkceOCR Phase-2 Held-Out Real PDF Lines (N=215)
type: ersanbil/TurkceOCR-Bench
split: phase2_real_hybrid
metrics:
- type: cer
value: 21.92
name: Pure Born-Digital Real PDF Line CER (%)
- type: cer
value: 16.17
name: Mevzuat PDF Line CER (%)
- type: cer
value: 20.34
name: Rekabet Kurumu PDF Line CER (%)
---
# TurkceOCR
Turkish document OCR, algorithmic checksum and financial verification (`TurkceVerify`), legal and commercial entity recognition (`ictihat_core` × [`ersanbil/kvkk-pii-ner`](https://huggingface.co/ersanbil/kvkk-pii-ner)), and 2D `#000000` visual redaction (`VisualRedactor`).
This repository bundles the Phase-2 line recognition checkpoint (`line_svtrv2/`), the page-layout LoRA adapter (`vlm_lora/`), the configuration manifests (`pipeline_config.json`, `configs/`), and the Python inference and post-processing package (`turkceocr/`).
## Architecture
| Component | Details |
|---|---|
| Visual pre-processing | Adaptive `2.0×–2.5×` Lanczos upscaling for low-resolution scans (`W < 1000 px`); morphological table-grid removal (`40×1` and `1×40` opening kernels on dark neutral lines); `.docx` embedded `.emf`/`.wmf` vector table rasterization at `240–300 DPI` |
| Line recognizer (`line_svtrv2/`) | `SVTRv2-Turkish-SGM v2` (~12 M parameters, `(H=48, W=384)` input, `T=96` time steps): 2D-STN rectification + multi-scale conv/transformer encoder + CTC head + Turkish morphological SGM auxiliary head, trained with `TurkishCharacterConfusionFocalLoss` (`γ = 2.5`) on 2,750 real PDF and archival lines |
| Page layout adapter (`vlm_lora/`) | `Qwen2.5-VL-3B-LoRA v2` (`r = 16, α = 32`) with 31 structural and Turkish diacritic tokens (`<doc>`, `<region>`, `<table_md>`, `<kv>`, `<stamp>`, `<signature/>`, `<handwriting>`, `<marginalia>`) and RLVR verifiable-reward alignment |
| Constrained verifier (`TurkceVerify`) | Deterministic Mod-10 / parity check and 1-edit visual-confusion lattice repair for TCKN and Foreign ID (`99`), GİB Mod-10 for VKN, TCMB reserve-`0` + ISO-7064 Mod-97-10 for TR IBAN, and linear invoice solver (`Matrah + KDV = Toplam` for `r ∈ {1%, 10%, 20%}`) |
| Repetition guard (`RepetitionGuard`) | 4–8 token periodic loop truncation (`≥ 5` repeats) with alphabetic-diversity exemption for Rekabet Kurumu `| (.....) |` trade-secret tables, plus horizontal half-page split-and-retry |
| Entity engine (`UnifiedTurkishEntityEngine`) | 25+ entity classes combining `ictihat_core` legal recognizers (calibrated on [`hamzabagirsakci/turkish-court-decisions`](https://huggingface.co/datasets/hamzabagirsakci/turkish-court-decisions)) with [`ersanbil/kvkk-pii-ner`](https://huggingface.co/ersanbil/kvkk-pii-ner) (`v2.0`, 13 BIO classes, 512-token sliding window with stride 128), `fold_tr_isomorphic` 1:1 offset mapping, hierarchical span subsumption, and two-tier fail-closed `SUSPECT_PII` detection |
| 2D visual redactor (`VisualRedactor`) | Monotonic `OffsetMap` (`π: norm → raw`) character-to-pixel projection with proportional typographic character widths and irreversible `#000000` (`RGB 0,0,0`) box fill over text PII and visual regions (`VISUAL_SIGNATURE`, `VISUAL_STAMP`, `VISUAL_QRCODE`, `VISUAL_PHOTO`) |
---
## 1. Genel Bakış ve Motivasyon
Çok dilli genel amaçlı OCR motorları (`Tesseract`, `PaddleOCR`) ve görsel-dil modelleri (`Hunyuan-OCR`, `Qwen2.5-VL`, `LightOnOCR`), Türkçe kurumsal, hukuki, finansal ve arşiv belgelerinde dört temel yapısal darboğaz nedeniyle hata üretir:
1. **Türkçe Ortografik ve Morfolojik Çöküş (`I/İ/ı/i` ve Ek Zincirleri):**
Türkçedeki dört yönlü noktalı/noktasız `I/İ/ı/i` ayrımı, çengel/nokta diakritikleri (`ğ, ü, ş, ö, ç`) ve şapkalı ünlülerin (`â, î, û`) düşük çözünürlüklü faks/tarama veya 1-bit arşiv görüntülerinde (`551×790` Resmî Gazete GIF'leri, 203 DPI termal POS fişleri) silinmesi, sondan eklemeli (agglutinative) Türkçe kelimelerde (`mamelekiyle` → `meleklemiyle`, `fesih` ↔ `feshin geçersizliğine`) anlamı değiştiren hatalara yol açar.
2. **VLM Tekrar Döngüleri (`Repetition Loops`) ve Sütun Kaybı:**
Gerçek saha denetimimizde, VLM tabanlı OCR modellerinin 9 sütunlu `.emf` vektör enerji tarife tablolarında 9 sütunun 8'ini düşürdüğü (`CER = 45.78%`), 2001 yılı Resmî Gazete arşiv GIF'lerinde ise yorum halüsinasyonu ürettiği veya 6-gram tekrar döngüsüne girerek sayfanın %51–%83'ünü kaybettiği (`CER = 32.33%`) ölçülmüştür.
3. **Algoritmik Sağlama Eksikliği:**
Standart OCR motorları `1O000000146` veya `10000000148` gibi tek karakteri bozulmuş bir TCKN / VKN / IBAN numarasını veya `Matrah + KDV ≠ Genel Toplam` olan bir faturayı olduğu gibi dışarı aktarır. Oysa Türkiye'deki resmi numaralar matematiksel değişmezlere (NVİ Mod-10 + çiftlik, GİB Mod-10, TCMB ISO-7064 Mod-97-10) tabidir.
4. **KVKK (6698 Sayılı Kanun) ve Görsel Karartma İhtiyacı:**
Mahkeme kararları, bilirkişi raporları ve kurumsal sözleşmeler paylaşılırken yalnızca metin içindeki bilinen TCKN'leri maskelemek yeterli değildir; OCR bozulması yüzünden sağlamadan geçemeyen şüpheli adayların (`<TR_TCKN_SUSPECT>`) yakalanması ve belge görüntüsü üzerindeki PII kutularının, ıslak imzaların, kaşelerin ve karekodların 2B piksel uzayında tam siyah (`#000000`) ile karartılması gerekir.
---
## 2. Mimari ve Matematiksel Formülasyon
```text
[Girdi Belgesi: PDF / TIFF / GIF / PNG / DOCX Media (.emf/.wmf)]
│
▼
[Katman 1: Görsel Ön-İşleme & Fotometrik Normalizasyon]
• Adaptif Süper-Çözünürlük (2.0×–2.5× Lanczos, W < 1000 px)
• Aydınlatma Bölme Normalizasyonu (Gauss σ = 51) & Islak Mühür Bastırma (‖∇I‖ < 65)
• Boyut Korumalı Morfolojik Tablo Izgara Temizliği (120×1 & 1×100) + .emf/.wmf Rasterizasyon
│
▼
[Katman 2: Hibrit Görsel OCR Çekirdeği]
• SVTRv2-Turkish-SGM v2 Satır Motoru (~12M param, Dinamik Genişlik T = W/4, γ = 2.5 Focal Loss)
• Qwen2.5-VL-3B-LoRA v2 Sayfa Düzeni Adaptörü (r = 16, α = 32, 31 Yapısal Token, RLVR = 0.9978)
• Sütun Oluğu (Column Gutter) & Boşluk Vadisi (Whitespace-Valley) Bölütleme + Çoklu-PSM Düzen
│
▼
[Katman 3: Deterministik Doğrulama & Döngü Koruması]
• RepetitionGuard: 4..8-gram Tekrar Döngüsü Kesici (≥ 5 tekrar, | (.....) | Ticari Sır Muafiyetli)
• TurkceVerify: NVİ TCKN/YKN Mod-10, GİB VKN Mod-10, TCMB IBAN Mod-97-10 + KDV Denklem Çözücü
│
▼
[Katman 4: Hukuki/KVKK Varlık Çıkarımı & 2B #000000 Görsel Karartma]
• UnifiedTurkishEntityEngine: ictihat_core + ersanbil/kvkk-pii-ner v2.0 (13 BIO, 25+ Varlık Sınıfı)
• VisualRedactor: Monotonik OffsetMap (π: norm → raw) + Geri Döndürülemez #000000 (RGB 0,0,0) Karartma
```
### 2.1 Katman 1 — Görsel Ön-İşleme, Tablo Izgara Temizliği ve `SVTRv2-Turkish-SGM v2` Satır Motoru
1. **Adaptif Süper-Çözünürlük ve Morfolojik Izgara Silme:**
- Düşük çözünürlüklü arşiv belgeleri (`W < 1000 px`, örn. `551×790` 2001 yılı Resmî Gazete 1-bit GIF'leri ve gömülü `.docx` tabloları) `2.0×–2.5× Lanczos` enterpolasyonu ile ölçeklenir.
- Tablo hücre sınırlarının Türkçe çengel/nokta diakritikleriyle (`Ş, Ğ, Ç, İ, Ö, Ü`) kaynaşmasını önlemek için yalnızca koyu siyah ızgara çizgileri (`Gray < 120`, `max(R,G,B) - min(R,G,B) < 25`) yatay (`40×1` / `120×1`) ve dikey (`1×40` / `1×100`) morfolojik açma (opening) çekirdekleriyle temizlenir; renkli başlık dolguları korunur.
- `.docx` içine gömülü Windows Metafile (`.emf` / `.wmf`) vektör tabloları `PIL.ImageGrab` / GDI+ üzerinden yüksek çözünürlüklü (`240–300 DPI`) RGB matrise rasterize edilir.
2. **`SVTRv2-Turkish-SGM v2` (`line_svtrv2/model.safetensors`, ~12M Parametre):**
- **2B Uzamsal Dönüşüm Ağı (`2D-STN`):** Eğik, perspektif bozulmalı veya kıvrımlı satırları `(H = 48, W = 384)` kanonik koordinatlara (veya `W ∈ [384, 960]` dinamik genişliğe) düzeltir.
- **Çok Ölçekli Konvolüsyon + Çift Yönlü Dizi Kodlayıcı:** `ConvStem` + yerel/küresel bağlam katmanlarıyla `T = W / 4 = 96` zaman adımlı öznitelik dizisi üretir.
- **Bileşik Kayıp Fonksiyonu (Composite Loss):**
```text
L_SVTRv2 = L_CTC + λ_SGM · L_SGM + λ_focal · L_TurkishConfusionFocal (γ = 2.5)
```
Burada `L_TurkishConfusionFocal` (`γ = 2.5`), Türkçeye özgü 7 görsel karışıklık kümesi (`{I, İ, ı, i, l, 1}`, `{ğ, g, q}`, `{ş, s, 5}`, `{ç, c}`, `{ö, o, 0}`, `{ü, u}`, `{â, a, î, û}`) üzerindeki yanlış olasılık dağılımlarını üstel olarak cezalandırır.
### 2.2 Katman 2 — `Qwen2.5-VL-3B-LoRA v2` Sayfa Düzeni ve RLVR Doğrulanabilir Ödül Hizalaması
- **`vlm_lora/model.safetensors`** ağırlıkları, çok sütunlu Resmî Gazete sayfaları, kaşeli mahkeme kararları ve karmaşık ERP tablolarında **okuma sırası (`RO-NED`)** ve **yapısal Markdown/HTML tablo (`TEDS`)** üretimi için `r = 16, α = 32` LoRA adaptörleri ve **31 özel yapısal/diakritik token** (`<doc>`, `</doc>`, `<region>`, `<table_md>`, `<kv>`, `<stamp>`, `<signature/>`, `<handwriting>`, `<marginalia>`, `<checkbox_checked/>`, `<checkbox_unchecked/>` vb.) ile eğitilmiştir.
- **RLVR (Reinforcement Learning with Verifiable Rewards):** Model çıktıları, `TurkceVerify` sağlama başarısı ve `TEDS` ağaç düzenleme mesafesinden türetilen doğrulanabilir ödül fonksiyonu ile hizalanmıştır (**Son RLVR Ödülü: `0.9978`**).
### 2.3 Katman 3 — `TurkceVerify` Algoritmik Sağlama Kafesi ve Cebirsel Finansal Denklem Çözücü
`turkceocr/postprocess/turkceverify.py` modülü, OCR çıktısındaki resmi numaraları ve finansal tabloları deterministik olarak doğrular ve **1-edit görsel karışıklık kafesi** (`O ↔ 0`, `I/İ/l ↔ 1`, `S/Ş ↔ 5`, `B ↔ 8`, `G/Ğ ↔ 6`, `Z ↔ 2`) üzerinde otomatik onarır:
1. **T.C. Kimlik Numarası (TCKN) & Yabancı Kimlik Numarası (`99`):**
11 haneli `d_1 d_2 ... d_11` dizisi için (`d_1 ≠ 0`):
```text
d_10 = ( 7 × (d_1 + d_3 + d_5 + d_7 + d_9) - (d_2 + d_4 + d_6 + d_8) ) mod 10
d_11 = ( d_1 + d_2 + ... + d_10 ) mod 10, d_11 mod 2 == 0
```
> **Kritik Güvenlik Onarımı:** `99` ile başlayan Yabancı Kimlik Numaraları dahil tüm 11 haneli adaylarda NVİ Mod-10 ve çiftlik kontrolü zorunludur.
2. **Vergi Kimlik Numarası (VKN — GİB Mod-10):**
10 haneli `v_1 v_2 ... v_10` dizisi için `i ∈ {1..9}` adımlarında:
```text
t_i = (v_i + 10 - i) mod 10
c_i = 0 eğer t_i == 0
= 9 eğer t_i ≠ 0 ve (t_i × 2^(10-i)) mod 9 == 0
= (t_i × 2^(10-i)) mod 9 diğer durumlarda
v_10 = (10 - ((c_1 + c_2 + ... + c_9) mod 10)) mod 10
```
3. **TR IBAN (TCMB Rezerv `'0'` + ISO-7064 Mod-97-10):**
26 karakterli `TRkk bbbb brrr cccc cccc cccc cc` dizisinde 10. karakterin rezerv `'0'` (`clean[9] == '0'`) olması ve ilk 4 karakter sona taşınıp harfler sayıya (`T = 29, R = 27`) dönüştürüldüğünde:
```text
int(Rearranged_IBAN) mod 97 == 1
```
4. **Cebirsel KDV & Fatura Denklem Çözücü:**
Fatura satırlarında ve dip toplamlarında Türkiye KDV oranları (`r ∈ {1%, 10%, 20%}`) için:
```text
Matrah + KDV = Genel Toplam, KDV = round(Matrah × r, 2)
```
denklemlerini sağlamayan OCR rakam hatalarını (örn. `2.800,00 TL` olarak okunan matrahın `KDV = 400,00 TL` ve `Toplam = 2.400,00 TL` kısıtlarından `2.000,00 TL` olarak tekil çözümü) cebirsel olarak onarır.
### 2.4 Katman 4 — `RepetitionGuard`, `UnifiedTurkishEntityEngine` (`ictihat_core` × `kvkk-pii v2.0`) ve `VisualRedactor`
1. **`RepetitionGuard` (`turkceocr/postprocess/repetition_guard.py` — KPI-14):**
- VLM'lerin 4..8 kelimelik kalıpları `≥ 5` kez ardışık tekrarladığı dejenerasyon döngülerini (`yibk-30463` Sayfa 2'deki 28× tekrar döngüsü gibi) anında tespit edip keser (`loop_rate: 0.8696 → 0.0000`).
- **Rekabet Kurumu Ticari Sır Muafiyeti:** Rekabet Kurumu kararlarında tek dosyada **4.157 kez** geçebilen `| (.....) | (.....) |` ticari sır maskeleme tablolarını alfabetik çeşitlilik filtresiyle (`len({s for s in kalip if any(c.isalpha() for c in s)}) < 3`) döngü sanıp kesmez (**`%0.00` yanlış pozitif**).
2. **`UnifiedTurkishEntityEngine` (`turkceocr/postprocess/entity_engine.py`):**
- **İki Katmanlı Fail-Closed Mimari (`VERIFIED_PII` + `SUSPECT_PII`):** Algoritmik sağlamadan geçen veya 1-edit ile onarılan kimlik/hesap numaralarını `VERIFIED_PII` (`confidence ≥ 0.95`) olarak; çoklu OCR bozulması nedeniyle sağlamadan geçemeyen ancak sol bağlam penceresinde `TCKN:`, `T.C. Kimlik No:`, `Vergi No:`, `IBAN:` etiketi bulunan adayları ise asla düşürmeyip **`<TR_TCKN_SUSPECT>` / `<TR_VKN_SUSPECT>` / `<TR_IBAN_SUSPECT>` (`tier="SUSPECT_PII"`)** olarak yakalar.
- **1:1 İzomorfik Türkçe Katlama (`fold_tr_isomorphic`):** `İ → i`, `I → ı` dönüşümünü Python `'İ'.lower() == 'i\u0307'` (2 karakter!) hatasına düşmeden **1:1 karakter uzunluğu değişmezliği** (`len(folded) == len(raw)`) ile yapar; böylece regex ve NER span ofsetleri orijinal metinle milimetrik hizalanır.
- **Hiyerarşik Span Kapsama (`Hierarchical Span Subsumption`):** Tam adres (`ADDRESS`) veya şirket unvanı (`ORG_COMPANY`) içindeki alt parçaların (`Mahallesi`, `No: 14`, `Yılmaz`) tek başına parçalı etiketlenmesini önler.
3. **`VisualRedactor` (`turkceocr/postprocess/visual_redactor.py` — 2B `#000000` Karartma):**
- `OffsetMap` (`π: norm_idx → raw_idx`) monotonik hizalama vektörü ve tipografik karakter genişlik ağırlıkları (`W/M/@: 1.35`, `i/ı/l/1/.,:;: 0.45`) ile metin span'larını `[x_1, y_1, x_2, y_2]` piksel koordinatlarına izdüşürür.
- Tespit edilen PII bölgelerini, ıslak imzaları (`VISUAL_SIGNATURE`), kaşeleri (`VISUAL_STAMP`), karekodları (`VISUAL_QRCODE`) ve vesikalık fotoğrafları (`VISUAL_PHOTO`) **geri döndürülemez tam siyah (`RGB = 0, 0, 0` / `#000000`)** dikdörtgenlerle kapatır.
---
## 3. Kapsamlı Kıyaslama (Benchmark) Sonuçları
### 3.1 `TurkExternalBlindBench-v1`: 35 Gerçek Saha Sayfası × 9 Motor (Tam Liderlik ve Kategori Kırılımı)
`TurkExternalBlindBench-v1`, hiçbir sentetik şablon içermeyen, doğrudan [`hamzabagirsakci/turkish-court-decisions`](https://huggingface.co/datasets/hamzabagirsakci/turkish-court-decisions) ve kamu mevzuat/karar arşivlerinden seçilmiş **35 gerçek belge sayfasından** (`5` kategori × `7` örnek, toplam **`93.165` gerçek karakter**) oluşur.
#### Tablo 3.1A — Tüm 35 Gerçek Sayfa Üzerinde Genel Liderlik Tablosu (`N = 35`)
| Sıra | Motor Kodu & Yapılandırma | Örnek (`N`) | Ortalama CER (↓) | Ortalama WER (↓) | Diacritic F1 (↑) | KPI-14 Döngü Oranı (↓) | Açıklama |
| :---: | :--- | :---: | :---: | :---: | :---: | :---: | :--- |
| **1** | **`E7_TurkceOCR_Full_System`** | `35` | **`0.0176`** (`1.76%`) | **`0.0757`** (`7.57%`) | **`0.9867`** (`98.67%`) | **`0.0000`** | `E6` + `RepetitionGuard` + `TurkceVerify` (TCKN/VKN/IBAN + Finansal + Hukuki Onarım) + `UnifiedTurkishEntityEngine` + `VisualRedactor` |
| **2** | **`E6_TurkceOCR_Visual_v1`** | `35` | **`0.0178`** (`1.78%`) | **`0.0767`** (`7.67%`) | **`0.9867`** (`98.67%`) | **`0.0000`** | Adaptif 2×/2.5× Lanczos süper-çözünürlük + morfolojik tablo ızgara temizliği + aydınlatma bölme normalizasyonu + mühür bastırma (Son-işleme kapalı) |
| **3** | `E4_Tesseract5_tur_Raw` | `35` | `0.0418` (`4.18%`) | `0.1061` (`10.61%`) | `0.9741` (`97.41%`) | `0.0000` | Resmi `tesseract.exe` v5.4.0 (`-l tur --psm 3`), ham 1× görüntü |
| **4** | `E3_Tesseract5_eng` | `35` | `0.1303` (`13.03%`) | `0.4834` (`48.34%`) | `0.0000` (`0.00%`) | `0.0000` | Resmi `tesseract.exe` v5.4.0 (`-l eng --psm 3`), Türkçe diakritiksiz baz |
| **5** | `E2c_SVTRv2_Line_v2_Phase2` | `35` (`215` satır) | `0.5234` (`0.2450` satır) | `0.9561` (`0.8183` satır) | `0.3378` (`0.5427` satır) | `0.0000` | Faz-2 40-epoch saf nöral CTC `TurkceOCRLine` + Faz-3 Boşluk Vadisi (`Whitespace-Valley`) bölütleyici (dil modeli yok) |
| **6** | `E1_PyMuPDF_Digital` | `35` | `0.6055` (`60.55%`) | `0.6537` (`65.37%`) | `0.4015` (`40.15%`) | `0.0000` | `fitz` dijital metin çıkarımı (21 taranmış/GIF/DOCX sayfasında `0` karakter; 1999 PDF'lerinde `t a r i h l i` harf ayrışma bozulması) |
| **7** | `E2b_SVTRv2_Line_v1_BlankSuppressed` | `35` | `0.9916` (`99.16%`) | `0.9997` (`99.97%`) | `0.0000` (`0.00%`) | `0.0000` | Faz-1 40-adım sentetik model (`<blank>` logit `-2.0` bastırmalı) |
| **8** | `E2_SVTRv2_Line_v1_40Step_Greedy` | `35` | `1.0000` (`100.00%`) | `1.0000` (`100.00%`) | `0.0000` (`0.00%`) | `0.0000` | Faz-1 40-adım sentetik model (`%76.98` `<blank>` çöküşü — Faz-2'de tamamen çözüldü) |
#### Tablo 3.1B — Taranmış/Arşiv Alt Kümesinde `Hunyuan-OCR` VLM ile Birebir Karşılaştırma (`N = 18`)
| Sıra | Motor Kodu | Örnek (`N`) | Ortalama CER (↓) | Ortalama WER (↓) | Diacritic F1 (↑) | `Hunyuan-OCR`'a Göre Bağıl Hata Azaltımı |
| :---: | :--- | :---: | :---: | :---: | :---: | :--- |
| **1** | **`E7_TurkceOCR_Full_System`** | `18` | **`0.0200`** (`2.00%`) | **`0.0699`** (`6.99%`) | **`0.9827`** (`98.27%`) | **`-87.38%` (7.93× daha düşük CER)** |
| **2** | **`E6_TurkceOCR_Visual_v1`** | `18` | **`0.0203`** (`2.03%`) | **`0.0713`** (`7.13%`) | **`0.9827`** (`98.27%`) | **`-87.19%` (7.81× daha düşük CER)** |
| **3** | `E4_Tesseract5_tur_Raw` | `18` | `0.0625` (`6.25%`) | `0.1238` (`12.38%`) | `0.9590` (`95.90%`) | `-60.57%` (2.54× daha düşük CER) |
| **4** | `E5_Hunyuan_VLM_Archive` | `18` | `0.1585` (`15.85%`) | `0.1823` (`18.23%`) | `0.8930` (`89.30%`) | Baz VLM (`0.00%`) |
#### Tablo 3.1C — 5 Gerçek Belge Kategorisi Bazında Özet Performans (`7` Örnek / Kategori)
| Kategori (`7` örnek / kategori) | `E1_PyMuPDF` CER | `E2c_SVTRv2_v2` CER | `E3_Tess_eng` CER | `E4_Tess_tur` CER | `E5_Hunyuan` CER | `E6_Visual_v1` CER | `E7_Full_System` CER | `E7` Diacritic F1 | Kategori Kazananı |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :--- |
| **`cat1_rekabet_pdf`** (Rekabet Kurumu Kararları) | `0.2857` | `0.4276` | `0.0961` | `0.0194` | `0.0339` (`N=2`) | `0.0118` | **`0.0117`** | **`0.9908`** | **`TürkçeOCR Full` (`1.17%`)** |
| **`cat2_rg_yibk_pdf`** (Resmî Gazete YİBK & 1999 Arşiv) | `0.7419` | `0.5011` | `0.1391` | `0.0351` | **`0.0110`** (`N=5`) | `0.0244` | `0.0244` | `0.9833` | **`Hunyuan-OCR` (`1.10%` modern)** / **`TürkçeOCR` (`2.44%` 1999 Courier + Mühür)** |
| **`cat3_mevzuat_pdf`** (HUMK, Avukatlık K., CMUK, HMK) | `0.0000` (Dijital) | `0.5295` | `0.1050` | `0.0140` | Yok | **`0.0076`** | **`0.0076`** | **`0.9985`** | **`TürkçeOCR Full` (`0.76%` görsel)** |
| **`cat4_rg_2001_gif`** (2001 Arşiv `551×790` 1-Bit GIF) | `1.0000` | `0.4980` | `0.1063` | `0.0107` | `0.3233` (`N=7`) | `0.0035` | **`0.0028`** | **`0.9979`** | **`TürkçeOCR Full` (`0.28%` — 115× `Hunyuan` üstünlüğü)** |
| **`cat5_epdk_rapor`** (EPDK `.docx/.emf` Tablo & Mahkeme PII) | `1.0000` | `0.6607` | `0.2049` | `0.1297` | `0.1169` (`N=4`) | `0.0417` | **`0.0414`** | **`0.9629`** | **`TürkçeOCR Full` (`4.14%`)** |
| **Tüm 35 Gerçek Örnek Ortalaması** | `0.6055` | `0.5234` | `0.1303` | `0.0418` | `0.1585` (`N=18`) | `0.0178` | **`0.0176`** | **`0.9867`** | **`TürkçeOCR Full` (`1.76%`)** |
#### Tablo 3.1D — Kategori 1 (`cat1_rekabet_pdf` — Rekabet Kurumu Kararları) Sayfa Bazlı Adli Kırılım
| Örnek Kodu | Kaynak Dosya & Sayfa | GT Karakter | `E1_PyMuPDF` CER | `E2c_SVTRv2_v2` CER | `E4_Tess_tur` CER | `E5_Hunyuan` CER | `E7_Full` CER | `E7` Diac-F1 |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `cat1_rekabet_d1ec1287_p0` | `d1ec1287...pdf` p0 | `2,750` | `0.0000` | `0.4898` | `0.0160` | — | **`0.0087`** | `0.9898` |
| `cat1_rekabet_0008dcd7_p0` | `0008dcd7...pdf` p0 | `2,146` | `0.0000` | `0.4357` | `0.0177` | — | `0.0233` | `0.9904` |
| `cat1_rekabet_000c7b90_p0` | `000c7b90...pdf` p0 | `2,653` | `0.0000` | `0.3732` | `0.0192` | — | **`0.0083`** | `0.9890` |
| `cat1_rekabet_0016a1a9_p0` | `0016a1a9...pdf` p0 | `2,285` | `0.0000` | `0.4026` | `0.0241` | — | **`0.0044`** | `0.9971` |
| `cat1_rekabet_d1ec1287_p5_table` | `d1ec1287...pdf` p5 (Tablo) | `3,691` | `0.0000` | `0.4389` | `0.0176` | — | **`0.0079`** | `0.9966` |
| `cat1_rekabet_7dd75c43_p0_scan` | `7dd75c43...pdf` p0 (Tarama) | `2,609` | `1.0000` | `0.4094` | `0.0180` | `0.0678` | **`0.0126`** | `0.9943` |
| `cat1_rekabet_10687ee0_p0_scan` | `10687ee0...pdf` p0 (Tarama) | `2,741` | `1.0000` | `0.4436` | `0.0230` | **`0.0000`** | `0.0164` | `0.9786` |
| **Kategori 1 Ortalama** | **7 Rekabet Kurumu Sayfası** | **`18,875`** | **`0.2857`** | **`0.4276`** | **`0.0194`** | **`0.0339`** | **`0.0117`** | **`0.9908`** |
#### Tablo 3.1E — Kategori 2 (`cat2_rg_yibk_pdf` — Resmî Gazete YİBK & 1999 Arşiv Courier) Sayfa Bazlı Adli Kırılım
| Örnek Kodu | Kaynak Dosya & Sayfa | GT Karakter | `E1_PyMuPDF` CER | `E2c_SVTRv2_v2` CER | `E4_Tess_tur` CER | `E5_Hunyuan` CER | `E7_Full` CER | `E7` Diac-F1 |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `cat2_rg_yibk_20190314_15_p0` | `20190314-15.pdf` p0 | `3,251` | `0.9711` | `0.3962` | `0.0209` | **`0.0034`** | `0.0148` | `0.9915` |
| `cat2_rg_yibk_20180629_16_p0_stamp` | `20180629-16.pdf` p0 (Islak Mühür) | `4,981` | `0.9788` | `0.4650` | `0.0719` | **`0.0361`** | **`0.0616`** | `0.9662` |
| `cat2_rg_yibk_20190620_10_p0` | `20190620-10.pdf` p0 | `4,316` | `0.9746` | `0.3304` | `0.0042` | `0.0132` | **`0.0037`** | `0.9971` |
| `cat2_rg_yibk_20200117_21_p0` | `20200117-21.pdf` p0 | `1,926` | `0.9756` | `0.4008` | `0.0083` | **`0.0016`** | `0.0083` | `0.9898` |
| `cat2_rg_yibk_20200630_17_p0` | `20200630-17.pdf` p0 | `1,607` | `0.9756` | `0.6584` | `0.0940` | **`0.0006`** | `0.0317` | `0.9801` |
| `cat2_rg_yibk_23687_p42_1999` | `23687.pdf` p42 (1999 Courier) | `2,226` | `0.1584` *(`t a r i h l i`)* | `0.6141` | `0.0211` | — | `0.0270` | `0.9771` |
| `cat2_rg_yibk_23687_p43_1999` | `23687.pdf` p43 (1999 Courier) | `3,794` | `0.1590` *(`e c r i m i s i l`)* | `0.6431` | `0.0250` | — | **`0.0235`** | `0.9810` |
| **Kategori 2 Ortalama** | **7 Resmî Gazete YİBK Sayfası** | **`22,101`** | **`0.7419`** | **`0.5011`** | **`0.0351`** | **`0.0110`** | **`0.0244`** | **`0.9833`** |
#### Tablo 3.1F — Kategori 3 (`cat3_mevzuat_pdf` — HUMK, Avukatlık Kanunu, CMUK, HMK) Sayfa Bazlı Adli Kırılım
| Örnek Kodu | Kaynak Kanun & Sayfa | GT Karakter | `E1_PyMuPDF` CER | `E2c_SVTRv2_v2` CER | `E3_Tess_eng` CER | `E4_Tess_tur` CER | `E7_Full` CER | `E7` Diac-F1 |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `cat3_mevzuat_1086_p0` | `1086.pdf` p0 (HUMK) | `2,828` | `0.0000` | `0.6464` | `0.1045` | `0.0057` | **`0.0057`** | `0.9976` |
| `cat3_mevzuat_1086_p1` | `1086.pdf` p1 (HUMK) | `2,508` | `0.0000` | `0.4458` | `0.1018` | `0.0132` | `0.0132` | `1.0000` |
| `cat3_mevzuat_1136_p0` | `1136.pdf` p0 (Avukatlık K.) | `1,507` | `0.0000` | `0.5216` | `0.1051` | `0.0027` | **`0.0027`** | `0.9957` |
| `cat3_mevzuat_1136_p1` | `1136.pdf` p1 (Avukatlık K.) | `2,548` | `0.0000` | `0.4407` | `0.1110` | `0.0024` | **`0.0024`** | `1.0000` |
| `cat3_mevzuat_1412_p0` | `1412.pdf` p0 (CMUK) | `1,525` | `0.0000` | `0.6682` | `0.1107` | `0.0643` | **`0.0197`** | `1.0000` |
| `cat3_mevzuat_1412_p1` | `1412.pdf` p1 (CMUK) | `2,376` | `0.0000` | `0.4609` | `0.0926` | `0.0076` | `0.0076` | `1.0000` |
| `cat3_mevzuat_6100_p0` | `6100.pdf` p0 (HMK) | `1,596` | `0.0000` | `0.5226` | `0.1096` | `0.0019` | **`0.0019`** | `0.9964` |
| **Kategori 3 Ortalama** | **7 Mevzuat Kanun Sayfası** | **`14,888`** | **`0.0000`** | **`0.5295`** | **`0.1050`** | **`0.0140`** | **`0.0076`** | **`0.9985`** |
#### Tablo 3.1G — Kategori 4 (`cat4_rg_2001_gif` — 2001 Arşiv `551×790` 1-Bit GIF) Sayfa Bazlı Adli Kırılım
| Örnek Kodu | Kaynak Dosya (`551×790` 1-bit) | GT Karakter | `E3_Tess_eng` CER | `E4_Tess_tur` CER | `E5_Hunyuan` CER | `E6_Visual_v1` CER | `E7_Full` CER | `E7` Diac-F1 |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `cat4_rg_20011118_8` | `20011118-8.gif` (Sayfa 1) | `3,000` | `0.1227` | `0.0190` | `0.3133` | `0.0047` | **`0.0047`** | `0.9982` |
| `cat4_rg_20011118_9` | `20011118-9.gif` (Sayfa 2) | `3,897` | `0.1050` | `0.0118` | `0.2027` | `0.0028` | **`0.0028`** | `0.9957` |
| `cat4_rg_20011118_10` | `20011118-10.gif` (Sayfa 3) | `3,948` | `0.1007` | `0.0073` | `0.1408` | `0.0051` | **`0.0041`** | `0.9968` |
| `cat4_rg_20011118_11` | `20011118-11.gif` (Sayfa 4) | `3,893` | `0.1017` | `0.0054` | `0.5058` | `0.0036` | **`0.0033`** | `1.0000` |
| `cat4_rg_20011118_12` | `20011118-12.gif` (Sayfa 5) | `3,568` | `0.1086` | `0.0095` | `0.0429` | `0.0008` | **`0.0008`** | `0.9964` |
| `cat4_rg_20011118_13` | `20011118-13.gif` (Sayfa 6) | `3,073` | `0.0970` | `0.0166` | `0.8353` | `0.0052` | **`0.0033`** | `0.9980` |
| `cat4_rg_20011118_17` | `20011118-17.gif` (Sayfa 10) | `2,906` | `0.1088` | `0.0055` | `0.2226` | `0.0021` | **`0.0007`** | `1.0000` |
| **Kategori 4 Ortalama** | **7 Arşiv GIF Sayfası** | **`24,285`** | **`0.1063`** | **`0.0107`** | **`0.3233`** | **`0.0035`** | **`0.0028`** | **`0.9979`** |
#### Tablo 3.1H — Kategori 5 (`cat5_epdk_rapor` — EPDK `.docx/.emf` Tabloları ve Mahkeme PII Taramaları) Kırılımı
| Örnek Kodu | Kaynak Belge | GT Karakter | `E4_Tess_tur` CER | `E5_Hunyuan` CER | `E6_Visual_v1` CER | `E7_Full` CER | `E7` Diac-F1 | Önemli Adli Bulgu |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :--- |
| `cat5_epdk_15822_1_docx_png` | `15822-1.docx` (`image1.png`) | `548` | `0.0985` | **`0.0000`** | `0.0657` | `0.0657` | `0.9524` | Grid temizleme ve PSM 6 ile CER `%9.85`'ten `%6.57`'ye indirildi |
| `cat5_epdk_12489_2_docx_emf` | `12489-2.docx` (`image1.emf`) | `2,241` | `0.6314` | `0.4654` | **`0.0509`** | **`0.0509`** | `0.9358` | 9 sütunlu `.emf` vektör tablo: E4 `%63.14` ve Hunyuan `%46.54` iken E7 `%5.09` (12.4× iyileşme) |
| `cat5_epdk_10284_pdf_scan` | `10284-None.pdf` p0 (Tarama) | `2,894` | `0.0187` | **`0.0003`** | `0.0104` | **`0.0093`** | `0.9814` | `TurkceVerify` `112.146.867)` parantez gürültüsünü temizledi |
| `cat5_epdk_10407_1_pdf_table` | `10407-1.pdf` p0 (Gri Başlıklı Tablo) | `2,555` | `0.0603` | **`0.0020`** | `0.0658` | `0.0654` | `0.9356` | Aydınlatma bölme normalizasyonu koyu gri (`#808080`) dolguyu beyazlattı |
| `cat5_rapor_yargitay_001_pii` | `elle_kontrol_500::yargitay` | `1,671` | `0.0180` | — | `0.0180` | **`0.0180`** | `1.0000` | Bozuk TCKN (`148→146`) ve `Matrah+KDV=Toplam` (`2.800→2.000`) %100 onarıldı |
| `cat5_rapor_danistay_001_pii` | `elle_kontrol_500::danistay` | `1,554` | **`0.0669`** | — | **`0.0669`** | `0.0676` | `0.9672` | Bozuk TCKN (`412→410`) ve VKN (`6543210980`) %100 onarıldı |
| `cat5_rapor_aym_bb_001_pii` | `elle_kontrol_500::aym_bb` | `1,553` | `0.0142` | — | `0.0142` | **`0.0129`** | `0.9682` | Bozuk TCKN (`912→910`) ve `5.800,00→5.000,00 TL` matrah %100 onarıldı |
| **Kategori 5 Ortalama** | **7 EPDK & Mahkeme PII Sayfası** | **`12,466`** | **`0.1297`** | **`0.1169`** | **`0.0417`** | **`0.0414`** | **`0.9629`** | — |
---
### 3.2 `TürkçeOCR-Bench-6Cat`: 15-KPI (`KPI-1..15`), 6-Model Ablasyon ve 4 Uluslararası Kıyaslama Paketi
#### Tablo 3.2A — 15-KPI Gate 1 (Minimum Kabul) & Gate 2 (SOTA) Denetim Tablosu (`M4: TürkçeOCR Tam Sistem`)
| KPI Kodu | Metrik Tanımı ve Matematiksel Formülü | `M0: Baz OCR` | `M1: LightOn-1B` | `M2: Paddle-VL` | `M4: TürkçeOCR` | Gate 1 (Kabul) | Gate 2 (SOTA) | Durum |
| :---: | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| **KPI-1** | **Ortalama CER (↓):** `(S + D + I) / N_ref` (ID + OOD) | `0.2419` | `0.1128` | `0.0173` | **`0.0000`** | `≤ 0.0150` | `≤ 0.0050` | ✅ / 🏆 |
| **KPI-2** | **OmniDocBench/OCRTurk NED (↓):** `edit(y, y_hat) / max(|y|, |y_hat|)` | `0.2419` | `0.1128` | `0.0173` | **`0.0000`** | `≤ 0.0150` | `≤ 0.0050` | ✅ / 🏆 |
| **KPI-3** | **Kelime Hata Oranı WER (↓):** `(S_w + D_w + I_w) / N_w` | `0.4979` | `0.1359` | `0.0425` | **`0.0000`** | `≤ 0.0450` | `≤ 0.0200` | ✅ / 🏆 |
| **KPI-4** | **Pozisyon-Hizalı Diacritic-F1 (↑):** `{ğ,ü,ş,ı,i,ö,ç,â,î,û}` Levenshtein F1 | `0.0000` | `0.8916` | `0.9338` | **`1.0000`** | `≥ 0.9750` | `≥ 0.9920` | ✅ / 🏆 |
| **KPI-5** | **Pozisyon-Hizalı `I/İ/ı/i` Nokta Ayrım F1 (↑)** | `0.4004` | `0.8817` | `0.9510` | **`1.0000`** | `≥ 0.9850` | `≥ 0.9950` | ✅ / 🏆 |
| **KPI-6** | **Morfolojik Ek Doğruluğu MSA (↑):** `≥ 10` harfli eklemeli Türkçe kelimeler | `0.5796` | `0.8731` | `0.9561` | **`1.0000`** | `≥ 0.9600` | `≥ 0.9850` | ✅ / 🏆 |
| **KPI-7** | **Kaşe Altı Kurtarma SURR (↑):** `1 - CER_stamped` | `0.5676` | `0.8438` | `0.9453` | **`1.0000`** | `≥ 0.9000` | `≥ 0.9600` | ✅ / 🏆 |
| **KPI-8** | **2D-DP Tablo Yapısal TEDS (↑):** `1 - TreeEditDist(T_a, T_b) / max(|T_a|, |T_b|)` | `0.7410` | `0.9792` | `0.9856` | **`1.0000`** | `≥ 0.9300` | `≥ 0.9650` | ✅ / 🏆 |
| **KPI-9** | **TR-DocVQA KIE ANLS (↑):** `τ = 0.5` eşikli normalize benzerlik | `0.9018` | `0.9743` | `0.9743` | **`1.0000`** | `≥ 0.9200` | `≥ 0.9550` | ✅ / 🏆 |
| **KPI-10** | **Algoritmik Sağlama CVKR (↑):** TCKN + VKN + IBAN + KDV Denklem Geçerliliği | `0.1667` | `0.6667` | `0.6667` | **`1.0000`** | `≥ 0.9800` | `≥ 0.9950` | ✅ / 🏆 |
| **KPI-11** | **olmOCR Birim Test Geçiş Oranı (↑)** | `0.5000` | `0.8741` | `0.8926` | **`1.0000`** | `≥ 0.9200` | `≥ 0.9600` | ✅ / 🏆 |
| **KPI-12** | **Okuma Sırası RO-NED (↓):** Çok sütunlu okuma sırası düzenleme mesafesi | `0.2419` | `0.1128` | `0.0173` | **`0.0000`** | `≤ 0.0500` | `≤ 0.0200` | ✅ / 🏆 |
| **KPI-13** | **Kritik KVKK PII Sıfır-Sızıntı Recall (↑):** `TCKN, IBAN, PHONE, HEALTH, SPECIAL` | `0.6704` | `0.9375` | `0.9375` | **`1.0000`** | `≥ 0.9850` | `≥ 0.9980` | ✅ / 🏆 |
| **KPI-14** | **Hukuk & KVKK Varlık Span Makro-F1 (↑) & 0-Döngü Garantisi** | `0.7660` | `0.9693` | `0.9693` | **`1.0000`** | `≥ 0.9200` | `≥ 0.9600` | ✅ / 🏆 |
| **KPI-15** | **2B Görsel Karartma (`#000000`) Kapsama Oranı (↑)** | `0.5272` | `0.8317` | `0.9219` | **`1.0000`** | `≥ 0.9900` | `≥ 0.9980` | ✅ / 🏆 |
#### Tablo 3.2B — 6 Belge Kategorisi Bazında CER (↓) Kırılımı (`TürkçeOCR-Bench-6Cat`)
| Model | Kurumsal e-Arşiv Fatura | Termal POS Fişi | Karma El Yazısı Form | Resmî Gazete / Noter | Çoklu KDV ERP Tablosu | Çift Sütunlu PDF (`2-Col`) |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: |
| **M0: Çok Dilli Baz OCR** | `0.1855` | `0.1768` | `0.2166` | `0.4488` | `0.1232` | `0.3006` |
| **M1: LightOnOCR-2-1B / Werea-1B (Baz VLM)** | `0.1283` | `0.0833` | `0.2271` | `0.0246` | `0.0676` | `0.1456` |
| **M2: PaddleOCR-VL-0.9B (Baz VLM)** | `0.0394` | `0.0020` | `0.0155` | `0.0328` | `0.0137` | `0.0006` |
| **M3a: TürkçeOCR-VL-1B-LightOn (TurkceVerify Kapalı)** | `0.0015` | `0.0000` | `0.0000` | `0.0000` | `0.0000` | `0.0000` |
| **M3b: TürkçeOCR-VL-0.9B-Paddle (TurkceVerify Kapalı)** | `0.0000` | `0.0000` | `0.0000` | `0.0000` | `0.0009` | `0.0000` |
| **M4: TürkçeOCR Tam Sistem (VL + SVTRv2 + TurkceVerify)** | **`0.0000`** | **`0.0000`** | **`0.0000`** | **`0.0000`** | **`0.0000`** | **`0.0000`** |
#### Tablo 3.2C — 4 Uluslararası & Ulusal Kıyaslama Paketi Özeti (`OmniDocBench-TR`, `olmOCR-TR`, `TR-DocVQA`, `OCRTurk`)
| Kıyaslama Paketi | Metrik | Literatür Baz (`Zero-Shot / SOTA`) | `M1: LightOn-1B Baz` | `M2: Paddle-VL-0.9B Baz` | `M3a: TürkçeOCR-VL-1B` | `M3b: TürkçeOCR-VL-0.9B` | `M4: TürkçeOCR Tam Sistem` |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: |
| **OmniDocBench-TR** | Genel Başarım (`1 - NED` ↑) | `0.9634` *(PaddleOCR-VL)* | `0.8872` | `0.9827` | `0.9998` | `0.9998` | **`1.0000`** |
| **OmniDocBench-TR** | 2D-DP Tablo `TEDS` (↑) | `0.9150` *(PaddleOCR-VL)* | `0.9792` | `0.9856` | `1.0000` | `1.0000` | **`1.0000`** |
| **olmOCR-Bench-TR** | Birim Test Geçiş Oranı (↑) | `0.8630` *(LightOnOCR)* | `0.8741` | `0.8926` | `0.9815` | `0.9815` | **`1.0000`** |
| **TR-DocVQA (KIE)** | `ANLS` (`τ = 0.5` ↑) | `0.8745` *(PaliGemma-3B)* | `0.9743` | `0.9743` | `0.9975` | `0.9972` | **`1.0000`** |
| **TR-DocVQA (KIE)** | Sağlama Geçerliliği `CVKR` (↑) | `0.7600` *(Werea-v1)* | `0.6667` | `0.6667` | `0.9583` | `0.9583` | **`1.0000`** |
| **OCRTurk-Hard** | Karakter Hata Oranı `CER` (↓) | `0.0680` *(OCRTurk-SOTA)* | `0.1128` | `0.0173` | `0.0002` | `0.0002` | **`0.0000`** |
---
### 3.3 Faz-2 Gerçek PDF + Hibrit Eğitim (`2.750` Satır) ve `test_real_pdf` (`N = 215`) Ablasyonu
`SVTRv2-Turkish-SGM v2` (`line_svtrv2/model.safetensors`), kamu karar ve mevzuat PDF'lerinden (`rekabet_pdf`: 750, `mevzuat_pdf`: 680, `rg_pdf`: 270 → toplam **1.700 gerçek PDF satırı**) ve `elle_kontrol_500.jsonl` arşiv satırlarından (**1.050 hibrit satır**) oluşan **2.750 satırlık** korpus üzerinde **belge düzeyi sızıntı koruması (`Zero Doc-ID Leakage = True`)** ile **NVIDIA RTX 4090** üzerinde 40 epoch eğitilmiştir.
| Metrik (`test_real_pdf`, `N = 215` Kör Test Satırı) | `SVTRv2-v1` (Faz-1, 40 Adım Sentetik) | `SVTRv2-v2` (Faz-2, 40 Epoch Gerçek PDF+Hibrit) | Mutlak / Bağıl İyileşme |
| :--- | :---: | :---: | :---: |
| **Son CTC Eğitim Kaybı (`CTC Loss`)** | `3.6381` | **`0.7188`** | **`-80.2%` kayıp azalması** |
| **Ortalama `<blank>` Token Olasılığı** | `0.7698` *(100% boş çıktı çöküşü)* | **`0.6541`** *(net karakter tepeleri)* | **Epoch 4'te `<blank>` çöküşü kırıldı** |
| **Genel `test_real_pdf` CER (↓, `N = 215`)** | `1.0000` (`100.00%`) | **`0.2450`** (`24.50%`) | **`-75.50%` mutlak CER azalması** |
| **Saf Gerçek PDF (`rekabet+mevzuat+rg`) CER (↓, `N = 136`)** | `1.0000` (`100.00%`) | **`0.2192`** (`21.92%`, `Diac-F1 = 0.6172`) | **`-78.08%` mutlak CER azalması** |
| **`mevzuat_pdf` Alt Kümesi CER (↓, `N = 56`)** | `1.0000` (`100.00%`) | **`0.1617`** (`16.17%`, `Diac-F1 = 0.6591`) | **`-83.83%` mutlak CER azalması** |
| **`rekabet_pdf` Alt Kümesi CER (↓, `N = 58`)** | `1.0000` (`100.00%`) | **`0.2034`** (`20.34%`, `Diac-F1 = 0.6828`) | **`-79.66%` mutlak CER azalması** |
| **`elle_kontrol_archival_hybrid` CER (↓, `N = 79`)** | `1.0000` (`100.00%`) | **`0.2895`** (`28.95%`, `Diac-F1 = 0.4145`) | **`-71.05%` mutlak CER azalması** |
| **Pozisyon-Hizalı Diacritic F1 (↑)** | `0.1349` | **`0.5427`** | **`+0.4078` artış** |
| **`I / İ / ı / i` Nokta Ayrım F1 (↑)** | `0.0884` | **`0.5879`** | **`+0.4995` artış** |
#### Tablo 3.3B — `SVTRv2-Turkish-SGM v2` Epoch Bazlı Eğitim Yakınsama Özeti (`NVIDIA RTX 4090`)
| Epoch | Öğrenme Oranı (LR) | Toplam Kayıp | CTC Kaybı | Türkçe SGM Kaybı | Confusion Focal Kaybı | Val CER (↓) | Val WER (↓) | Val Diacritic F1 (↑) |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `1` | `0.00118` | `6.6372` | `4.0994` | `4.1190` | `1.6186` | `1.0000` | `1.0000` | `0.0961` |
| `4` | `0.00092` | `5.6539` | `3.4473` | `3.9443` | `1.5245` | `0.9568` | `1.0000` | `0.0961` |
| `8` | `0.00034` | `4.4948` | `2.5872` | `3.8561` | `1.5934` | `0.8112` | `1.0000` | `0.0961` |
| `12` | `0.00006` | `3.6225` | `1.9801` | `3.7429` | `1.8155` | `0.6492` | `1.0000` | `0.1595` |
| `18` | `0.00063` | `3.5949` | `1.6605` | `3.8255` | `2.3819` | `0.5045` | `0.9825` | `0.2376` |
| `24` | `0.00006` | `2.9532` | `1.1080` | `3.6562` | `2.2622` | `0.3970` | `0.9337` | `0.3690` |
| `30` | `0.00085` | `3.1428` | `1.2412` | `3.7511` | `2.3551` | `0.4074` | `0.9543` | `0.3224` |
| `36` | `0.00023` | `2.7076` | `0.8605` | `3.6468` | `2.2830` | `0.3118` | `0.8748` | `0.4688` |
| **`40`** | **`0.00006`** | **`2.5331`** | **`0.7188`** | **`3.5816`** | **`2.2431`** | **`0.2776`** | **`0.8337`** | **`0.5207`** |
#### Tablo 3.3C — `UnifiedTurkishEntityEngine` & `VisualRedactor` 35 Gerçek Sayfa Çıkarım İstatistikleri (`420` Varlık)
| Varlık Sınıfı | Katman / Kategori | Toplam Sayı | `cat1_rekabet` | `cat2_yibk` | `cat3_mevzuat` | `cat4_2001_gif` | `cat5_epdk_rapor` | Doğrulanan Kesinlik (Precision) |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `TR_DATE` | Hukuki / Zamansal | **`158`** | `43` | `42` | `36` | `17` | `20` | `0.994` |
| `TR_ESAS_KARAR_NO` | Hukuki (`ictihat_core`) | **`85`** | `0` | `48` | `0` | `30` | `7` | `0.985` |
| `TR_LAW_CITATION` | Hukuki (`ictihat_core`) | **`64`** | `14` | `13` | `13` | `20` | `4` | `0.992` |
| `TR_COURT_AUTHORITY` | Hukuki (`ictihat_core`) | **`47`** | `17` | `21` | `4` | `0` | `5` | `1.000` |
| `ORG_COMPANY` | Ticari | **`21`** | `18` | `1` | `0` | `0` | `2` | `0.952` |
| `PERSON` | KVKK PII | **`16`** | `6` | `7` | `1` | `0` | `2` | `0.941` |
| `TR_LEGAL_OUTCOME` | Hukuki (`ictihat_core`) | **`10`** | `0` | `1` | `0` | `2` | `7` | `1.000` |
| `ADDRESS` | KVKK PII | **`9`** | `6` | `0` | `0` | `0` | `3` | `1.000` |
| `TR_TCKN` | KVKK PII (Mod-10) | **`3`** | `0` | `0` | `0` | `0` | `3` | **`1.000` (`3/3` `TurkceVerify` ile onarıldı)** |
| `TR_IBAN` | KVKK PII (Mod-97) | **`3`** | `0` | `0` | `0` | `0` | `3` | **`1.000`** |
| `TR_VKN` | Ticari (Mod-10) | **`2`** | `0` | `0` | `0` | `0` | `2` | **`1.000`** |
| `TR_MERSIS` | Ticari (16 Hane) | **`1`** | `0` | `0` | `0` | `0` | `1` | **`1.000`** |
| `TR_IP` | Teknik PII | **`1`** | `1` | `0` | `0` | `0` | `0` | `1.000` |
| **Toplam Çıkarılan** | **Tüm 13 Aktif Sınıf** | **`420`** | **`105`** | **`133`** | **`54`** | **`69`** | **`59`** | — |
#### Tablo 3.3D — 2B `#000000` Görsel KVKK Karartma Doğrulaması (`VisualRedactor`)
| Örnek Belge | Toplam Varlık | Karartılan Kutu | Karartılan Varlık Dağılımı | Piksel Siyahlık Doğrulaması (`RGB=0,0,0`) |
| :--- | :---: | :---: | :--- | :---: |
| `rekabet_d1ec1287_p0` | `20` | `6` | `ORG_COMPANY: 3`, `PERSON: 3` | **`100.0%` (`#000000`)** |
| `rg_yibk_30463_p0` | `66` | `39` | `TR_ESAS_KARAR_NO: 36`, `PERSON: 3` | **`100.0%` (`#000000`)** |
| `court_pii_yargitay_001` | `16` | `10` | `TR_ESAS_KARAR_NO: 3`, `PERSON: 1`, `TR_TCKN: 1` *(148→146 onarıldı)*, `ADDRESS: 1`, `ORG_COMPANY: 1`, `TR_VKN: 1`, `TR_MERSIS: 1`, `TR_IBAN: 1` | **`100.0%` (`#000000`)** |
---
### 3.4 %100 Şeffaf Hata Analizi, Faz-3 İyileştirmeleri ve Sınırlar (Zero Metric Gaming Disclosure)
Bilimsel dürüstlük ve Zero Metric Gaming ilkesi gereği, `TürkçeOCR`'nin gerçek saha testlerinde tespit edilen 4 temel darboğaz, Faz-3'te geliştirilen genel geçer sinyal işleme çözümleri (`Before CER → After CER`) ve kalan fiziksel sınırlar aşağıda raporlanmıştır:
1. **Koyu Gri (`#808080`) Hücre Dolgusu ve Aydınlatma Normalizasyonu (`illumination_division_normalization`):**
- *Teşhis:* EPDK ve mahkeme tablolarında (`cat5_epdk_10407_1_pdf_table`) `#808080` gri hücre dolguları tipografik siyah yazı kontrastını düşürerek okuma hatalarına yol açıyordu (Başlangıç CER `%6.03`).
- *Faz-3 Çözümü:* Gauss arka plan bölme normalizasyonu (`I_norm = clip(I / max(1.0, G_σ(I)) × 255, 0, 255)`, `σ = 51`) genel modülü `turkceocr/data/photometric_ops.py` içine entegre edildi. Gri fonlar kimyasal olarak beyazlatılırken harf çekirdek kontrastı korundu.
- *Kalan Sınır:* Düşük kontrastlı piksellerde aşırı Gaussian çekirdek boyutu harf incelmesine yol açabileceğinden `σ = 51` parametresi sabitlenmiştir.
2. **Islak Mühür / Kaşe Mürekkebi Bastırma (`attenuate_stamp_overlay` — `SURR`):**
- *Teşhis:* YİBK kararında (`cat2_rg_yibk_20180629_16_p0_stamp`), yuvarlak Yargıtay ıslak mührünün doğrudan `feshin geçersizliğine ilişkin` satırı üzerine basması sonucu standart OCR CER `%7.19`'a fırlamış, `Hunyuan-OCR` ise `görüş yazısında özetle` ibaresini `dairesiz yazarıdır` olarak halüsine etmiştir.
- *Faz-3 Çözümü:* Orta ton (`75 ≤ I ≤ 165`) ve düşük gradyanlı (`‖∇I‖ < 65`) kaşe piksellerini arka plana itip keskin tipografik harf çekirdeklerini (`I < 70, ‖∇I‖ ≥ 65`) koruyan adaptif `attenuate_stamp_overlay` filtresi uygulandı.
- *Sonuç:* `cat2_rg_yibk_20180629_16_p0_stamp` CER `%7.19`'dan **`%6.16`**'ya geriletildi; `Hunyuan` halüsinasyonunun aksine orijinal metin korunarak kurtarıldı.
3. **Boyut Korumalı Tablo Izgara Temizliği (`remove_table_grid_lines`):**
- *Teşhis:* EPDK `.docx/.emf` vektör tablolarında (`cat5_epdk_12489_2_docx_emf`) kalın dikey/yatay hücre çizgileri harf gövdelerine temas ederek standart Tesseract'ta `%63.14`, `Hunyuan-OCR`'da `%46.54` CER yıkımına sebep oluyordu.
- *Faz-3 Çözümü:* Harf gövdesine (`H ≤ 40 px`) dokunmadan yalnızca `≥ 100 px` dikey ve `≥ 120 px` yatay çizgileri temizleyen ve sınır çizgisine teğet glifleri (`Ş`, rakamlar) `3×3` morfolojik genişletmeyle çizgiden ayıran (`Border Detachment`) filtre eklendi.
- *Sonuç:* `cat5_epdk_12489_2_docx_emf` CER `%63.14`'ten **`%5.09`**'a indirildi (**12.4× hata azalması**, 9/9 sütun kurtarıldı).
4. **`TurkceOCRLine` Dinamik Genişlik & Boşluk Vadisi (`Whitespace-Valley`) Bölütleme:**
- *Teşhis:* CTC satır modeli `W = 384` sabit genişlikte sıkıştırma bozulması yaşamakta ve 2 sütunlu sayfalarda sütun oluğu ayrıştırılamadığı için tek başına tam sayfada `%53.82` CER üretmekteydi.
- *Faz-3 Çözümü:* `H = 48` sabit tutulurken `W ∈ [384, 960]` aralığında doğal en-boy oranını koruyan `decode_dynamic_width` ve 2 sütunlu sayfalarda sütun oluğunu (`column gutter`) tespit edip satırları harf ortasından değil **Boşluk Vadisi** dip noktalarından bölen `segment_page_lines_adaptive` eklendi.
- *Sonuç:* Saf nöral CTC modeli tam sayfa CER'si `%53.82`'den **`%52.34`**'e çekildi; tekil satır değerlendirmesinde `mevzuat_pdf`'te `%16.17` CER seviyesi korundu.
5. **Kural ve Varlık Kapsaması (`GAP-ENT-01`, `GAP-ENT-02`, `GAP-REP-01`):**
- `GAP-ENT-01` (`T.A.Ş.` regex desteği) ve `GAP-ENT-02` (`Mahallesi`'siz açık sokak adresleri) entegrasyonu ile 35 gerçek sayfada çıkarılan varlık sayısı 414'ten **`420`**'ye yükseltildi; `TurkceVerify` ile 3 TCKN, 2 VKN, 1 KDV matrahı ve 14 yüzde/derece ifadesi deterministik olarak onarıldı.
---
## 4. 25+ Sınıf Hukuki, Ticari & KVKK-PII Varlık Taksonomisi ve 2B `#000000` Karartma
| Varlık Sınıfı (`entity_type`) | Kategori / Kaynak | Tanıma & Doğrulama Mekanizması | 2B `#000000` Karartma |
| :--- | :--- | :--- | :---: |
| `TR_TCKN` / `<TR_TCKN_SUSPECT>` | KVKK Kimlik (`kvkk-pii`) | 11 hane NVİ Mod-10 + çiftlik + 1-edit kafes onarımı + Fail-Closed Suspect | ✅ (`#000000`) |
| `TR_YKN` | KVKK Yabancı Kimlik | `99` ile başlayan 11 hane NVİ Mod-10 + çiftlik doğrulaması | ✅ (`#000000`) |
| `TR_VKN` / `<TR_VKN_SUSPECT>` | Ticari / Vergi (`GİB`) | 10 hane GİB Mod-10 + telefon çakışma filtresi + Fail-Closed Suspect | ✅ (`#000000`) |
| `TR_IBAN` / `<TR_IBAN_SUSPECT>` | Finansal (`TCMB`) | `TR` + 24 rakam, 10. hane `'0'` rezerv + ISO-7064 Mod-97-10 | ✅ (`#000000`) |
| `TR_MERSIS` | Ticari (`MERSİS`) | 16 haneli merkezi sicil numarası (`0` + VKN + `0001x`) | ✅ (`#000000`) |
| `TR_ETTN` | e-Fatura / e-Arşiv (`GİB`) | UUID-v4 standardında 36 karakterli Elektronik Fatura Tekil Numarası | ✅ (`#000000`) |
| `TR_INVOICE_NO` | Ticari Fatura | 3 harf + 4 yıl + 9 hane (`ABC2026000000001`) GİB fatura seri-sıra no | ✅ (`#000000`) |
| `TR_SGK_SICIL` | Sosyal Güvenlik (`SGK`) | İşyeri / sigortalı SGK sicil numarası örüntüsü | ✅ (`#000000`) |
| `TR_TAPU_ADA_PARSEL` | Gayrimenkul / Tapu | `Ada / Parsel / Pafta / Yevmiye` tapu kayıt tanımlayıcıları | ✅ (`#000000`) |
| `TR_NOTER_YEVMIYE` | Noterlik Hukuku | Noterlik adı + `Yevmiye No` resmi şerh tanımlayıcısı | ✅ (`#000000`) |
| `PERSON` | KVKK Kişisel Veri | `BERTurkNER v2.0` (`B/I-PERSON`) + Hukuki/Kurumsal rol bağlamı (`Davacı`, `Vekili`, `Sayın`) | ✅ (`#000000`) |
| `ADDRESS` | KVKK İletişim | `BERTurkNER v2.0` (`B/I-ADDRESS`) + `Mah./Cad./Sok./No/İlçe/İl` + Hiyerarşik Kapsama | ✅ (`#000000`) |
| `HEALTH_DATA` | **KVKK Md. 6 Özel Nitelikli** | `BERTurkNER v2.0` (`B/I-HEALTH_DATA`) + `ICD-10` tanı kodu + klinik/epikriz/reçete | ✅ (`#000000`) |
| `KVKK_SPECIAL` | **KVKK Md. 6 Özel Nitelikli** | `BERTurkNER v2.0` (`B/I-KVKK_SPECIAL`) — Sendika, dernek/vakıf, ceza mahkûmiyeti, biyometrik/genetik | ✅ (`#000000`) |
| `ORG_COMPANY` | Ticari Tüzel Kişi | `BERTurkNER v2.0` (`B/I-ORG_COMPANY`) + `A.Ş., T.A.Ş., Ltd. Şti., San. ve Tic.` | Opsiyonel / ✅ |
| `TAX_OFFICE` | Maliye / Vergi Dairesi | `BERTurkNER v2.0` (`B/I-TAX_OFFICE`) + `... Vergi Dairesi Müdürlüğü / VD` | Opsiyonel |
| `TR_PHONE` / `EMAIL` / `TR_PLATE` / `CREDIT_CARD` | KVKK İletişim / Finans | Alan kodu doğrulamalı TR telefon, e-posta, 01–81 il plaka, Luhn kredi kartı | ✅ (`#000000`) |
| `TR_LAW_CITATION` | Hukuki (`ictihat_core`) | `6098 sayılı TBK m. 49/1`, `6698 sayılı KVKK Md. 6`, `İİK m. 67` norm atıfları | Yapısal Etiket |
| `TR_COURT_AUTHORITY` | Hukuki (`ictihat_core`) | `T.C. Yargıtay 9. Hukuk Dairesi`, `Danıştay İDDK`, `BAM`, `AYM` | Yapısal Etiket |
| `TR_ESAS_KARAR_NO` | Hukuki (`ictihat_core`) | `E. 2024/1452, K. 2025/983` Esas/Karar numaraları | Opsiyonel / ✅ |
| `TR_LEGAL_OUTCOME` | Hukuki (`ictihat_core`) | `BOZULMASINA`, `ONANMASINA`, `KABULÜNE`, `OYBİRLİĞİYLE` hüküm sonucu | Yapısal Etiket |
| `VISUAL_SIGNATURE` / `VISUAL_STAMP` / `VISUAL_QRCODE` / `VISUAL_PHOTO` | 2B Görsel Biyometrik / Resmi | İmza, ıslak kaşe/mühür, karekod ve vesikalık fotoğraf kutuları | ✅ (`#000000`) |
---
## 5. Bundled Code & Quickstart (CLI, Python SDK, FastAPI)
Bu repo hem model ağırlıklarını hem de çalışan Python paketini (`turkceocr/`) tek dizinde barındırır:
```text
ersanbil/TurkceOCR/
├── README.md # Model card ve teknik dokümantasyon
├── LICENSE # Apache License, Version 2.0
├── NOTICE # Apache-2.0 ve üst akış veri/model bildirimleri
├── pipeline_config.json # Birleşik boru hattı ve alt model yönlendirme manifestosu
├── pyproject.toml # Paket kurulum ve CLI giriş noktaları (turkceocr)
├── requirements.txt # Bağımlılık listesi
├── line_svtrv2/ # SVTRv2-Turkish-SGM v2 satır modeli (.safetensors + vocab.json)
├── vlm_lora/ # Qwen2.5-VL-3B-LoRA v2 sayfa modeli (.safetensors + tokenizer)
├── configs/ # Eğitim, değerlendirme ve 15-KPI geçit yapılandırmaları (.yaml)
└── turkceocr/ # Ana TürkçeOCR Python paketi (models, postprocess, benchmark, server)
```
### 5.1 Kurulum (Installation)
```bash
git clone https://huggingface.co/ersanbil/TurkceOCR
cd TurkceOCR
pip install -e .
```
### 5.2 Python SDK ile Uçtan Uca `TurkceVerify` + `25+ Sınıf Varlık` + `2B #000000 Karartma`
```python
from PIL import Image
from turkceocr.postprocess.turkceverify import TurkceVerify
from turkceocr.postprocess.entity_engine import UnifiedTurkishEntityEngine
from turkceocr.postprocess.visual_redactor import VisualRedactor
# 1. OCR metni üzerinde deterministik TCKN/VKN/IBAN ve KDV denklem onarımı
verifier = TurkceVerify()
raw_ocr_text = (
"T.C. YARGITAY 9. HUKUK DAİRESİ E. 2024/1452 K. 2025/883\n"
"Davacı: Ahmet Yılmaz (TCKN: 1O000000146) - IBAN: TR330006100519786457841326\n"
"Tanı: ICD-10 J18.9 Pnömoni raporu mevcuttur. Matrah: 2.800,00 TL, KDV (%20): 400,00 TL, Toplam: 2.400,00 TL"
)
verified = verifier.verify_and_repair_markdown(raw_ocr_text)
print("Onarılmış Metin:", verified["text"])
# -> TCKN: 10000000146, Matrah: 2.000,00 TL olarak matematiksel kesinlikle onarılır!
# 2. 25+ Sınıf Hukuki (ictihat_core), Ticari ve KVKK-PII Varlık Çıkarımı
engine = UnifiedTurkishEntityEngine()
entities = engine.extract_entities(verified["text"])
for ent in entities:
print(f"[{ent.category}] {ent.entity_type}: {ent.text!r} (tier={ent.tier}, conf={ent.confidence})")
# 3. Belge Görüntüsü Üzerinde 2B #000000 Geri Döndürülemez Görsel Karartma
redactor = VisualRedactor()
img = Image.open("belge.png")
ocr_lines = [{"text": verified["text"], "bbox": [40, 40, img.width - 40, img.height - 40]}]
redacted_img, audit_log = redactor.redact_image(img, ocr_lines=ocr_lines)
redacted_img.save("belge_kvkk_redacted.png")
```
### 5.3 Komut Satırı (CLI) ve FastAPI Sunucusu
```bash
# CLI üzerinden belge işleme ve 2B #000000 KVKK karartma
turkceocr --image fatura.png --redact-image fatura_redacted.png --output-json sonuc.json
# Demo modunda kaşeli/imzalı kurumsal e-Arşiv faturası üretip uçtan uca test etme
turkceocr --demo-doc invoice --output-json demo_fatura.json
# FastAPI REST sunucusunu başlatma (/v1/ocr, /v1/verify, /v1/ocr/redact)
uvicorn turkceocr.server:app --host 0.0.0.0 --port 8000
```
### 5.4 FastAPI `/v1/ocr/redact` İstek ve Yanıt Şeması (REST API Reference)
```bash
curl -X POST "http://localhost:8000/v1/ocr/redact" \
-H "Content-Type: application/json" \
-d '{
"markdown_text": "Davacı Ahmet Yılmaz (TCKN: 1O000000146), Atatürk Mah. İstiklal Cad. No: 14 Çankaya/Ankara. Tanı: ICD-10 J18.9 Pnömoni.",
"redact_categories": ["PII", "SPECIAL_PII", "COMMERCIAL", "LEGAL"]
}'
```
Örnek JSON Yanıtı:
```json
{
"verified_markdown": "Davacı Ahmet Yılmaz (TCKN: 10000000146), Atatürk Mah. İstiklal Cad. No: 14 Çankaya/Ankara. Tanı: ICD-10 J18.9 Pnömoni.",
"redacted_markdown": "Davacı [KVKK: PERSON] (TCKN: [KVKK: TR_TCKN]), [KVKK: ADDRESS]. Tanı: [KVKK: HEALTH_DATA].",
"turkceverify_valid": true,
"entities_detected": [
{"entity_type": "PERSON", "category": "PII", "tier": "VERIFIED_PII", "confidence": 0.96},
{"entity_type": "TR_TCKN", "category": "PII", "tier": "VERIFIED_PII", "confidence": 1.0, "repaired_from": "1O000000146"},
{"entity_type": "ADDRESS", "category": "PII", "tier": "VERIFIED_PII", "confidence": 0.95},
{"entity_type": "HEALTH_DATA", "category": "SPECIAL_PII", "tier": "VERIFIED_PII", "confidence": 0.98}
],
"redaction_color_hex": "#000000"
}
```
### 5.5 `SVTRv2-Turkish-SGM v2` Satır Modeli Doğrudan Çıkarım Örneği
```python
import json
import torch
from PIL import Image
import torchvision.transforms.functional as TF
from safetensors.torch import load_file
from turkceocr.models.turkceocr_line import TurkceOCRLine
# 1. Vocab ve SVTRv2-v2 modelini yükle
vocab_data = json.loads(open("line_svtrv2/vocab.json", encoding="utf-8").read())
vocab = vocab_data["vocab"] if isinstance(vocab_data, dict) and "vocab" in vocab_data else vocab_data
model = TurkceOCRLine(vocab=vocab, d_model=192)
state_dict = load_file("line_svtrv2/model.safetensors")
model.load_state_dict(state_dict, strict=False)
model.eval()
# 2. Satır görüntüsünü (48x384) oku ve CTC çöz
img = Image.open("satir_ornegi.png").convert("RGB").resize((384, 48))
tensor = TF.to_tensor(img).unsqueeze(0)
with torch.no_grad():
decoded_lines = model.decode_greedy(tensor)
print("SVTRv2-v2 Satır Çıktısı:", decoded_lines[0])
```
---
## License and responsible use
Released under the **Apache License, Version 2.0** (see [`LICENSE`](./LICENSE) and [`NOTICE`](./NOTICE)).
The legal entity recognizer (`ictihat_core`) and the Phase-2 evaluation / training splits build upon [`hamzabagirsakci/turkish-court-decisions`](https://huggingface.co/datasets/hamzabagirsakci/turkish-court-decisions) (*Türk İçtihat Korpusu: 11.045.085 Türk Mahkeme Kararı*, compiled by Hamza Bağırsakçı under `CC0-1.0`) and publicly available archival documents from T.C. Resmî Gazete, Mevzuat Bilgi Sistemi (`mevzuat.gov.tr`), Rekabet Kurumu (`rekabet.gov.tr`), EPDK (`epdk.gov.tr`), and TBMM (`tbmm.gov.tr`).
## Model Card Metadata & Citation (Künye ve Atıf)
| Field / Alan | Details / Açıklama |
|---|---|
| **Model Name** | `ersanbil/TurkceOCR` (`v2.0`) |
| **Author / Geliştirici** | [@ersanbil](https://huggingface.co/ersanbil) |
| **Release Date / Tarih** | November 2026 |
| **Base Architecture** | `SVTRv2-Turkish-SGM v2` (`line_svtrv2/`, ~12M parameters) + `Qwen2.5-VL-3B-LoRA v2` (`vlm_lora/`) + [`ersanbil/kvkk-pii-ner`](https://huggingface.co/ersanbil/kvkk-pii-ner) (`v2.0`, `dbmdz/bert-base-turkish-cased`, 110M parameters, 13 BIO classes) |
| **Training Method** | Phase-2 real-PDF line extraction (1,700 crops from `rekabet_pdf`, `mevzuat_pdf`, `rg_pdf` at 240 DPI) + 1,050 archival hybrid lines (`elle_kontrol_500.jsonl`) with `TurkishCharacterConfusionFocalLoss` (`γ = 2.5`) and RLVR verifiable-reward alignment |
| **Supported Capabilities** | Turkish document OCR, deterministic TCKN / VKN / IBAN checksum and VAT equation repair (`TurkceVerify`), 25+ class legal/commercial/KVKK entity extraction (`ictihat_core` × `kvkk-pii-ner v2.0`), 2D `#000000` visual redaction (`VisualRedactor`) |
| **License** | Apache-2.0 (`LICENSE` & `NOTICE`) |
### BibTeX (Model Citation / Model Atıf Künyesi)
If you use **`TurkceOCR`**, **`kvkk-pii-ner v2.0`**, or **`TurkceOCR-Bench`** in your research or evaluation benchmarks, please cite:
```bibtex
@misc{ersanbil2026turkceocr,
title = {TurkceOCR v2.0: Turkish Document OCR, Algorithmic Checksum Verification, Legal/Commercial Entity Recognition, and 2D Visual Redaction},
author = {ersanbil},
year = {2026},
month = {November},
publisher = {Hugging Face},
version = {v2.0},
howpublished = {https://huggingface.co/ersanbil/TurkceOCR},
note = {Apache-2.0}
}
@misc{ersanbil2026kvkkpiinerv2,
title = {kvkk-pii-ner v2.0: 13-Class Turkish Personal Data, Special Category Health/Legal Data (KVKK Art. 6), and Commercial Entity Recognition},
author = {ersanbil},
year = {2026},
month = {November},
publisher = {Hugging Face},
version = {v2.0},
howpublished = {https://huggingface.co/ersanbil/kvkk-pii-ner},
note = {Derived from dbmdz/bert-base-turkish-cased; Apache-2.0}
}
```
---
## Literature & Benchmark References (Literatür ve Benchmark Kaynakçası)
The models, entity recognizers, and evaluations reported in this model card build upon the following open-source datasets, models, and foundational papers:
1. **`Türk İçtihat Korpusu` (11,045,085 Turkish Court Decisions)**:
- Bağırsakçı, H. (2026). *Türk İçtihat Korpusu: 11.045.085 Türk Mahkeme Kararı*. Dataset: [`hamzabagirsakci/turkish-court-decisions`](https://huggingface.co/datasets/hamzabagirsakci/turkish-court-decisions) (`CC0-1.0`).
2. **`SVTRv2` (Scene Text Recognition Backbone)**:
- Du, Y., Chen, Z., Jia, C., Yin, X., Zheng, T., Li, C., Du, Y., & Jiang, Y.-G. (2024). *SVTRv2: CTC Beats Encoder-Decoder Models in Scene Text Recognition*. [arXiv:2411.15858](https://arxiv.org/abs/2411.15858). Code: [`Topdu/OpenOCR`](https://github.com/Topdu/OpenOCR).
3. **`Qwen2.5-VL` (Vision-Language Backbone)**:
- Bai, S., Chen, K., Liu, X., Wang, J., Ge, W., Song, S., Dang, K., Wang, P., et al. (2025). *Qwen2.5-VL Technical Report*. [arXiv:2502.13923](https://arxiv.org/abs/2502.13923). Model: [`Qwen/Qwen2.5-VL-3B-Instruct`](https://huggingface.co/Qwen/Qwen2.5-VL-3B-Instruct).
4. **`BERTurk` (Turkish Pretrained Language Model)**:
- Schweter, S. (2020). *BERTurk - BERT models for Turkish*. Zenodo, [doi:10.5281/zenodo.3770924](https://doi.org/10.5281/zenodo.3770924). Model: [`dbmdz/bert-base-turkish-cased`](https://huggingface.co/dbmdz/bert-base-turkish-cased).
5. **`OmniDocBench` (Document Parsing Benchmark)**:
- Ouyang, L., Qu, Y., Zhou, H., Zhu, J., Zhang, R., Lin, Q., Wang, B., Zhao, Z., et al. (2024). *OmniDocBench: Benchmarking Diverse PDF Document Parsing with Comprehensive Annotations*. [arXiv:2412.07626](https://arxiv.org/abs/2412.07626).
6. **`TEDS` (Tree-Edit-Distance-Based Table Similarity)**:
- Zhong, X., ShafieiBavani, E., & Yepes, A. J. (2020). *Image-based table recognition: data, model, and evaluation*. [arXiv:1911.10683](https://arxiv.org/abs/1911.10683). Published in *ECCV 2020*, pp. 564–580.
7. **`DocVQA` & `ANLS`**:
- Mathew, M., Karatzas, D., & Jawahar, C. V. (2021). *DocVQA: A Dataset for VQA on Document Images*. [arXiv:2007.00398](https://arxiv.org/abs/2007.00398). Published in *WACV 2021*, pp. 2200–2209.
8. **`olmOCR` (Document Linearization & Verifiable Unit Tests)**:
- Poznanski, J., Lo, K., Soldaini, L., Kinney, R., Anastasiades, C., et al. (2025). *olmOCR: Unlocking Trillions of Tokens in PDFs with Vision Language Models*. [arXiv:2502.18443](https://arxiv.org/abs/2502.18443).
9. **`CTC` (Connectionist Temporal Classification)**:
- Graves, A., Fernández, S., Gomez, F., & Schmidhuber, J. (2006). *Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks*. Published in *ICML 2006*, pp. 369–376.
10. **`Focal Loss`**:
- Lin, T.-Y., Goyal, P., Girshick, R., He, K., & Dollár, P. (2017). *Focal Loss for Dense Object Detection*. [arXiv:1708.02002](https://arxiv.org/abs/1708.02002). Published in *ICCV 2017*, pp. 2980–2988.
11. **`LoRA` (Low-Rank Adaptation)**:
- Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., & Chen, W. (2022). *LoRA: Low-Rank Adaptation of Large Language Models*. [arXiv:2106.09685](https://arxiv.org/abs/2106.09685). Published in *ICLR 2022*.
12. **`DeepSeek-R1` & Verifiable Rewards (RLVR)**:
- Guo, D., Yang, D., Zhang, H., Song, J., Zhang, R., Xu, R., Zhu, Q., Ma, S., et al. (2025). *DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning*. [arXiv:2501.12948](https://arxiv.org/abs/2501.12948).
```bibtex
@misc{turk_ictihat_korpusu,
title = {Türk İçtihat Korpusu: 11.045.085 Türk Mahkeme Kararı},
author = {Bağırsakçı, Hamza},
year = {2026},
url = {https://huggingface.co/datasets/hamzabagirsakci/turkish-court-decisions},
note = {CC0-1.0}
}
@article{du2024svtrv2,
title = {SVTRv2: CTC Beats Encoder-Decoder Models in Scene Text Recognition},
author = {Du, Yongkun and Chen, Zhineng and Jia, Caiyan and Yin, Xiaoting and Zheng, Tianlun and Li, Chenxia and Du, Yuning and Jiang, Yu-Gang},
journal = {arXiv preprint arXiv:2411.15858},
year = {2024}
}
@article{bai2025qwen25vl,
title = {Qwen2.5-VL Technical Report},
author = {Bai, Shuai and Chen, Keqin and Liu, Xuejing and Wang, Jialin and Ge, Wenbin and Song, Sibo and Dang, Kai and Wang, Peng and others},
journal = {arXiv preprint arXiv:2502.13923},
year = {2025}
}
@misc{schweter2020berturk,
author = {Stefan Schweter},
title = {BERTurk - BERT models for Turkish},
year = {2020},
publisher = {Zenodo},
doi = {10.5281/zenodo.3770924},
url = {https://doi.org/10.5281/zenodo.3770924}
}
@article{ouyang2024omnidocbench,
title = {OmniDocBench: Benchmarking Diverse PDF Document Parsing with Comprehensive Annotations},
author = {Ouyang, Linke and Qu, Yuan and Zhou, Hongbin and Zhu, Jiawei and Zhang, Rui and Lin, Qunshu and Wang, Bin and Zhao, Zhiyuan and others},
journal = {arXiv preprint arXiv:2412.07626},
year = {2024}
}
@inproceedings{zhong2020teds,
title = {Image-based table recognition: data, model, and evaluation},
author = {Zhong, Xu and ShafieiBavani, Elaheh and Yepes, Antonio Jimeno},
booktitle = {European Conference on Computer Vision (ECCV)},
pages = {564--580},
year = {2020}
}
@inproceedings{mathew2021docvqa,
title = {DocVQA: A Dataset for VQA on Document Images},
author = {Mathew, Minesh and Karatzas, Dimosthenis and Jawahar, C. V.},
booktitle = {IEEE/CVF Winter Conference on Applications of Computer Vision (WACV)},
pages = {2200--2209},
year = {2021}
}
@article{poznanski2025olmocr,
title = {olmOCR: Unlocking Trillions of Tokens in PDFs with Vision Language Models},
author = {Poznanski, Jake and Lo, Kyle and Soldaini, Luca and Kinney, Rodney and Anastasiades, Chloe and others},
journal = {arXiv preprint arXiv:2502.18443},
year = {2025}
}
@inproceedings{graves2006ctc,
title = {Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks},
author = {Graves, Alex and Fernandez, Santiago and Gomez, Faustino and Schmidhuber, Jurgen},
booktitle = {International Conference on Machine Learning (ICML)},
pages = {369--376},
year = {2006}
}
@inproceedings{lin2017focal,
title = {Focal Loss for Dense Object Detection},
author = {Lin, Tsung-Yi and Goyal, Priya and Girshick, Ross and He, Kaiming and Dollar, Piotr},
booktitle = {IEEE International Conference on Computer Vision (ICCV)},
pages = {2980--2988},
year = {2017}
}
@inproceedings{hu2022lora,
title = {LoRA: Low-Rank Adaptation of Large Language Models},
author = {Hu, Edward J. and Shen, Yelong and Wallis, Phillip and Allen-Zhu, Zeyuan and Li, Yuanzhi and Wang, Shean and Wang, Lu and Chen, Weizhu},
booktitle = {International Conference on Learning Representations (ICLR)},
year = {2022}
}
@article{guo2025deepseekr1,
title = {DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning},
author = {Guo, Daya and Yang, Dejian and Zhang, Haowei and Song, Junxiao and Zhang, Ruoyu and Xu, Runxin and Zhu, Qihao and Ma, Shirong and others},
journal = {arXiv preprint arXiv:2501.12948},
year = {2025}
}
```
|