「已注销」 2023-10-31 22:57 采纳率: 50%
浏览 16

No module named 'paddleocr.tools'; 'paddleocr' is not a package

我的环境是没有问题的,在不使用多进程的情况下可以正常导入包,导入代码如下

from paddleocr.tools.infer.utility import get_rotate_crop_image
from paddleocr.tools.infer.predict_system import sorted_boxes
from paddleocr.ppstructure.table.predict_table import to_excel

但是问题在于,一旦我尝试使用multiprocessing开启多进程,就会出现如下报错

Traceback (most recent call last):
  File "", line 1, in 
  File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\multiprocessing\spawn.py", line 116, in spawn_main
    exitcode = _main(fd, parent_sentinel)
  File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\multiprocessing\spawn.py", line 125, in _main
    prepare(preparation_data)
  File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\multiprocessing\spawn.py", line 236, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\multiprocessing\spawn.py", line 288, in _fixup_main_from_path
    main_content = runpy.run_path(main_path,
  File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\runpy.py", line 265, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\runpy.py", line 97, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "E:\project\OCR\10-18\DocExtraction\OCRProcessor\OCRProcessor.py", line 35, in 
    from paddleocr.tools.infer.utility import get_rotate_crop_image
ModuleNotFoundError: No module named 'paddleocr.tools'; 'paddleocr' is not a package

只要我使用multiprocessing开启这个paddleocr处理的类的相关进程,就会出现这个报错

我想知道有没有什么办法可以解决这个问题,或者完全放弃这一思路,提供给我一个使用利用多GPU进行OCR识别以加快效率的方法

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-01 11:39
    关注

    【以下回答由 GPT 生成】

    问题标题: No module named 'paddleocr.tools'; 'paddleocr' is not a package

    问题描述: 我的环境正常,可以成功导入paddleocr包。导入代码如下:

    from paddleocr.tools.infer.utility import get_rotate_crop_image
    from paddleocr.tools.infer.predict_system import sorted_boxes
    from paddleocr.ppstructure.table.predict_table import to_excel
    

    但是,当我尝试使用multiprocessing开启多进程时,就会出现以下错误:

    Traceback (most recent call last):
      File "", line 1, in 
      File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\multiprocessing\spawn.py", line 116, in spawn_main
        exitcode = _main(fd, parent_sentinel)
      File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\multiprocessing\spawn.py", line 125, in _main
        prepare(preparation_data)
      File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\multiprocessing\spawn.py", line 236, in prepare
        _fixup_main_from_path(data['init_main_from_path'])
      File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\multiprocessing\spawn.py", line 288, in _fixup_main_from_path
        main_content = runpy.run_path(main_path,
      File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\runpy.py", line 265, in run_path
        return _run_module_code(code, init_globals, run_name,
      File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\runpy.py", line 97, in _run_module_code
        _run_code(code, mod_globals, init_globals,
      File "E:\software\Anaconda-5.3.1\anaconda\envs\OCRPy38\lib\runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "E:\project\OCR\10-18\DocExtraction\OCRProcessor\OCRProcessor.py", line 35, in 
        from paddleocr.tools.infer.utility import get_rotate_crop_image
    ModuleNotFoundError: No module named 'paddleocr.tools'; 'paddleocr' is not a package
    
    只要我使用`multiprocessing`开启与`paddleocr`相关的进程就会出现这个错误
    
    我想知道有没有什么方法可以解决这个问题或者是否有其他方法可以使用多个GPU加速OCR识别以提高效率
    
    解决方案:
    
    1. 第一个问题是由于多进程时`paddleocr.tools`被错误地认为是一个包解决方法是使用`import paddleocr`而不是`from paddleocr.tools...`。你可以在多进程任务中使用`import paddleocr`导入整个`paddleocr`模块然后使用`paddleocr.tools.infer.utility.get_rotate_crop_image`等来访问对应的函数例如:
    
    ```python
    import paddleocr
    
    def worker_function():
        # 在这里使用paddleocr.tools.infer.utility.get_rotate_crop_image等
    
    # 创建一个多进程任务
    p = Process(target=worker_function)
    # 启动进程
    p.start()
    # 等待进程结束
    p.join()
    
    1. 关于使用多个GPU加速OCR识别的方法,你可以考虑使用PaddlePaddle的paddle.distributed模块来进行分布式学习。这可以让你在多个GPU上并行地进行OCR识别任务,从而提高识别效率。具体步骤如下:

      • 首先,安装PaddlePaddle 2.x版本:

      bash pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

      • 然后,导入相关依赖:

      python import paddle from paddle.io import DataLoader from paddle.distributed import fleet from paddle.io import Dataset from paddle.io import BatchSampler from paddle.static import InputSpec

      • 接下来,定义OCR识别模型:

      ```python import paddleocr

      class OCRModel(paddle.nn.Layer): def init(self): super(OCRModel, self).init() self.ocr = paddleocr.OCR()

      def forward(self, image):
          return self.ocr.ocr(image)
      

      ```

      • 然后,实现一个自定义的Dataset类来加载数据:

      ```python class CustomDataset(Dataset): def init(self, data_path): # 在这里加载数据

      def __getitem__(self, index):
          # 返回数据
      
      def __len__(self):
          # 返回数据集大小
      

      ```

      • 然后,创建一个DataLoader实例和一个BatchSampler实例:

      python dataset = CustomDataset(data_path) batch_sampler = BatchSampler(dataset, batch_size=32, shuffle=True) data_loader = DataLoader(dataset, batch_sampler=batch_sampler)

      • 最后,使用fleet.init初始化分布式环境,并使用fleet.distributed_optimizerfleet.distributed_dataloader来分别对优化器和数据加载器进行分布式包装:

      ```python paddle.distributed.init_parallel_env()

      model = OCRModel() optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())

      optimizer = fleet.distributed_optimizer(optimizer) optimizer.minimize(model)

      data_loader = fleet.distributed_dataloader(data_loader)

      for epoch in range(num_epochs): for data in data_loader(): image, label = data output = model(image) loss = paddle.nn.functional.cross_entropy(output, label) loss.backward() optimizer.step() optimizer.clear_grad()

      ```

      在以上代码中,我们使用了paddle.distributed模块来启用分布式学习。通过初始化分布式环境以及使用fleet.distributed_optimizerfleet.distributed_dataloader对优化器和数据加载器进行包装,我们可以在多个GPU上并行地进行OCR识别任务。

      请注意,上述的代码片段仅供参考,具体的实现可能依赖于你的数据集和模型结构。

    以上是针对你提供的问题的解决方案。希望能对你有所帮助。如果你有任何疑问,请随时向我提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月31日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22