champ-chatbot / classes /ocr_reader.py
qyle's picture
deployment
389d6f7 verified
import logging
from typing import Optional
import cv2
import easyocr
import torch
logger = logging.getLogger("uvicorn")
class OCRReader:
_instance: Optional["OCRReader"] = None
ocr_reader: easyocr.Reader
def __new__(cls):
if cls._instance is None:
logger.info("Loading the OCR model into memory...")
cls._instance = super(OCRReader, cls).__new__(cls)
cls._instance.ocr_reader = easyocr.Reader(
["en", "fr"], gpu=torch.cuda.is_available()
)
return cls._instance
def read_text(self, img: cv2.typing.MatLike | None):
res = self.ocr_reader.readtext(img, detail=0)
if not isinstance(res, list):
return None
return " ".join([str(item) for item in res])