Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| _reader = None | |
| def _get_reader(): | |
| global _reader | |
| if _reader is None: | |
| try: | |
| import easyocr | |
| _reader = easyocr.Reader(["en"], gpu=False) | |
| except ImportError: | |
| raise RuntimeError( | |
| "EasyOCR is not installed. Install it with: pip install easyocr" | |
| ) | |
| except Exception as e: | |
| raise RuntimeError( | |
| f"Failed to load EasyOCR (possible OOM on free tier): {e}" | |
| ) | |
| return _reader | |
| def handle_image_input(image_path: str) -> dict: | |
| reader = _get_reader() | |
| results = reader.readtext(image_path) | |
| if not results: | |
| return { | |
| "text": "", | |
| "confidence": 0.0, | |
| "input_type": "image", | |
| "bboxes": [], | |
| } | |
| lines: list[str] = [] | |
| confidences: list[float] = [] | |
| bboxes: list[list] = [] | |
| for bbox, text, conf in results: | |
| lines.append(text) | |
| confidences.append(float(conf)) | |
| bboxes.append(bbox) | |
| avg_confidence = sum(confidences) / len(confidences) if confidences else 0.0 | |
| return { | |
| "text": " ".join(lines), | |
| "confidence": round(float(avg_confidence), 3), | |
| "input_type": "image", | |
| "bboxes": [], | |
| } | |