巧妙解决easyocr在cpu_mode下加载慢的问题~
文章摘要:针对EasyOCR在CPU模式下加载速度慢的问题,作者提出通过后台线程加载的方式优化初始化过程。具体实现方法是创建一个OCRManager类,在后台线程中初始化EasyOCR模型,同时主线程可以执行其他任务。当需要OCR识别时,检查模型是否加载完成即可。这种方法实现了模型加载与其他初始化任务并行执行,有效提升了整体运行效率。该方案用Python实现,适用于CPU运行环境下的OCR应用场景
·
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加载慢的问题~~~
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)