#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Предобработка PNG для улучшения OCR размерных чисел.

Алгоритм:
1. CLAHE — локальное повышение контраста
2. Unsharp mask — повышение резкости
3. Инвертирование (опционально для некоторых OCR)
4. Масштабирование x2 (если исходное маленькое)
"""

import sys
from pathlib import Path
import cv2
import numpy as np


def preprocess_for_ocr(img_path: Path, out_path: Path, scale: float = 2.0):
    img = cv2.imread(str(img_path), cv2.IMREAD_GRAYSCALE)
    if img is None:
        raise RuntimeError(f"Cannot load {img_path}")
    
    # Масштабирование
    if scale != 1.0:
        h, w = img.shape
        img = cv2.resize(img, (int(w*scale), int(h*scale)), interpolation=cv2.INTER_CUBIC)
    
    # CLAHE (локальный контраст)
    clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
    img = clahe.apply(img)
    
    # Unsharp mask
    gaussian = cv2.GaussianBlur(img, (0,0), 3)
    img = cv2.addWeighted(img, 1.5, gaussian, -0.5, 0)
    
    # Нормализация
    img = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX)
    
    cv2.imwrite(str(out_path), img)
    print(f"[OK] Предобработка сохранена: {out_path}")


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python preprocess_for_ocr.py <png>")
        sys.exit(1)
    
    png = Path(sys.argv[1])
    out = png.parent / f"{png.stem}_preproc.png"
    preprocess_for_ocr(png, out)
