Files
rapidocr/python/README.md
T
2022-02-24 09:46:58 +08:00

5.5 KiB
Executable File

使用步骤

  1. 下载相应模型和用于显示的字体文件

    • 百度网盘 提取码:30jv | Google Drive

    • 下载之后放在models目录即可,最终models目录结构如下:

      models
        |-- ch_PP-OCRv2_det_infer.onnx
        |-- ch_ppocr_mobile_v2.0_cls_infer.onnx
        |-- ch_ppocr_mobile_v2.0_det_infer.onnx
        |-- ch_ppocr_server_v2.0_det_infer.onnx
        |-- ch_ppocr_server_v2.0_rec_infer.onnx
        |-- en_number_mobile_v2.0_rec_infer.onnx
        |-- japan_rec_crnn.onnx
        `-- msyh.ttc
      
  2. 运行

    • 接口调用方式运行

      • 如果想要使用其他语言的识别模型,可以只对rec_model_path和keys_path作对应更改即可
      • !!!各个不同语言的推理代码区别只在于模型和字典文件!!!
        from rapid_ocr_api import TextSystem, visualize
        
        det_model_path = 'models/ch_ppocr_mobile_v2.0_det_infer.onnx'
        cls_model_path = 'models/ch_ppocr_mobile_v2.0_cls_infer.onnx'
        
        # 中英文识别
        rec_model_path = 'models/ch_ppocr_mobile_v2.0_rec_infer.onnx'
        keys_path = 'ch_ppocr_mobile_v2_rec/ppocr_keys_v1.txt'
        
        text_sys = TextSystem(det_model_path,
                            rec_model_path,
                            use_angle_cls=True,
                            cls_model_path=cls_model_path,
                            keys_path=keys_path)
        
        image_path = r'test_images/det_images/ch_en_num.jpg'
        dt_boxes, rec_res = text_sys(image_path)
        visualize(image_path, dt_boxes, rec_res)
        
        # 只有中英文和数字识别
        rec_model_path = 'models/en_number_mobile_v2.0_rec_infer.onnx'
        keys_path = 'en_number_ppocr_mobile_v2_rec/en_dict.txt'
        
        text_sys = TextSystem(det_model_path,
                            rec_model_path,
                            use_angle_cls=True,
                            cls_model_path=cls_model_path,
                            keys_path=keys_path)
        
        image_path = r'test_images/det_images/en_num.png'
        dt_boxes, rec_res = text_sys(image_path)
        visualize(image_path, dt_boxes, rec_res)
        
        # 日语识别
        rec_model_path = 'models/japan_rec_crnn.onnx'
        keys_path = 'japan_ppocr_mobile_v2_rec/japan_dict.txt'
        
        text_sys = TextSystem(det_model_path,
                            rec_model_path,
                            use_angle_cls=True,
                            cls_model_path=cls_model_path,
                            keys_path=keys_path)
        
        image_path = r'test_images/det_images/japan.png'
        dt_boxes, rec_res = text_sys(image_path)
        visualize(image_path, dt_boxes, rec_res)
        
    • 命令行运行

      $ bash test_demo.sh
      

相关调节参数

参数名称 作用 建议取值范围 默认值 代码位置
box_thresh 文本检测所得框是否保留的阈值,值越大,召回率越低 [0, 1] 0.5 text_detect.py
unclip_ratio 控制文本检测框的大小,值越大,检测框整体越大 [1.6, 2.0] 1.6 text_detect.py
text_score 文本识别结果置信度,值越大,把握越大 [0, 1] 0.5 rapidOCR.py

onnxruntime-gpu版推理配置

  1. ONNXRuntime-gpu需要严格按照与cuda、cudnn版本对应来安装,具体参考文档, 这一步关乎后面是否可以成功调用GPU
  2. 推理代码中,加载onnx模型部分,用以下对应语言代码替换即可,详细参见:官方教程
    • python版本
      import onnxruntime as ort
      
      model_path = '<path to model>'
      
      providers = [
         ('CUDAExecutionProvider', {
            'device_id': 0,
            'arena_extend_strategy': 'kNextPowerOfTwo',
            'gpu_mem_limit': 2 * 1024 * 1024 * 1024,
            'cudnn_conv_algo_search': 'EXHAUSTIVE',
            'do_copy_in_default_stream': True,
         }),
         'CPUExecutionProvider',
      ]
      
      session = ort.InferenceSession(model_path, providers=providers)
      
    • C/C++版本
      OrtSessionOptions* session_options = /* ... */;
      
      OrtCUDAProviderOptions options;
      options.device_id = 0;
      options.arena_extend_strategy = 0;
      options.gpu_mem_limit = 2 * 1024 * 1024 * 1024;
      options.cudnn_conv_algo_search = OrtCudnnConvAlgoSearch::EXHAUSTIVE;
      options.do_copy_in_default_stream = 1;
      
      SessionOptionsAppendExecutionProvider_CUDA(session_options, &options);