File size: 811 Bytes
389d6f7
f80f41e
 
 
 
 
389d6f7
 
f80f41e
 
 
 
 
 
 
389d6f7
f80f41e
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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])