rapidocr 2.x系列正式发布

引言

各位小伙伴们久等了, 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推理引擎为例讲解如何指定不同推理引擎,其他推理引擎同样用法。

  1. 安装PyTorch。

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

    大家可以根据实际情况,选择安装CPU版、GPU版。

  2. 指定PyTorch作为推理引擎

    python 复制代码
    from 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')
  3. 查看输出日志。下面日志中打印出了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

选择不同模型

该部分主要包括两个方面:一是如何指定mobileserver两种侧重不同的模型;二是指定不同语种的模型。经过精心设计,目前来看算是都兼顾了吧!

使用默认mobile或server模型

rapidocr库基本集成了PaddleOCR发布的所有模型,其中中英文检测识别模型仅集成最新的版本。同时只有中英文检测识别模型分为mobileserver两个版本,分别侧重速度和精度。

默认使用的是mobile 的中英文检测识别模型,通过lang_detlang_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...

如有帮助到小伙伴,还请多多宣传。用的人多了,我这里才有动力为爱发电。

相关推荐
算AI14 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
hyshhhh16 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
杉之16 小时前
选择排序笔记
java·算法·排序算法
烂蜻蜓17 小时前
C 语言中的递归:概念、应用与实例解析
c语言·数据结构·算法
OYangxf17 小时前
图论----拓扑排序
算法·图论
我要昵称干什么17 小时前
基于S函数的simulink仿真
人工智能·算法
AndrewHZ17 小时前
【图像处理基石】什么是tone mapping?
图像处理·人工智能·算法·计算机视觉·hdr
念九_ysl17 小时前
基数排序算法解析与TypeScript实现
前端·算法·typescript·排序算法
守正出琦17 小时前
日期类的实现
数据结构·c++·算法
ChoSeitaku17 小时前
NO.63十六届蓝桥杯备战|基础算法-⼆分答案|木材加工|砍树|跳石头(C++)
c++·算法·蓝桥杯