#!/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 ") sys.exit(1) png = Path(sys.argv[1]) out = png.parent / f"{png.stem}_preproc.png" preprocess_for_ocr(png, out)