""" 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%) ⚠️ """