oneocr / _archive /temp /heuristics_report.py
OneOCR Dev
OneOCR - reverse engineering complete, ONNX pipeline 53% match rate
ce847d4
"""
Weryfikacja heurystyk pipeline ONNX vs oryginał (OneOCR DLL)
=============================================================
Raport porównawczy kluczowych parametrów i heurystyk.
1. PREPROCESSING
│ Parametr │ ONNX pipeline │ Oryginał (DLL) │ Zgodność │
├──────────────────┼──────────────────────┼──────────────────────┼──────────┤
│ Detector input │ BGR mean-sub │ BGR mean-sub (BGRA) │ ✅ ~tak │
│ BGR mean values │ [102.98, 115.95, │ [102.98, 115.95, │ ✅ tak │
│ │ 122.77] │ 122.77] │ │
│ Max input size │ 800px │ zależne od opcji │ ⚠️ zbliż.│
│ Pad to multiple │ 32 │ 32 │ ✅ tak │
│ Rec input │ RGB/255, h=60 │ RGB/255, h=60 │ ✅ tak │
│ Width align │ 4 │ 4 │ ✅ tak │
2. PIXELLINK DECODER
│ Parametr │ ONNX pipeline │ Oryginał │ Zgodność │
├──────────────────┼──────────────────────┼──────────────────────┼──────────┤
│ Pixel threshold │ 0.6 │ ~0.5-0.7 (calibr.) │ ✅ ok │
│ Link threshold │ 0.5 │ ~0.5 │ ✅ ok │
│ Min area │ 100 │ ~50-200 │ ✅ ok │
│ Min height │ 6 │ ~5-8 │ ✅ ok │
│ NMS IoU │ 0.3 │ ~0.3-0.5 │ ✅ ok │
│ FPN levels │ fpn2(4), fpn3(8), │ same 3 levels │ ✅ tak │
│ │ fpn4(16) │ │ │
│ Connected comp. │ Union-Find 8-conn │ Union-Find 8-conn │ ✅ tak │
│ Box fitting │ minAreaRect │ minAreaRect equiv. │ ✅ tak │
3. CROP & PADDING
│ Parametr │ ONNX pipeline │ Oryginał │ Zgodność │
├──────────────────┼──────────────────────┼──────────────────────┼──────────┤
│ Padding ratio │ 0.4 (40% of height) │ ~30-50% expansion │ ✅ ok │
│ Horizontal pad │ 0.3 × pad │ smaller than vert │ ✅ ok │
│ Perspective xfm │ getPerspectiveTransf │ similar │ ✅ ok │
│ Border mode │ BORDER_REPLICATE │ replicate │ ✅ tak │
4. CTC DECODE
│ Parametr │ ONNX pipeline │ Oryginał │ Zgodność │
├──────────────────┼──────────────────────┼──────────────────────┼──────────┤
│ Strategy │ Greedy argmax │ Greedy (no beam) │ ✅ tak │
│ Blank handling │ collapse + remove │ same │ ✅ tak │
│ Confidence │ exp(max_logprob) │ exp(logprob) │ ✅ tak │
│ Per-word conf │ mean of char confs │ word-level output │ ⚠️ aprox │
5. LINE GROUPING
│ Parametr │ ONNX pipeline │ Oryginał │ Zgodność │
├──────────────────┼──────────────────────┼──────────────────────┼──────────┤
│ Strategy │ Y-overlap heuristic │ Internal DLL logic │ ⚠️ aprox │
│ Y overlap thresh │ 0.5 │ DLL internal │ ⚠️ aprox │
│ Sort order │ top-to-bottom, L2R │ top-to-bottom, L2R │ ✅ tak │
6. VERTICAL TEXT (NOWE)
│ Parametr │ ONNX pipeline │ Oryginał │ Zgodność │
├──────────────────┼──────────────────────┼──────────────────────┼──────────┤
│ Detection │ h > 2*w heuristic │ Vertical FPN outputs │ ⚠️ uprosz│
│ Rotation │ CCW 90° │ Internal handling │ ⚠️ aprox │
│ CJK fallback │ conf < 0.7 → try CJK│ LM model selection │ ⚠️ aprox │
PODSUMOWANIE
============
- Kluczowe parametry preprocessing (mean values, sizes, alignments) = IDENTYCZNE
- PixelLink decoder = IDENTYCZNY algorytm (Union-Find, NMS, minAreaRect)
- Crop paddng = ZBLIŻONY (40% vs 30-50% w oryginale)
- CTC decode = IDENTYCZNY (greedy, collapse, blank remove)
- Pewność per-word = PRZYBLIŻONA (mean char confs vs DLL word-level)
- Line grouping = UPROSZCZONA heurystyka (oryginał ma LineLayout model 33)
- Tekst pionowy = NOWA heurystyka (oryginał obsługuje wewnętrznie)
ZNANE RÓŻNICE
=============
1. Oryginał używa modeli LM (11-32) do weryfikacji skryptu → lepszy routing
2. Oryginał ma LineLayout (model 33) do segmentacji linii → precyzyjniejszy podział
3. Oryginał obsługuje pionowy tekst natively (detector vertical outputs)
4. Word splitting w ONNX jest proporcjonalny do znaków → oryginał ma dokładniejsze bbox
5. DLL wymaga min 50x50px → ONNX wymaga 10x10px (luźniejszy)
WYNIKI TESTÓW
=============
- image.png "ONE OCR DZIALA!" → 99.6%, 155ms ✅
- test.png (złożony) → 72.7%, 501ms — "Chapter 1: The Journey's End" 99% ✅
- test2.png (japoński) → 64.4%, 309ms — "味なんじゃ!" 95%, "わからん" 86% ✅
- test3.png (manga) → 87.0%, 271ms — "WE'LL HAVE TO" 98-99% ✅
- paragraph → 97.0% (18 words) ✅
- small_text → 92.3% ("Small" → "Smail" 86%) ⚠️
- inverted → 84.5% ("White" → "white" 65%) ⚠️
"""