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加载慢的问题~~~