zhangyubo0722 a6bc9cd3dc
add ppocrv5 docs (#15179)
Co-authored-by: zhangyubo0722 <zangyubo0722@163.com>
2025-05-19 20:22:16 +08:00

68 KiB
Raw Blame History

comments
comments
true

通用OCR产线使用教程

1. OCR产线介绍

OCR光学字符识别Optical Character Recognition是一种将图像中的文字转换为可编辑文本的技术。它广泛应用于文档数字化、信息提取和数据处理等领域。OCR 可以识别印刷文本、手写文本,甚至某些类型的字体和符号。

通用 OCR 产线用于解决文字识别任务,提取图片中的文字信息以文本形式输出,本产线集成了业界知名的 PP-OCRv3 和 PP-OCRv4 的端到端 OCR 串联系统,支持超过 80 种语言的识别,并在此基础上,增加了对图像的方向矫正和扭曲矫正功能。基于本产线,可实现 CPU 上毫秒级的文本内容精准预测,使用场景覆盖通用、制造、金融、交通等各个领域。本产线同时提供了灵活的服务化部署方式,支持在多种硬件上使用多种编程语言调用。不仅如此,本产线也提供了二次开发的能力,您可以基于本产线在您自己的数据集上训练调优,训练后的模型也可以无缝集成。

通用OCR产线中包含以下5个模块。每个模块均可独立进行训练和推理并包含多个模型。有关详细信息请点击相应模块以查看文档。

在本产线中,您可以根据下方的基准测试数据选择使用的模型。

文档图像方向分类模块(可选):
模型模型下载链接 Top-1 Acc% GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M) 介绍
PP-LCNet_x1_0_doc_ori推理模型/训练模型 99.06 2.31 / 0.43 3.37 / 1.27 7 基于PP-LCNet_x1_0的文档图像分类模型含有四个类别即0度90度180度270度
文本图像矫正模块(可选):
模型模型下载链接 CER 模型存储大小M) 介绍
UVDoc推理模型/训练模型 0.179 30.3 M 高精度文本图像矫正模型
文本检测模块:
模型模型下载链接 检测Hmean% GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M) 介绍
PP-OCRv4_server_det推理模型/训练模型 82.56 83.34 / 80.91 442.58 / 442.58 109 PP-OCRv4 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署
PP-OCRv4_mobile_det推理模型/训练模型 77.35 8.79 / 3.13 51.00 / 28.58 4.7 PP-OCRv4 的移动端文本检测模型,效率更高,适合在端侧设备部署
PP-OCRv3_mobile_det推理模型/训练模型 78.68 8.44 / 2.91 27.87 / 27.87 2.1 PP-OCRv3 的移动端文本检测模型,效率更高,适合在端侧设备部署
PP-OCRv3_server_det推理模型/训练模型 80.11 65.41 / 13.67 305.07 / 305.07 102.1 PP-OCRv3 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署
文本识别模块:
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
PP-OCRv5_server_rec推理模型/训练模型 86.38 - - 205M PP-OCRv5_server_rec 是新一代文本识别模型。该模型致力于以单一模型高效、精准地支持简体中文、繁体中文、英文、日文四种主要语言,以及手写、竖版、拼音、生僻字等复杂文本场景的识别。在保持识别效果的同时,兼顾推理速度和模型鲁棒性,为各种场景下的文档理解提供高效、精准的技术支撑。
PP-OCRv5_mobile_rec推理模型/训练模型 81.29 - - 128 PP-OCRv5_mobile_rec 是新一代文本识别模型。该模型致力于以单一模型高效、精准地支持简体中文、繁体中文、英文、日文四种主要语言,以及手写、竖版、拼音、生僻字等复杂文本场景的识别。在保持识别效果的同时,兼顾推理速度和模型鲁棒性,为各种场景下的文档理解提供高效、精准的技术支撑。
PP-OCRv4_server_rec_doc推理模型/训练模型 86.58 6.65 / 2.38 32.92 / 32.92 181 M PP-OCRv4_server_rec_doc是在PP-OCRv4_server_rec的基础上在更多中文文档数据和PP-OCR训练数据的混合数据训练而成增加了部分繁体字、日文、特殊字符的识别能力可支持识别的字符为1.5万+,除文档相关的文字识别能力提升外,也同时提升了通用文字的识别能力
PP-OCRv4_mobile_rec推理模型/训练模型 83.28 4.82 / 1.20 16.74 / 4.64 88 M PP-OCRv4的轻量级识别模型推理效率高可以部署在包含端侧设备的多种硬件设备中
PP-OCRv4_server_rec 推理模型/训练模型 85.19 6.58 / 2.43 33.17 / 33.17 151 M PP-OCRv4的服务器端模型推理精度高可以部署在多种不同的服务器上
en_PP-OCRv4_mobile_rec推理模型/训练模型 70.39 4.81 / 0.75 16.10 / 5.31 66 M 基于PP-OCRv4识别模型训练得到的超轻量英文识别模型支持英文、数字识别

以上列出的是文本识别模块重点支持的6个核心模型,该模块总共支持10个全量模型,包含多个多语言文本识别模型,完整的模型列表如下:

👉模型列表详情
  • PP-OCRv5 多场景模型
模型模型下载链接 中文识别 Avg Accuracy(%) 英文识别 Avg Accuracy(%) 繁体中文识别 Avg Accuracy(%) 日文识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
PP-OCRv5_server_rec推理模型/训练模型 86.38 64.70 93.29 60.35 - - 205M PP-OCRv5_server_rec 是新一代文本识别模型。该模型致力于以单一模型高效、精准地支持简体中文、繁体中文、英文、日文四种主要语言,以及手写、竖版、拼音、生僻字等复杂文本场景的识别。在保持识别效果的同时,兼顾推理速度和模型鲁棒性,为各种场景下的文档理解提供高效、精准的技术支撑。
PP-OCRv5_mobile_rec推理模型/训练模型 81.29 66.00 83.55 54.65 - - 128 PP-OCRv5_mobile_rec 是新一代文本识别模型。该模型致力于以单一模型高效、精准地支持简体中文、繁体中文、英文、日文四种主要语言,以及手写、竖版、拼音、生僻字等复杂文本场景的识别。在保持识别效果的同时,兼顾推理速度和模型鲁棒性,为各种场景下的文档理解提供高效、精准的技术支撑。
  • 中文识别模型
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
PP-OCRv4_server_rec_doc推理模型/训练模型 86.58 6.65 / 2.38 32.92 / 32.92 181 M PP-OCRv4_server_rec_doc是在PP-OCRv4_server_rec的基础上在更多中文文档数据和PP-OCR训练数据的混合数据训练而成增加了部分繁体字、日文、特殊字符的识别能力可支持识别的字符为1.5万+,除文档相关的文字识别能力提升外,也同时提升了通用文字的识别能力
PP-OCRv4_mobile_rec推理模型/训练模型 83.28 4.82 / 1.20 16.74 / 4.64 88 M PP-OCRv4的轻量级识别模型推理效率高可以部署在包含端侧设备的多种硬件设备中
PP-OCRv4_server_rec 推理模型/训练模型 85.19 6.58 / 2.43 33.17 / 33.17 151 M PP-OCRv4的服务器端模型推理精度高可以部署在多种不同的服务器上
PP-OCRv3_mobile_rec推理模型/训练模型 75.43 5.87 / 1.19 9.07 / 4.28 138 M PP-OCRv3的轻量级识别模型推理效率高可以部署在包含端侧设备的多种硬件设备中
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
ch_SVTRv2_rec推理模型/训练模型 68.81 8.08 / 2.74 50.17 / 42.50 126 M SVTRv2 是一种由复旦大学视觉与学习实验室FVL的OpenOCR团队研发的服务端文本识别模型其在PaddleOCR算法模型挑战赛 - 赛题一OCR端到端识别任务中荣获一等奖A榜端到端识别精度相比PP-OCRv4提升6%。
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
ch_RepSVTR_rec推理模型/训练模型 65.07 5.93 / 1.62 20.73 / 7.32 70 M RepSVTR 文本识别模型是一种基于SVTRv2 的移动端文本识别模型其在PaddleOCR算法模型挑战赛 - 赛题一OCR端到端识别任务中荣获一等奖B榜端到端识别精度相比PP-OCRv4提升2.5%,推理速度持平。
  • 英文识别模型
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
en_PP-OCRv4_mobile_rec推理模型/训练模型 70.39 4.81 / 0.75 16.10 / 5.31 66 M 基于PP-OCRv4识别模型训练得到的超轻量英文识别模型支持英文、数字识别
en_PP-OCRv3_mobile_rec推理模型/训练模型 70.69 5.44 / 0.75 8.65 / 5.57 85 M 基于PP-OCRv3识别模型训练得到的超轻量英文识别模型支持英文、数字识别
  • 多语言识别模型
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时ms
[常规模式 / 高性能模式]
CPU推理耗时ms
[常规模式 / 高性能模式]
模型存储大小M 介绍
korean_PP-OCRv3_mobile_rec推理模型/训练模型 60.21 5.40 / 0.97 9.11 / 4.05 114 M 基于PP-OCRv3识别模型训练得到的超轻量韩文识别模型支持韩文、数字识别
japan_PP-OCRv3_mobile_rec推理模型/训练模型 45.69 5.70 / 1.02 8.48 / 4.07 120 M 基于PP-OCRv3识别模型训练得到的超轻量日文识别模型支持日文、数字识别
chinese_cht_PP-OCRv3_mobile_rec推理模型/训练模型 82.06 5.90 / 1.28 9.28 / 4.34 152 M 基于PP-OCRv3识别模型训练得到的超轻量繁体中文识别模型支持繁体中文、数字识别
te_PP-OCRv3_mobile_rec推理模型/训练模型 95.88 5.42 / 0.82 8.10 / 6.91 85 M 基于PP-OCRv3识别模型训练得到的超轻量泰卢固文识别模型支持泰卢固文、数字识别
ka_PP-OCRv3_mobile_rec推理模型/训练模型 96.96 5.25 / 0.79 9.09 / 3.86 85 M 基于PP-OCRv3识别模型训练得到的超轻量卡纳达文识别模型支持卡纳达文、数字识别
ta_PP-OCRv3_mobile_rec推理模型/训练模型 76.83 5.23 / 0.75 10.13 / 4.30 85 M 基于PP-OCRv3识别模型训练得到的超轻量泰米尔文识别模型支持泰米尔文、数字识别
latin_PP-OCRv3_mobile_rec推理模型/训练模型 76.93 5.20 / 0.79 8.83 / 7.15 85 M 基于PP-OCRv3识别模型训练得到的超轻量拉丁文识别模型支持拉丁文、数字识别
arabic_PP-OCRv3_mobile_rec推理模型/训练模型 73.55 5.35 / 0.79 8.80 / 4.56 85 M 基于PP-OCRv3识别模型训练得到的超轻量阿拉伯字母识别模型支持阿拉伯字母、数字识别
cyrillic_PP-OCRv3_mobile_rec推理模型/训练模型 94.28 5.23 / 0.76 8.89 / 3.88 85 M 基于PP-OCRv3识别模型训练得到的超轻量斯拉夫字母识别模型支持斯拉夫字母、数字识别
devanagari_PP-OCRv3_mobile_rec推理模型/训练模型 96.44 5.22 / 0.79 8.56 / 4.06 85 M 基于PP-OCRv3识别模型训练得到的超轻量梵文字母识别模型支持梵文字母、数字识别
测试环境说明:
  • 性能测试环境
    • 测试数据集:
      • 文档图像方向分类模型PaddleX 自建的数据集,覆盖证件和文档等多个场景,包含 1000 张图片。
      • 文本图像矫正模型:DocUNet
      • 文本检测模型PaddleOCR 自建的中文数据集,覆盖街景、网图、文档、手写多个场景,其中检测包含 500 张图片。
      • 中文识别模型: PaddleOCR 自建的中文数据集,覆盖街景、网图、文档、手写多个场景,其中文本识别包含 1.1w 张图片。
      • ch_SVTRv2_recPaddleOCR算法模型挑战赛 - 赛题一OCR端到端识别任务A榜评估集。
      • ch_RepSVTR_recPaddleOCR算法模型挑战赛 - 赛题一OCR端到端识别任务B榜评估集。
      • 英文识别模型PaddleX 自建的英文数据集。
      • 多语言识别模型PaddleX 自建的多语种数据集。
      • 文本行方向分类模型PaddleX 自建的数据集,覆盖证件和文档等多个场景,包含 1000 张图片。
    • 硬件配置:
      • GPUNVIDIA Tesla T4
      • CPUIntel Xeon Gold 6271C @ 2.60GHz
      • 其他环境Ubuntu 20.04 / cuDNN 8.6 / TensorRT 8.5.2.2
  • 推理模式说明
模式 GPU配置 CPU配置 加速技术组合
常规模式 FP32精度 / 无TRT加速 FP32精度 / 8线程 PaddleInference
高性能模式 选择先验精度类型和加速策略的最优组合 FP32精度 / 8线程 选择先验最优后端Paddle/OpenVINO/TRT等

如果您更注重模型的精度,请选择精度较高的模型;如果您更在意模型的推理速度,请选择推理速度较快的模型;如果您关注模型的存储大小,请选择存储体积较小的模型。

2. 快速开始

在本地使用通用OCR产线前请确保您已经按照安装教程完成了wheel包安装。安装完成后可以在本地使用命令行体验或 Python 集成。

2.1 命令行方式

一行命令即可快速体验OCR产线效果

# 默认使用 PP-OCRv4 的中文语言模型
paddleocr ocr -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png

# 通过 --lang 指定语言模型
paddleocr ocr -i ./general_ocr_002.png --lang en

# 通过 --ocr_version 指定 PP-OCR 其他版本
paddleocr ocr -i ./general_ocr_002.png --ocr_version PP-OCRv3

# 通过 --device 指定模型推理时使用 GPU
paddleocr ocr -i ./general_ocr_002.png --device gpu

# 通过 --use_textline_orientation 指定是否使用文本行方向分类模型
paddleocr ocr -i ./general_ocr_002.png --use_textline_orientation False
命令行支持更多参数设置,点击展开以查看命令行参数的详细说明
参数 参数说明 参数类型 默认值
doc_orientation_classify_model_name 文档方向分类模型的名称。如果设置为None, 将会使用产线默认模型。 str None
doc_orientation_classify_model_dir 文档方向分类模型的目录路径。如果设置为None, 将会下载官方模型。 str None
doc_unwarping_model_name 文本图像矫正模型的名称。如果设置为None, 将会使用产线默认模型。 str None
doc_unwarping_model_dir 文本图像矫正模型的目录路径。如果设置为None, 将会下载官方模型。 str None
text_detection_model_name 文本检测模型的名称。如果设置为None, 将会使用产线默认模型。 str None
text_detection_model_dir 文本检测模型的目录路径。如果设置为None, 将会下载官方模型。 str None
text_line_orientation_model_name 文本行方向模型的名称。如果设置为None, 将会使用产线默认模型。 str None
text_line_orientation_model_dir 文本行方向模型的目录路径。如果设置为None, 将会下载官方模型。 str None
text_line_orientation_batch_size 文本行方向模型的批处理大小。如果设置为None, 将默认设置批处理大小为1 int None
text_recognition_model_name 文本识别模型的名称。如果设置为None, 将会使用产线默认模型。 str None
text_recognition_model_dir 文本识别模型的目录路径。如果设置为None, 将会下载官方模型。 str None
text_recognition_batch_size 文本识别模型的批处理大小。如果设置为None, 将默认设置批处理大小为1 int None
use_doc_orientation_classify 是否使用文档方向分类功能。如果设置为None, 将默认使用产线初始化的该参数值,初始化为True bool None
use_doc_unwarping 是否使用文本图像矫正功能。如果设置为None, 将默认使用产线初始化的该参数值,初始化为True bool None
use_textline_orientation 是否使用文本行方向功能。如果设置为None, 将默认使用产线初始化的该参数值,初始化为True bool None
text_det_limit_side_len 文本检测的最大边长度限制。
  • int:大于 0 的任意整数;
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 960
int None
text_det_limit_type 文本检测的边长度限制类型。
  • str:支持 minmaxmin 表示保证图像最短边不小于 det_limit_side_lenmax 表示保证图像最长边不大于 limit_side_len
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 max
str None
text_det_thresh 文本检测像素阈值,输出的概率图中,得分大于该阈值的像素点才会被认为是文字像素点。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.3
float None
text_det_box_thresh 文本检测框阈值,检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.6
float None
text_det_unclip_ratio 文本检测扩张系数,使用该方法对文字区域进行扩张,该值越大,扩张的面积越大。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 2.0
float None
text_det_input_shape 文本检测的输入形状。 tuple None
text_rec_score_thresh 文本识别阈值,得分大于该阈值的文本结果会被保留。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.0。即不设阈值
float None
text_rec_input_shape 文本识别的输入形状。 tuple None
lang 使用指定语言的 OCR 模型。
  • ch:中文;
  • en:英文;
  • korean:韩文;
  • japan:日文;
  • chinese_cht:繁体中文;
  • te:泰卢固文;
  • ka:卡纳达文;
  • ta:泰米尔文;
  • None:如果设置为 None, 将默认使用ch
str None
ocr_version OCR 版本。
  • PP-OCRv5:使用PP-OCRv5系列模型;
  • PP-OCRv4:使用PP-OCRv4系列模型;
  • PP-OCRv3:使用PP-OCRv3系列模型;
  • None:如果设置为 None, 将默认使用PP-OCRv5系列模型;
str None
input 待预测数据,支持多种输入类型,必填。
  • Python Var:如 numpy.ndarray 表示的图像数据
  • str如图像文件或者PDF文件的本地路径/root/data/img.jpg如URL链接如图像文件或PDF文件的网络URL示例如本地目录,该目录下需包含待预测图像,如本地路径:/root/data/(当前不支持目录中包含PDF文件的预测PDF文件需要指定到具体文件路径)
  • List:列表元素需为上述类型数据,如[numpy.ndarray, numpy.ndarray]["/root/data/img1.jpg", "/root/data/img2.jpg"]["/root/data1", "/root/data2"]
Python Var|str|list None
save_path 指定推理结果文件保存的路径。如果设置为None, 推理结果将不会保存到本地。 str None
device 用于推理的设备。支持指定具体卡号。
  • CPU:如 cpu 表示使用 CPU 进行推理;
  • GPU:如 gpu:0 表示使用第 1 块 GPU 进行推理;
  • NPU:如 npu:0 表示使用第 1 块 NPU 进行推理;
  • XPU:如 xpu:0 表示使用第 1 块 XPU 进行推理;
  • MLU:如 mlu:0 表示使用第 1 块 MLU 进行推理;
  • DCU:如 dcu:0 表示使用第 1 块 DCU 进行推理;
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备如果没有则使用 CPU 设备;
str None
enable_hpi 是否启用高性能推理。 bool False
use_tensorrt 是否使用 TensorRT 进行推理加速。 bool False
min_subgraph_size 最小子图大小,用于优化模型子图的计算。 int 3
precision 计算精度,如 fp32、fp16。 str fp32
enable_mkldnn 是否启用 MKL-DNN 加速库。如果设置为None, 将默认启用。 bool None
cpu_threads 在 CPU 上进行推理时使用的线程数。 int 8

运行结果会被打印到终端上默认配置的OCR产线的运行结果如下

{'res': {'input_path': '/root/.paddlex/predict_input/general_ocr_002.png', 'page_index': None, 'model_settings': {'use_doc_preprocessor': True, 'use_textline_orientation': True}, 'doc_preprocessor_res': {'input_path': None, 'page_index': None, 'model_settings': {'use_doc_orientation_classify': True, 'use_doc_unwarping': True}, 'angle': 0}, 
'dt_polys': array([[[143,   6],
        ...,
        [143,  71]],
       ...,
       [[325, 361],
        ...,
        [325, 386]]], dtype=int16), 
'text_det_params': {'limit_side_len': 960, 'limit_type': 'max', 'thresh': 0.3, 'box_thresh': 0.6, 'unclip_ratio': 2.0}, 'text_type': 'general', 'textline_orientation_angles': array([0, ..., 0]), 'text_rec_score_thresh': 0.0, 
'rec_texts': ['登机牌', 'BOARDING', 'PASS', '航班FLIGHT', '日期', 'DATE', '舱位', 'CLASS', '序号', 'SERIALNO.', '座位号', 'SEAT NO.', '一', 'MU 2379', '03DEC', 'M', '0', '目的地TO', '始发地', 'FROM', '登机口', 'GATE', '登机时间', 'BDT', '福州', 'FUZHOU', 'TAIYUAN', 'G11', '姓名NAME', '身份识别IDNO', 'ZHANGQIWEI', '张祺伟', '票号TKTNO', '票价FARE', 'ETKT7813699238489/1'], 
'rec_scores': array([0.99898976, ..., 0.99082142]), 
'rec_polys': array([[[143,   6],
        ...,
        [143,  71]],
       ...,
       [[325, 361],
        ...,
        [325, 386]]], dtype=int16), 
'rec_boxes': array([[143, ...,  71],
       ...,
       [325, ..., 392]], dtype=int16)}}

若指定了save_path,则会保存可视化结果在save_path下。可视化结果如下:

2.2 Python脚本方式集成

命令行方式是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下:

from paddleocr import PaddleOCR

ocr = PaddleOCR()
# ocr = PaddleOCR(lang="en") # 通过 lang 参数来使用英文模型
# ocr = PaddleOCR(ocr_version="PP-OCRv3") # 通过 ocr_version 参数来使用 PP-OCR 其他版本
# ocr = PaddleOCR(device="gpu") # 通过 device 参数使得在模型推理时使用 GPU
# ocr = PaddleOCR(use_textline_orientation=False) # 通过 device 参数指定不使用文本行方向分类模型
result = ocr.predict("./general_ocr_002.png")
for res in result:
    res.print()
    res.save_to_img("output")
    res.save_to_json("output")

在上述 Python 脚本中,执行了如下几个步骤:

1通过 PaddleOCR() 实例化 OCR 产线对象,具体参数说明如下:
参数 参数说明 参数类型 默认值
doc_orientation_classify_model_name 文档方向分类模型的名称。如果设置为None, 将会使用产线默认模型。 str None
doc_orientation_classify_model_dir 文档方向分类模型的目录路径。如果设置为None, 将会下载官方模型。 str None
doc_unwarping_model_name 文本图像矫正模型的名称。如果设置为None, 将会使用产线默认模型。 str None
doc_unwarping_model_dir 文本图像矫正模型的目录路径。如果设置为None, 将会下载官方模型。 str None
text_detection_model_name 文本检测模型的名称。如果设置为None, 将会使用产线默认模型。 str None
text_detection_model_dir 文本检测模型的目录路径。如果设置为None, 将会下载官方模型。 str None
text_line_orientation_model_name 文本行方向模型的名称。如果设置为None, 将会使用产线默认模型。 str None
text_line_orientation_model_dir 文本行方向模型的目录路径。如果设置为None, 将会下载官方模型。 str None
text_line_orientation_batch_size 文本行方向模型的批处理大小。如果设置为None, 将默认设置批处理大小为1 int None
text_recognition_model_name 文本识别模型的名称。如果设置为None, 将会使用产线默认模型。 str None
text_recognition_model_dir 文本识别模型的目录路径。如果设置为None, 将会下载官方模型。 str None
text_recognition_batch_size 文本识别模型的批处理大小。如果设置为None, 将默认设置批处理大小为1 int None
use_doc_orientation_classify 是否使用文档方向分类功能。如果设置为None, 将默认使用产线初始化的该参数值,初始化为True bool None
use_doc_unwarping 是否使用文本图像矫正功能。如果设置为None, 将默认使用产线初始化的该参数值,初始化为True bool None
use_textline_orientation 是否使用文本行方向功能。如果设置为None, 将默认使用产线初始化的该参数值,初始化为True bool None
text_det_limit_side_len 文本检测的最大边长度限制。
  • int:大于 0 的任意整数;
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 960
int None
text_det_limit_type 文本检测的边长度限制类型。
  • str:支持 minmaxmin 表示保证图像最短边不小于 det_limit_side_lenmax 表示保证图像最长边不大于 limit_side_len
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化为 max
str None
text_det_thresh 文本检测像素阈值,输出的概率图中,得分大于该阈值的像素点才会被认为是文字像素点。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.3
float None
text_det_box_thresh 文本检测框阈值,检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.6
float None
text_det_unclip_ratio 文本检测扩张系数,使用该方法对文字区域进行扩张,该值越大,扩张的面积越大。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 2.0
float None
text_det_input_shape 文本检测的输入形状。 tuple None
text_rec_score_thresh 文本识别阈值,得分大于该阈值的文本结果会被保留。
  • float:大于 0 的任意浮点数
  • None:如果设置为 None, 将默认使用产线初始化的该参数值 0.0。即不设阈值
float None
text_rec_input_shape 文本识别的输入形状。 tuple None
lang 使用指定语言的 OCR 模型。
  • ch:中文;
  • en:英文;
  • korean:韩文;
  • japan:日文;
  • chinese_cht:繁体中文;
  • te:泰卢固文;
  • ka:卡纳达文;
  • ta:泰米尔文;
  • None:如果设置为 None, 将默认使用ch
str None
ocr_version OCR 版本。
  • PP-OCRv5:使用PP-OCRv5系列模型;
  • PP-OCRv4:使用PP-OCRv4系列模型;
  • PP-OCRv3:使用PP-OCRv3系列模型;
  • None:如果设置为 None, 将默认使用PP-OCRv5系列模型;
str None
device 用于推理的设备。支持指定具体卡号。
  • CPU:如 cpu 表示使用 CPU 进行推理;
  • GPU:如 gpu:0 表示使用第 1 块 GPU 进行推理;
  • NPU:如 npu:0 表示使用第 1 块 NPU 进行推理;
  • XPU:如 xpu:0 表示使用第 1 块 XPU 进行推理;
  • MLU:如 mlu:0 表示使用第 1 块 MLU 进行推理;
  • DCU:如 dcu:0 表示使用第 1 块 DCU 进行推理;
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备如果没有则使用 CPU 设备;
str None
enable_hpi 是否启用高性能推理。 bool False
use_tensorrt 是否使用 TensorRT 进行推理加速。 bool False
min_subgraph_size 最小子图大小,用于优化模型子图的计算。 int 3
precision 计算精度,如 fp32、fp16。 str fp32
enable_mkldnn 是否启用 MKL-DNN 加速库。如果设置为None, 将默认启用。 bool None
cpu_threads 在 CPU 上进行推理时使用的线程数。 int 8
2调用 OCR 产线对象的 predict() 方法进行推理预测,该方法会返回一个结果列表。另外,产线还提供了 predict_iter() 方法。两者在参数接受和结果返回方面是完全一致的,区别在于 predict_iter() 返回的是一个 generator,能够逐步处理和获取预测结果,适合处理大型数据集或希望节省内存的场景。可以根据实际需求选择使用这两种方法中的任意一种。以下是 predict() 方法的参数及其说明:
参数 参数说明 参数类型 默认值
input 待预测数据,支持多种输入类型,必填。
  • Python Var:如 numpy.ndarray 表示的图像数据
  • str如图像文件或者PDF文件的本地路径/root/data/img.jpg如URL链接如图像文件或PDF文件的网络URL示例如本地目录,该目录下需包含待预测图像,如本地路径:/root/data/(当前不支持目录中包含PDF文件的预测PDF文件需要指定到具体文件路径)
  • List:列表元素需为上述类型数据,如[numpy.ndarray, numpy.ndarray]["/root/data/img1.jpg", "/root/data/img2.jpg"]["/root/data1", "/root/data2"]
Python Var|str|list None
device 与实例化时的参数相同。 str None
use_doc_orientation_classify 是否在推理时使用文档方向分类模块。 bool None
use_doc_unwarping 是否在推理时使用文本图像矫正模块。 bool None
use_textline_orientation 是否在推理时使用文本行方向分类模块。 bool None
text_det_limit_side_len 与实例化时的参数相同。 int None
text_det_limit_type 与实例化时的参数相同。 str None
text_det_thresh 与实例化时的参数相同。 float None
text_det_box_thresh 与实例化时的参数相同。 float None
text_det_unclip_ratio 与实例化时的参数相同。 float None
text_rec_score_thresh 与实例化时的参数相同。 float None
3对预测结果进行处理每个样本的预测结果均为对应的Result对象且支持打印、保存为图片、保存为json文件的操作:
方法 方法说明 参数 参数类型 参数说明 默认值
print() 打印结果到终端 format_json bool 是否对输出内容进行使用 JSON 缩进格式化 True
indent int 指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效 4
ensure_ascii bool 控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_jsonTrue时有效 False
save_to_json() 将结果保存为json格式的文件 save_path str 保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致
indent int 指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效 4
ensure_ascii bool 控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_jsonTrue时有效 False
save_to_img() 将结果保存为图像格式的文件 save_path str 保存的文件路径,支持目录或文件路径
  • 调用print() 方法会将结果打印到终端,打印到终端的内容解释如下:

    • input_path: (str) 待预测图像的输入路径

    • page_index: (Union[int, None]) 如果输入是PDF文件则表示当前是PDF的第几页否则为 None

    • model_settings: (Dict[str, bool]) 配置产线所需的模型参数

      • use_doc_preprocessor: (bool) 控制是否启用文档预处理子产线
      • use_textline_orientation: (bool) 控制是否启用文本行方向分类功能
    • doc_preprocessor_res: (Dict[str, Union[str, Dict[str, bool], int]]) 文档预处理子产线的输出结果。仅当use_doc_preprocessor=True时存在

      • input_path: (Union[str, None]) 图像预处理子产线接受的图像路径,当输入为numpy.ndarray时,保存为None
      • model_settings: (Dict) 预处理子产线的模型配置参数
        • use_doc_orientation_classify: (bool) 控制是否启用文档方向分类
        • use_doc_unwarping: (bool) 控制是否启用文本图像矫正
      • angle: (int) 文档方向分类的预测结果。启用时取值为[0,1,2,3],分别对应[0°,90°,180°,270°];未启用时为-1
    • dt_polys: (List[numpy.ndarray]) 文本检测的多边形框列表。每个检测框由4个顶点坐标构成的numpy数组表示数组shape为(4, 2)数据类型为int16

    • dt_scores: (List[float]) 文本检测框的置信度列表

    • text_det_params: (Dict[str, Dict[str, int, float]]) 文本检测模块的配置参数

      • limit_side_len: (int) 图像预处理时的边长限制值
      • limit_type: (str) 边长限制的处理方式
      • thresh: (float) 文本像素分类的置信度阈值
      • box_thresh: (float) 文本检测框的置信度阈值
      • unclip_ratio: (float) 文本检测框的膨胀系数
      • text_type: (str) 文本检测的类型,当前固定为"general"
    • textline_orientation_angles: (List[int]) 文本行方向分类的预测结果。启用时返回实际角度值(如[0,0,1]),未启用时返回[-1,-1,-1]

    • text_rec_score_thresh: (float) 文本识别结果的过滤阈值

    • rec_texts: (List[str]) 文本识别结果列表,仅包含置信度超过text_rec_score_thresh的文本

    • rec_scores: (List[float]) 文本识别的置信度列表,已按text_rec_score_thresh过滤

    • rec_polys: (List[numpy.ndarray]) 经过置信度过滤的文本检测框列表,格式同dt_polys

    • rec_boxes: (numpy.ndarray) 检测框的矩形边界框数组shape为(n, 4)dtype为int16。每一行表示一个矩形框的[x_min, y_min, x_max, y_max]坐标 ,其中(x_min, y_min)为左上角坐标,(x_max, y_max)为右下角坐标

  • 调用save_to_json() 方法会将上述内容保存到指定的save_path中,如果指定为目录,则保存的路径为save_path/{your_img_basename}_res.json如果指定为文件则直接保存到该文件中。由于json文件不支持保存numpy数组因此会将其中的numpy.array类型转换为列表形式。

  • 调用save_to_img() 方法会将可视化结果保存到指定的save_path中,如果指定为目录,则保存的路径为save_path/{your_img_basename}_ocr_res_img.{your_img_extension},如果指定为文件,则直接保存到该文件中。(产线通常包含较多结果图片,不建议直接指定为具体的文件路径,否则多张图会被覆盖,仅保留最后一张图)

  • 此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:
属性 属性说明
json 获取预测的 json 格式的结果
img 获取格式为 dict 的可视化图像
  • json 属性获取的预测结果为dict类型的数据相关内容与调用 save_to_json() 方法保存的内容一致。
  • img 属性返回的预测结果是一个字典类型的数据。其中,键分别为 ocr_res_imgpreprocessed_img,对应的值是两个 Image.Image 对象:一个用于显示 OCR 结果的可视化图像,另一个用于展示图像预处理的可视化图像。如果没有使用图像预处理子模块,则字典中只包含 ocr_res_img

3. 开发集成/部署

如果通用 OCR 产线可以达到您对产线推理速度和精度的要求,您可以直接进行开发集成/部署。

若您需要将通用 OCR 产线直接应用在您的Python项目中可以参考2.2 Python脚本方式中的示例代码。

此外PaddleOCR 也提供了其他两种部署方式,详细说明如下:

🚀 高性能推理在实际生产环境中许多应用对部署策略的性能指标尤其是响应速度有着较严苛的标准以确保系统的高效运行与用户体验的流畅性。为此PaddleOCR 提供高性能推理功能,旨在对模型推理及前后处理进行深度性能优化,实现端到端流程的显著提速,详细的高性能推理流程请参考高性能推理指南

☁️ 服务化部署:服务化部署是实际生产环境中常见的一种部署形式。通过将推理功能封装为服务,客户端可以通过网络请求来访问这些服务,以获取推理结果。详细的产线服务化部署流程请参考服务化部署指南

以下是基础服务化部署的API参考与多语言服务调用示例

API参考

对于服务提供的主要操作:

  • HTTP请求方法为POST。
  • 请求体和响应体均为JSON数据JSON对象
  • 当请求处理成功时,响应状态码为200,响应体的属性如下:
名称 类型 含义
logId string 请求的UUID。
errorCode integer 错误码。固定为0
errorMsg string 错误说明。固定为"Success"
result object 操作结果。
  • 当请求处理未成功时,响应体的属性如下:
名称 类型 含义
logId string 请求的UUID。
errorCode integer 错误码。与响应状态码相同。
errorMsg string 错误说明。

服务提供的主要操作如下:

  • infer

获取图像OCR结果。

POST /ocr

  • 请求体的属性如下:
名称 类型 含义 是否必填
file string 服务器可访问的图像文件或PDF文件的URL或上述类型文件内容的Base64编码结果。默认对于超过10页的PDF文件只有前10页的内容会被处理。
要解除页数限制,请在产线配置文件中添加以下配置:
Serving:
  extra:
    max_num_input_imgs: null
fileType integer | null 文件类型。0表示PDF文件1表示图像文件。若请求体无此属性则将根据URL推断文件类型。
useDocOrientationClassify boolean | null 请参阅产线对象中 predict 方法的 use_doc_orientation_classify 参数相关说明。
useDocUnwarping boolean | null 请参阅产线对象中 predict 方法的 use_doc_unwarping 参数相关说明。
useTextlineOrientation boolean | null 请参阅产线对象中 predict 方法的 use_textline_orientation 参数相关说明。
textDetLimitSideLen integer | null 请参阅产线对象中 predict 方法的 text_det_limit_side_len 参数相关说明。
textDetLimitType string | null 请参阅产线对象中 predict 方法的 text_det_limit_type 参数相关说明。
textDetThresh number | null 请参阅产线对象中 predict 方法的 text_det_thresh 参数相关说明。
textDetBoxThresh number | null 请参阅产线对象中 predict 方法的 text_det_box_thresh 参数相关说明。
textDetUnclipRatio number | null 请参阅产线对象中 predict 方法的 text_det_unclip_ratio 参数相关说明。
textRecScoreThresh number | null 请参阅产线对象中 predict 方法的 text_rec_score_thresh 参数相关说明。
  • 请求处理成功时,响应体的result具有如下属性:
名称 类型 含义
ocrResults object OCR结果。数组长度为1对于图像输入或实际处理的文档页数对于PDF输入。对于PDF输入数组中的每个元素依次表示PDF文件中实际处理的每一页的结果。
dataInfo object 输入数据信息。

ocrResults中的每个元素为一个object,具有如下属性:

名称 类型 含义
prunedResult object 产线对象的 predict 方法生成结果的 JSON 表示中 res 字段的简化版本,其中去除了 input_pathpage_index 字段。
ocrImage string | null OCR结果图其中标注检测到的文本位置。图像为JPEG格式使用Base64编码。
docPreprocessingImage string | null 可视化结果图像。图像为JPEG格式使用Base64编码。
inputImage string | null 输入图像。图像为JPEG格式使用Base64编码。
多语言调用服务示例
Python

import base64
import requests

API_URL = "http://localhost:8080/ocr"
file_path = "./demo.jpg"

with open(file_path, "rb") as file:
    file_bytes = file.read()
    file_data = base64.b64encode(file_bytes).decode("ascii")

payload = {"file": file_data, "fileType": 1}

response = requests.post(API_URL, json=payload)

assert response.status_code == 200
result = response.json()["result"]
for i, res in enumerate(result["ocrResults"]):
    print(res["prunedResult"])
    ocr_img_path = f"ocr_{i}.jpg"
    with open(ocr_img_path, "wb") as f:
        f.write(base64.b64decode(res["ocrImage"]))
    print(f"Output image saved at {ocr_img_path}")

4. 二次开发

如果通用 OCR 产线提供的默认模型权重在您的场景中,精度或速度不满意,您可以尝试利用您自己拥有的特定领域或应用场景的数据对现有模型进行进一步的微调,以提升通用 OCR 产线的在您的场景中的识别效果。

...