EasyOCR是一个基于Python的开源光学字符识别(OCR)工具,支持80多种语言,包括中文、英文等,适用于文档处理、自动化测试等多种场景。

不过,由于easyocr需要加载大模型所以在cpu_mode下加载会特别慢... 那么该如何解决呢?

由于,博主的项目除了加载easyocr之外,还有其它很多需要加载或初始化的内容,所以博主就想到让easyocr在后台加载,同时进行其它加载和初始化的方式... 这样,两个任务同时进行,速度就快了...

首先,需要创建一个OCRManager的class

# OCR Manager class
class OCRManager:

    def __init__(self):

        self.reader = None
        self.loaded_event = threading.Event()
        self.error = None

    def load_in_background(self, langs=None):

        if langs is None:
            langs = ['en']
        #endif

        try:

            self.reader = easyocr.Reader(langs, gpu=False)    # init EasyOCR Reader(CPU mode)
            self.loaded_event.set()

        except Exception as e:

            self.error = e

        #end try

#end class

然后在主程序中先将class加载到background,然后执行自已的其它代码,并在检查加载完成后才可始ocr的动作,代码如下:

# =============================================================================
#                               Main program
# =============================================================================

# create EasyOCR Manager
ocr_manager = OCRManager()

# Load OCR models in a background thread
loader_thread = threading.Thread(target=ocr_manager.load_in_background, daemon=True)
loader_thread.start()

# any codes add here
# ...


# Wait for model loading
while not ocr_manager.loaded_event.is_set():
    win32api.Sleep(100)
# end while

# Check if model loaded successfully
if ocr_manager.error:
    print(f"EasyOCR load failed ~ {ocr_manager.error}")
    sys.exit(0)
# endif

# test code
ocr_result = ocr_manager.reader.readtext("test.png", allowlist="0123456789", detail=0 )
print(ocr_result)

如上,我们就通过background加载的方式解决了easyocr在cpu_mode加载慢的问题~~~

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐