跳转至

如何使用不同推理引擎?

引言

rapidocr>=3.0.0版本之后,rapidocr可以单独为文本检测、文本行方向分类和文本识别单独指定不同的推理引擎。

例如:文本检测使用ONNXRuntime,文本识别使用PaddlePaddle(params={"Rec.engine_type": EngineType.PADDLE})。同时,不同版本的OCR也可以通过Det.ocr_version灵活指定。

rapidocr支持4种推理引擎(ONNXRuntime / OpenVINO / PaddlePaddle / PyTorch),推荐首先使用 ONNXRuntime CPU 版。默认为ONNXRuntime。

rapidocr是通过指定不同参数来选择使用不同的推理引擎的。当然,使用不同推理引擎的前提是事先安装好对应的推理引擎库,并确保安装正确。

使用ONNXRuntime

  1. 安装ONNXRuntime。推荐用CPU版的ONNXRuntime,GPU版不推荐在rapidocr中使用,相关原因参见:ONNXRuntime GPU推理

    pip install onnxruntime
    
  2. ONNXRuntime作为默认推理引擎,无需显式指定即可使用。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    from rapidocr import RapidOCR
    
    engine = RapidOCR()
    
    img_url = "https://github.com/RapidAI/RapidOCR/blob/main/python/tests/test_files/ch_en_num.jpg?raw=true"
    result = engine(img_url)
    print(result)
    
    result.vis('vis_result.jpg')
    

    Tip

    仅在rapidocr>=3.1.0中支持。ONNXRuntime官方相关文档:link

    1. 安装

      pip install rapidocr onnxruntime-cann
      
    2. 使用

      1
      2
      3
      4
      5
      6
      7
      8
      9
      from rapidocr import RapidOCR
      
      engine = RapidOCR(params={"EngineConfig.onnxruntime.use_cann": True})
      
      img_url = "<https://img1.baidu.com/it/u=3619974146,1266987475&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=516>"
      result = engine(img_url)
      print(result)
      
      result.vis("vis_result.jpg")
      

    Tip

    DirectML仅能Windows 10 Build 18362及以上使用。 ONNXRuntime官方相关文档:link

    1. 安装

      pip install rapidocr onnxruntime-directml
      
    2. 使用

      1
      2
      3
      4
      5
      6
      7
      8
      9
      from rapidocr import RapidOCR
      
      engine = RapidOCR(params={"EngineConfig.onnxruntime.use_dml": True})
      
      img_url = "<https://img1.baidu.com/it/u=3619974146,1266987475&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=516>"
      result = engine(img_url)
      print(result)
      
      result.vis("vis_result.jpg")
      
  3. 查看输出日志。下面日志中打印出了 Using engine_name: onnxruntime,则证明使用的推理引擎是ONNXRuntime。

    1
    2
    3
    4
    5
    6
    [INFO] 2025-03-21 09:28:03,457 base.py:30: Using engine_name: onnxruntime
    [INFO] 2025-03-21 09:28:03,553 utils.py:35: File already exists in /Users/joshuawang/projects/_self/RapidOCR/python/rapidocr/models/ch_PP-OCRv4_det_infer.onnx
    [INFO] 2025-03-21 09:28:03,767 base.py:30: Using engine_name: onnxruntime
    [INFO] 2025-03-21 09:28:03,768 utils.py:35: File already exists in /Users/joshuawang/projects/_self/RapidOCR/python/rapidocr/models/ch_ppocr_mobile_v2.0_cls_infer.onnx
    [INFO] 2025-03-21 09:28:03,861 base.py:30: Using engine_name: onnxruntime
    [INFO] 2025-03-21 09:28:03,862 utils.py:35: File already exists in /Users/joshuawang/projects/_self/RapidOCR/python/rapidocr/models/ch_PP-OCRv4_rec_infer.onnx
    

使用OpenVINO

  1. 安装OpenVINO。

    pip install openvino
    
  2. 指定OpenVINO作为推理引擎。

    from rapidocr import RapidOCR, EngineType
    
    engine = RapidOCR(
        params={
            "Det.engine_type": EngineType.OPENVINO,
            "Cls.engine_type": EngineType.OPENVINO,
            "Rec.engine_type": EngineType.OPENVINO,
        }
    )
    
    img_url = "https://github.com/RapidAI/RapidOCR/blob/main/python/tests/test_files/ch_en_num.jpg?raw=true"
    result = engine(img_url)
    print(result)
    
    result.vis('vis_result.jpg')
    
  3. 查看输出日志。下面日志中打印出了 Using engine_name: openvino,则证明使用的推理引擎是OpenVINO。

    1
    2
    3
    4
    5
    6
    [INFO] 2025-03-21 09:28:03,457 base.py:30: Using engine_name: openvino
    [INFO] 2025-03-21 09:28:03,553 utils.py:35: File already exists in /Users/joshuawang/projects/_self/RapidOCR/python/rapidocr/models/ch_PP-OCRv4_det_infer.onnx
    [INFO] 2025-03-21 09:28:03,767 base.py:30: Using engine_name: openvino
    [INFO] 2025-03-21 09:28:03,768 utils.py:35: File already exists in /Users/joshuawang/projects/_self/RapidOCR/python/rapidocr/models/ch_ppocr_mobile_v2.0_cls_infer.onnx
    [INFO] 2025-03-21 09:28:03,861 base.py:30: Using engine_name: openvino
    [INFO] 2025-03-21 09:28:03,862 utils.py:35: File already exists in /Users/joshuawang/projects/_self/RapidOCR/python/rapidocr/models/ch_PP-OCRv4_rec_infer.onnx
    

使用PaddlePaddle

  1. 安装PaddlePaddle。

    参见PaddlePaddle官方安装文档 → 快速安装

    大家可以根据实际情况,选择安装需要的版本。

  2. 指定PaddlePaddle作为推理引擎。

    from rapidocr import EngineType, RapidOCR
    
    engine = RapidOCR(
        params={
            "Det.engine_type": EngineType.PADDLE,
            "Cls.engine_type": EngineType.PADDLE,
            "Rec.engine_type": EngineType.PADDLE,
        }
    )
    
    img_url = "https://github.com/RapidAI/RapidOCR/blob/main/python/tests/test_files/ch_en_num.jpg?raw=true"
    result = engine(img_url)
    print(result)
    
    result.vis('vis_result.jpg')
    
    from rapidocr import EngineType, RapidOCR
    
    engine = RapidOCR(
        params={
        "Det.engine_type": EngineType.PADDLE,
        "EngineConfig.paddle.use_cuda": True,  # 使用PaddlePaddle GPU版推理
        "EngineConfig.paddle.gpu_id": 0,  # 指定GPU id
        }
    )
    
    img_url = "https://github.com/RapidAI/RapidOCR/blob/main/python/tests/test_files/ch_en_num.jpg?raw=true"
    result = engine(img_url)
    print(result)
    
    result.vis('vis_result.jpg')
    

    Tip

    仅在rapidocr>=3.3.0中支持。对应版本的PaddlePaddle安装文档:link

    from rapidocr import EngineType, RapidOCR
    
    engine = RapidOCR(
        params={
        "Det.engine_type": EngineType.PADDLE,
        "EngineConfig.paddle.use_npu": True,  # 使用PaddlePaddle NPU版推理
        "EngineConfig.paddle.npu_id": 0,  # 指定NPU id
        }
    )
    
    img_url = "https://github.com/RapidAI/RapidOCR/blob/main/python/tests/test_files/ch_en_num.jpg?raw=true"
    result = engine(img_url)
    print(result)
    
    result.vis('vis_result.jpg')
    
  3. 查看输出日志。下面日志中打印出了 Using engine_name: paddle,则证明使用的推理引擎是PaddlePaddle。

    1
    2
    3
    4
    5
    6
    7
    8
    [INFO] 2025-03-22 15:20:45,528 utils.py:35: File already exists in /Users/jiahuawang/projects/RapidOCR/python/rapidocr/models/ch_PP-OCRv4_det_infer/inference.pdmodel
    [INFO] 2025-03-22 15:20:45,529 utils.py:35: File already exists in /Users/jiahuawang/projects/RapidOCR/python/rapidocr/models/ch_PP-OCRv4_det_infer/inference.pdiparams
    [INFO] 2025-03-22 15:20:45,746 base.py:30: Using engine_name: paddle
    [INFO] 2025-03-22 15:20:45,746 utils.py:35: File already exists in /Users/jiahuawang/projects/RapidOCR/python/rapidocr/models/ch_ppocr_mobile_v2_cls_infer/inference.pdmodel
    [INFO] 2025-03-22 15:20:45,746 utils.py:35: File already exists in /Users/jiahuawang/projects/RapidOCR/python/rapidocr/models/ch_ppocr_mobile_v2_cls_infer/inference.pdiparams
    [INFO] 2025-03-22 15:20:45,903 base.py:30: Using engine_name: paddle
    [INFO] 2025-03-22 15:20:45,904 utils.py:35: File already exists in /Users/jiahuawang/projects/RapidOCR/python/rapidocr/models/ch_PP-OCRv4_rec_infer/inference.pdmodel
    [INFO] 2025-03-22 15:20:45,904 utils.py:35: File already exists in /Users/jiahuawang/projects/RapidOCR/python/rapidocr/models/ch_PP-OCRv4_rec_infer/inference.pdiparams
    

使用PyTorch

  1. 安装PyTorch。

    参见PyTorch官方安装文档 → Install PyTorch

    大家可以根据实际情况,选择安装需要的版本。

  2. 指定PyTorch作为推理引擎。

    from rapidocr import RapidOCR
    
    engine = RapidOCR(
        params={
            "Det.engine_type": EngineType.TORCH,
            "Cls.engine_type": EngineType.TORCH,
            "Rec.engine_type": EngineType.TORCH,
        }
    )
    
    img_url = "https://github.com/RapidAI/RapidOCR/blob/main/python/tests/test_files/ch_en_num.jpg?raw=true"
    result = engine(img_url)
    print(result)
    
    result.vis('vis_result.jpg')
    
    from rapidocr import EngineType, RapidOCR
    
    engine = RapidOCR(
        params={
            "Det.engine_type": EngineType.TORCH,
            "Cls.engine_type": EngineType.TORCH,
            "Rec.engine_type": EngineType.TORCH,
            "EngineConfig.torch.use_cuda": True,  # 使用torch GPU版推理
            "EngineConfig.torch.gpu_id": 0,  # 指定GPU id
        }
    )
    
    img_url = "https://github.com/RapidAI/RapidOCR/blob/main/python/tests/test_files/ch_en_num.jpg?raw=true"
    result = engine(img_url)
    print(result)
    
    result.vis('vis_result.jpg')
    

    Tip

    仅在rapidocr>3.4.0中支持。torch_npu官方相关文档:link

    1. 安装torch_npu,参见:docs

    2. 使用

      from rapidocr import EngineType, RapidOCR
      
      engine = RapidOCR(
          params={
              "Det.engine_type": EngineType.TORCH,
              "Cls.engine_type": EngineType.TORCH,
              "Rec.engine_type": EngineType.TORCH,
              "EngineConfig.torch.use_npu": True,  # 使用torch NPU版推理
              "EngineConfig.torch.npu_id": 0,  # 指定NPU id
          }
      )
      
      img_url = "https://github.com/RapidAI/RapidOCR/blob/main/python/tests/test_files/ch_en_num.jpg?raw=true"
      result = engine(img_url)
      print(result)
      
      result.vis('vis_result.jpg')
      
  3. 查看输出日志。下面日志中打印出了 Using engine_name: torch,则证明使用的推理引擎是PyTorch。

    1
    2
    3
    4
    5
    6
    [INFO] 2025-03-22 15:39:13,241 base.py:30: Using engine_name: torch
    [INFO] 2025-03-22 15:39:13,956 utils.py:35: File already exists in /Users/jiahuawang/projects/RapidOCR/python/rapidocr/models/ch_PP-OCRv4_det_infer.pth
    [INFO] 2025-03-22 15:39:14,136 base.py:30: Using engine_name: torch
    [INFO] 2025-03-22 15:39:14,136 utils.py:35: File already exists in /Users/jiahuawang/projects/RapidOCR/python/rapidocr/models/ch_ptocr_mobile_v2.0_cls_infer.pth
    [INFO] 2025-03-22 15:39:14,168 base.py:30: Using engine_name: torch
    [INFO] 2025-03-22 15:39:14,168 utils.py:35: File already exists in /Users/jiahuawang/projects/RapidOCR/python/rapidocr/models/ch_PP-OCRv4_rec_infer.pth
    

评论