예제 #1
0
class OCRServicer(RecognizeTextServicer):
    MODES = {
        Image.PAGE: PSM.AUTO_OSD,
        Image.WORD: PSM.SINGLE_WORD,
        Image.CHARACTER: PSM.SINGLE_CHAR
    }

    def __init__(self):
        self.lock = RLock()
        self.ocr = OCR()

    def Recognize(self, image, context):
        # acquired = self.lock.acquire(blocking=False)
        # if acquired is False:
        #     context.set_code(grpc.StatusCode.RESOURCE_EXHAUSTED)
        #     context.set_details('OCR engine is busy.')
        #     return Text()

        try:
            mode = self.MODES.get(image.mode, PSM.AUTO_OSD)
            text = self.ocr.extract_text(image.data,
                                         mode=mode,
                                         languages=image.languages)
            return Text(text=text)
        except Exception as exc:
            log.exception("Failed OCR.")
            self.ocr.clear_engine()
            context.abort(grpc.StatusCode.INTERNAL, str(exc))
예제 #2
0
class OCRServicer(RecognizeTextServicer):
    MODES = {
        Image.PAGE: PSM.AUTO_OSD,
        Image.WORD: PSM.SINGLE_WORD,
        Image.CHARACTER: PSM.SINGLE_CHAR
    }

    def __init__(self):
        self.lock = RLock()
        self.ocr = OCR()

    def Recognize(self, image, context):
        acquired = self.lock.acquire(blocking=False)
        if acquired is False:
            context.set_code(grpc.StatusCode.RESOURCE_EXHAUSTED)
            context.set_details('Engine is busy.')
            return Text()

        try:
            mode = self.MODES.get(image.mode, PSM.AUTO_OSD)
            text = self.ocr.extract_text(image.data,
                                         mode=mode,
                                         languages=image.languages)
            return Text(text=text)
        finally:
            self.lock.release()
예제 #3
0
class OCRServicer(RecognizeTextServicer):

    MODES = {
        Image.PAGE: PSM.AUTO_OSD,
        Image.WORD: PSM.SINGLE_WORD,
        Image.CHARACTER: PSM.SINGLE_CHAR
    }

    def __init__(self):
        self.recognizer = OCR()

    def Recognize(self, image, context):
        mode = self.MODES.get(image.mode, PSM.AUTO_OSD)
        text = self.recognizer.extract_text(image.data,
                                            languages=image.languages,
                                            mode=mode)
        return Text(text=text)
예제 #4
0
 def __init__(self):
     self.lock = RLock()
     self.ocr = OCR()
예제 #5
0
 def test_ocr(self):
     ocr = OCR()
     with open(os.path.join(FIXTURES, 'mfsa.png'), 'rb') as fh:
         data = fh.read()
     text = ocr.extract_text(data, ['en'])
     assert 'THAMES RIVER TRADITIONAL' in text, text
예제 #6
0
 def test_ocr_russian(self):
     ocr = OCR()
     with open(os.path.join(FIXTURES, 'russian.png'), 'rb') as fh:
         data = fh.read()
     text = ocr.extract_text(data, ['ru'])
     assert 'которая извлечена из памяти' in text, text
예제 #7
0
 def __init__(self):
     self.recognizer = OCR()