引言
各位小伙伴们久等了, rapidocr
2.x 系列终于要和大家正式见面了。
现在rapidocr
已经发版到rapidocr==2.0.6
了。从我个人角度来看,rapidocr
算是相对稳定了。大家可以按需来使用rapidocr
了。
值得说明的是,rapidocr
是之前rapidocr_onnxruntime
,rapidocr_openvino
,rapidocr_paddle
和未曾发包的rapidocr_torch
的4个版本的四合一版本。其他包后续不再更新。
从速度和精度来看,rapidocr
包与其他包持平,更多的是做了代码整理和统一格式工作,以及最重要的是新增了对PyTorch的支持。PyTorch有着更为完整的生态,GPU支持也更加鲁棒。我相信这是一个很有意义的支持。
还有一点想要说明,从语义化版本号来看,rapidocr
2.x系列是和之前的1.x系列不兼容的。输入和输出均不同的。 请各位小伙伴在决定是否使用2.x系列时,注意到这点。否则,很有可能发生的情况是:安装2.x系列之后,程序各种报错。
这次由于改动较大,难免挂一漏万。小伙伴如果遇到了问题,还请积极反馈,我们这里会积极跟进的。同时,由于rapidocr下游库众多,其他依赖rapidocr的下游库会逐步适配2.x版本。欢迎小伙伴随时参与进来。
接下来,我将从rapidocr官方文档中摘部分使用文档来简单让小伙伴们快速上手使用起来。详细文档可以点击文末的"阅读原文",或者跳转 rapidai.github.io/RapidOCRDoc... 来查看。
快速开始
一切都使用默认值。默认使用来自PP-OCRv4的DBNet中文轻量检测,来自PP-OCRv4的SVTR_LCNet中文识别模型。
因为rapidocr>=2.0.6
版本不再绑定默认推理引擎了,需要手动安装需要的推理引擎,推荐可以先使用ONNXRuntime CPU版作为推理引擎。
安装:
bash
pip install onnxruntime
pip install rapidocr
验证是否安装成功:
bash
rapidocr check
# 输出以下内容即证明安装成功
[INFO] 2025-03-20 21:46:47,854 base.py:30: Using engine_name: onnxruntime
[INFO] 2025-03-20 21:46:47,886 utils.py:35: File already exists in /Users/jiahuawang/miniconda3/envs/py310/lib/python3.10/site-packages/rapidocr/models/ch_PP-OCRv4_det_infer.onnx
[INFO] 2025-03-20 21:46:47,931 base.py:30: Using engine_name: onnxruntime
[INFO] 2025-03-20 21:46:47,931 utils.py:35: File already exists in /Users/jiahuawang/miniconda3/envs/py310/lib/python3.10/site-packages/rapidocr/models/ch_ppocr_mobile_v2.0_cls_infer.onnx
[INFO] 2025-03-20 21:46:47,949 base.py:30: Using engine_name: onnxruntime
[INFO] 2025-03-20 21:46:47,949 utils.py:35: File already exists in /Users/jiahuawang/miniconda3/envs/py310/lib/python3.10/site-packages/rapidocr/models/ch_PP-OCRv4_rec_infer.onnx
Success! rapidocr is installed correctly!
使用:
python
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")
返回值为RapidOCROutput
,可以通过result.xxxx
直接访问。主要包含以下字段:
RapidOCROutput.img (np.ndarray)
: 传入的原始图像RapidOCROutput.boxes (np.ndarray)
: 图像中每行坐标框,shape为(N, 4, 2)
。N
表示有多少文本行。RapidOCROutput.txts (Tuple[str])
: 和boxes
文本框对应识别到的文本内容。长度和RapidOCROutput.boxes
长度一致。RapidOCROutput.scores (Tuple[float])
: 每行识别文本结果的置信度。长度和RapidOCROutput.boxes
长度一致。RapidOCROutput.word_results (Tuple[Any])
: 该部分结果只有在return_word_box=True
时,才会有值。RapidOCROutput.elapse_list (List[float])
: 文本检测,文本行方向分类和文本识别三部分各自推理耗时,单位为秒。RapidOCROutput.elapse (float)
: 三部分整体耗时,单位为秒。
选择不同推理引擎
rapidocr
是通过指定不同参数来选择使用不同的推理引擎的。当然,使用不同推理引擎的前提是事先安装好对应的推理引擎库,并确保安装正确。
下面以使用torch
推理引擎为例讲解如何指定不同推理引擎,其他推理引擎同样用法。
-
安装PyTorch。
参见PyTorch官方安装文档 → Install PyTorch
大家可以根据实际情况,选择安装CPU版、GPU版。
-
指定PyTorch作为推理引擎
pythonfrom rapidocr import RapidOCR # CPU版直接使用 engine = RapidOCR(params={"Global.with_torch": True}) # GPU版,指定GPU id engine = RapidOCR( params={ "Global.with_torch": True, "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')
-
查看输出日志。下面日志中打印出了Using engine_name: torch,则证明使用的推理引擎是PyTorch。
bash[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
选择不同模型
该部分主要包括两个方面:一是如何指定mobile
和server
两种侧重不同的模型;二是指定不同语种的模型。经过精心设计,目前来看算是都兼顾了吧!
使用默认mobile或server模型
rapidocr
库基本集成了PaddleOCR发布的所有模型,其中中英文检测识别模型仅集成最新的版本。同时只有中英文检测识别模型分为mobile 和server两个版本,分别侧重速度和精度。
默认使用的是mobile 的中英文检测识别模型,通过lang_det
和lang_rec
来指定。
python
from rapidocr import RapidOCR
engine = RapidOCR(
params={"Global.lang_det": "ch_mobile", "Global.lang_rec": "ch_mobile"}
)
如果想要使用server 版默认模型,则直接更改参数为ch_server
即可。
python
from rapidocr import RapidOCR
engine = RapidOCR(
params={"Global.lang_det": "ch_server", "Global.lang_rec": "ch_server"}
)
具体字段对应
文本检测模型:
语种类型名称 | 程序使用字段 | 支持模型类型(lang_det ) |
ONNXRuntime | OpenVINO | PaddlePaddle | PyTorch |
---|---|---|---|---|---|---|
中英 | ch |
ch_mobile ch_server |
✅ | ✅ | ✅ | ✅ |
英语和拉丁语 | en |
en_mobile en_server |
✅ | ✅ | ✅ | ✅ |
多语种 | multi |
multi_mobile |
✅ | ✅ | ✅ | ✅ |
文本识别模型:
语种 | 描述 | 程序使用字段 | 支持模型类型(lang_rec ) |
ONNXRuntime | OpenVINO | PaddlePaddle | PyTorch |
---|---|---|---|---|---|---|---|
中文 | Chinese & English | ch |
ch_mobile ch_server |
✅ | ✅ | ✅ | ✅ |
中文繁体 | Chinese (Traditional) | chinese_cht |
chinese_cht |
✅ | ✅ | ✅ | ✅ |
英文 | English | en |
en_mobile |
✅ | ✅ | ✅ | ✅ |
阿拉伯文 | Arabic | ar |
ar_mobile |
✅ | ✅ | ✅ | ✅ |
塞尔维亚文(cyrillic) | Serbian(cyrillic) | cyrillic |
cyrillic_mobile |
✅ | ✅ | ✅ | ✅ |
梵文 | Devanagari | devanagari |
devanagari_mobile |
✅ | ✅ | ✅ | ✅ |
日文 | Japan | japan |
japan_mobile |
✅ | ✅ | ✅ | ✅ |
卡纳达语 | kannaḍa | ka |
ka_mobile |
✅ | ✅ | ✅ | ✅ |
韩文 | Koran | korean |
korean_mobile |
✅ | ✅ | ✅ | ✅ |
拉丁文 | Latin | latin |
latin_mobile |
✅ | ✅ | ✅ | ✅ |
泰米尔文 | Tamil | ta |
ta_mobile |
✅ | ✅ | ✅ | ✅ |
泰卢固文 | Telugu | te |
te_mobile |
✅ | ✅ | ✅ | ✅ |
使用方式
以上模型可直接通过字段指定,程序会自动下载使用。
python
from rapidocr import RapidOCR, VisRes
engine = RapidOCR(
params={"Global.lang_det": "ch_mobile", "Global.lang_rec": "ch_mobile"}
)
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")
写在最后
以上仅是rapidocr官方文档中的一小部分,更多内容请移步官方文档查看。rapidai.github.io/RapidOCRDoc...
如有帮助到小伙伴,还请多多宣传。用的人多了,我这里才有动力为爱发电。