Spaces:
Runtime error
Runtime error
| import cv2 | |
| import numpy as np | |
| import fitz # PyMuPDF | |
| class ImagePreprocessor: | |
| def enhance(file_path: str) -> tuple[np.ndarray, np.ndarray]: | |
| if file_path.lower().endswith('.pdf'): | |
| pdf_document = fitz.open(file_path) | |
| page = pdf_document.load_page(0) | |
| pix = page.get_pixmap(dpi=200) | |
| img = np.frombuffer(pix.samples, dtype=np.uint8).reshape(pix.height, pix.width, pix.n) | |
| if pix.n == 4: img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR) | |
| elif pix.n == 3: img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) | |
| elif pix.n == 1: img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) | |
| pdf_document.close() | |
| else: | |
| img = cv2.imread(file_path) | |
| if img is None: | |
| raise ValueError(f"Could not load image: {file_path}") | |
| h, w = img.shape[:2] | |
| if h > w: | |
| img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE) | |
| # Already at high resolution, upscaling commented out to reduce latency and bandwidth | |
| # img = cv2.resize(img, None, fx=1.5, fy=1.5, interpolation=cv2.INTER_CUBIC) | |
| # CRITICAL FIX: Gentle Contrast Enhancement instead of harsh B&W Thresholding | |
| # This prevents faded printed text from disappearing. | |
| lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) | |
| l, a, b = cv2.split(lab) | |
| clahe = cv2.createCLAHE(clipLimit=2.5, tileGridSize=(8,8)) | |
| cl = clahe.apply(l) | |
| limg = cv2.merge((cl,a,b)) | |
| enhanced_bgr = cv2.cvtColor(limg, cv2.COLOR_LAB2BGR) | |
| return enhanced_bgr, img |