CoolFace
Modelpublic

AryanS17/Computer-Vision-Accessibility-Tool

sourceHugging Faceapache-2.0updated 1mo agoView on Hugging Face
1likes
ocr_reader.py45 linesDownload Raw Back to root
1"""2ocr_reader.py3-------------4Wraps EasyOCR so the app can read signs, menus, room numbers, etc.5Loaded lazily/cached because EasyOCR's model init is slow (~2-5s) and6should only happen once per session, not once per frame.7"""8 9from typing import List, Tuple10import numpy as np11import easyocr12 13 14class TextReader:15    def __init__(self, languages: List[str] = None, gpu: bool = False):16        """17        languages: EasyOCR language codes, e.g. ['en'] or ['en', 'fr'].18        gpu: set True if a CUDA GPU is available -- big speedup for OCR.19        """20        self.languages = languages or ["en"]21        self.reader = easyocr.Reader(self.languages, gpu=gpu)22 23    def read_text(self, frame: np.ndarray, min_confidence: float = 0.4) -> List[Tuple[str, float]]:24        """25        Runs OCR on a single frame.26        Returns a list of (text, confidence) tuples, left-to-right / top-to-bottom27        in the order EasyOCR detects them, filtered by min_confidence.28        """29        raw_results = self.reader.readtext(frame)  # [(bbox, text, confidence), ...]30 31        filtered = []32        for _, text, confidence in raw_results:33            cleaned = text.strip()34            if cleaned and confidence >= min_confidence:35                filtered.append((cleaned, confidence))36 37        return filtered38 39    def read_text_as_sentence(self, frame: np.ndarray, min_confidence: float = 0.4) -> str:40        """Convenience method: joins all detected text fragments into one spoken sentence."""41        results = self.read_text(frame, min_confidence)42        if not results:43            return ""44        return ". ".join(text for text, _ in results)45