# /opt/docker/dev/service_finder/backend/app/services/image_processor.py import cv2 import numpy as np import logging from typing import Optional logger = logging.getLogger(__name__) class DocumentImageProcessor: """ Saját képtisztító pipeline Robot 3 OCR számára. """ @staticmethod def process_for_ocr(image_bytes: bytes) -> Optional[bytes]: if not image_bytes: return None try: nparr = np.frombuffer(image_bytes, np.uint8) img = cv2.imdecode(nparr, cv2.IMREAD_COLOR) if img is None: return None # 1. Előkészítés (Szürkeárnyalat + Felskálázás) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) if gray.shape[1] < 1200: gray = cv2.resize(gray, None, fx=2.0, fy=2.0, interpolation=cv2.INTER_CUBIC) # 2. Kontraszt dúsítás (CLAHE) clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)) contrast = clahe.apply(gray) # 3. Adaptív Binarizálás (Fekete-fehér szöveg kiemelés) blur = cv2.GaussianBlur(contrast, (3, 3), 0) thresh = cv2.adaptiveThreshold( blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2 ) success, encoded_image = cv2.imencode('.png', thresh) return encoded_image.tobytes() if success else None except Exception as e: logger.error(f"OpenCV Feldolgozási hiba: {e}") return None