You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于EasyOCR无法兼容Python multiprocessing,仅适配torch多进程的咨询

EasyOCR与Python标准multiprocessing不兼容,但torch.multiprocessing可正常运行的原因及解决办法

核心原因

EasyOCR的Reader实例本质是基于PyTorch构建的模型对象,依赖PyTorch的底层张量、模型参数等结构:

  • Python标准multiprocessing默认使用原生pickle序列化跨进程传递的对象,但pickle无法正确处理PyTorch模型的底层C指针、共享内存引用等复杂结构,导致模型实例在子进程中无法正常使用。
  • torch.multiprocessing是PyTorch针对自身场景扩展的多进程库,它优化了对象序列化机制(支持PyTorch专属的序列化方式),还能通过共享内存减少数据拷贝,因此可以正确传递Reader实例。

注意:你提供的「可运行代码」存在误区

你给出的torch多进程代码里,target=ocr_test(reader, img)是直接调用了函数,并把函数返回值(None)传给了target参数,实际并没有启用多进程执行。正确的写法应该是:

from torch.multiprocessing import Process
import easyocr
import cv2

def ocr_test(reader, img):
    result = reader.readtext(img, detail = 0)
    print(result)

if __name__ == '__main__':
    reader = easyocr.Reader(['en'], gpu=False)
    img = cv2.imread('./datasets/easyocrtest/sampleocrimage.png')
    # 正确传递函数和参数
    p = Process(target=ocr_test, args=(reader, img))
    p.start()
    p.join()

修正后依然可以正常运行,这才是torch多进程适配PyTorch对象的正确用法。

解决办法

方案1:使用torch.multiprocessing(推荐)

直接用torch.multiprocessing替代标准库,它天然适配EasyOCR的PyTorch依赖,不需要额外修改代码结构,只要保证参数传递方式正确即可。

方案2:基于标准multiprocessing的兼容写法

如果必须使用Python标准multiprocessing,不要在主进程创建Reader实例,而是在子进程内部初始化模型,避免跨进程传递模型对象:

import multiprocessing as mp
import easyocr
import cv2

def ocr_test(img_path):  
    # 子进程内单独初始化Reader
    reader = easyocr.Reader(['en'], gpu=False)
    img = cv2.imread(img_path)
    result = reader.readtext(img, detail=0)
    print(result)

if __name__ == '__main__':
    img_path = './datasets/easyocrtest/sampleocrimage.png'
    p = mp.Process(target=ocr_test, args=(img_path,))
    p.start()
    p.join()

这种方式虽然会增加每个子进程的模型加载开销,但完全规避了序列化问题,适合对多进程库有硬性要求的场景。

总结

EasyOCR没有强制要求必须使用torch多进程,但由于它基于PyTorch构建,torch.multiprocessing对其模型对象的支持更完善。如果要使用标准库,核心原则是不要跨进程传递Reader实例,而是在子进程内部初始化模型。

内容的提问来源于stack exchange,提问作者user4562262

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:12:59