mirror of
https://github.com/RapidAI/RapidOCR.git
synced 2026-11-12 14:00:53 +08:00
119 lines
5.5 KiB
Markdown
Executable File
119 lines
5.5 KiB
Markdown
Executable File
### 使用步骤
|
|
1. 下载相应模型和用于显示的字体文件
|
|
- [百度网盘 提取码:30jv](https://pan.baidu.com/s/1qkqWK4wRdMjqGGbzR-FyWg) | [Google Drive](https://drive.google.com/drive/folders/1x_a9KpCo_1blxH1xFOfgKVkw1HYRVywY?usp=sharing)
|
|
|
|
- 下载之后放在`models`目录即可,最终`models`目录结构如下:
|
|
```text
|
|
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`作对应更改即可
|
|
- **!!!各个不同语言的推理代码区别只在于模型和字典文件!!!**
|
|
```python
|
|
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)
|
|
```
|
|
|
|
- 命令行运行
|
|
```shell
|
|
$ bash test_demo.sh
|
|
```
|
|
|
|
### 相关调节参数
|
|
|参数名称|作用|建议取值范围|默认值|代码位置|
|
|
|:---:|:---:|:---:|:---:|:---:|
|
|
|box_thresh|文本检测所得框是否保留的阈值,值越大,召回率越低|[0, 1]|0.5|[text_detect.py](https://github.com/RapidAI/RapidOCR/blob/6aa79aa390c9c9e8f41df0f0c35f3dca97e6dc93/python/ch_ppocr_mobile_v2_det/text_detect.py?_pjax=%23js-repo-pjax-container%2C%20div%5Bitemtype%3D%22http%3A%2F%2Fschema.org%2FSoftwareSourceCode%22%5D%20main%2C%20%5Bdata-pjax-container%5D#L55)|
|
|
|unclip_ratio|控制文本检测框的大小,值越大,检测框整体越大|[1.6, 2.0]|1.6|[text_detect.py](https://github.com/RapidAI/RapidOCR/blob/6aa79aa390c9c9e8f41df0f0c35f3dca97e6dc93/python/ch_ppocr_mobile_v2_det/text_detect.py?_pjax=%23js-repo-pjax-container%2C%20div%5Bitemtype%3D%22http%3A%2F%2Fschema.org%2FSoftwareSourceCode%22%5D%20main%2C%20%5Bdata-pjax-container%5D#L57)|
|
|
|text_score|文本识别结果置信度,值越大,把握越大|[0, 1]|0.5|[rapidOCR.py](https://github.com/RapidAI/RapidOCR/blob/6aa79aa390c9c9e8f41df0f0c35f3dca97e6dc93/python/rapidOCR.py?_pjax=%23js-repo-pjax-container%2C%20div%5Bitemtype%3D%22http%3A%2F%2Fschema.org%2FSoftwareSourceCode%22%5D%20main%2C%20%5Bdata-pjax-container%5D#L270)|
|
|
|
|
|
|
### onnxruntime-gpu版推理配置
|
|
|
|
1. ONNXRuntime-gpu需要严格按照与cuda、cudnn版本对应来安装,具体参考[文档](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements), **这一步关乎后面是否可以成功调用GPU**
|
|
2. 推理代码中,加载onnx模型部分,用以下对应语言代码替换即可,详细参见:[官方教程](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html)
|
|
- python版本
|
|
```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++版本
|
|
```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);
|
|
``` |