--- comments: true --- # 通用OCR产线使用教程 ## 1. OCR产线介绍 OCR(光学字符识别,Optical Character Recognition)是一种将图像中的文字转换为可编辑文本的技术。它广泛应用于文档数字化、信息提取和数据处理等领域。OCR 可以识别印刷文本、手写文本,甚至某些类型的字体和符号。 通用 OCR 产线用于解决文字识别任务,提取图片中的文字信息以文本形式输出,本产线支持PP-OCRv3、PP-OCRv4、PP-OCRv5模型的使用,其中默认模型为 PaddleOCR3.0 发布的 PP-OCRv5_mobile 模型,其在多个场景中较 PP-OCRv4_mobile 提升 13 个百分点。 通用OCR产线中包含以下5个模块。每个模块均可独立进行训练和推理,并包含多个模型。有关详细信息,请点击相应模块以查看文档。 - [文档图像方向分类模块](../module_usage/doc_img_orientation_classification.md) (可选) - [文本图像矫正模块](../module_usage/text_image_unwarping.md) (可选) - [文本行方向分类模块](../module_usage/text_line_orientation_classification.md) (可选) - [文本检测模块](../module_usage/text_detection.md) - [文本识别模块](../module_usage/text_recognition.md) 在本产线中,您可以根据下方的基准测试数据选择使用的模型。
文档图像方向分类模块(可选):
模型模型下载链接 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-OCRv5_server_det推理模型/训练模型 83.8 89.55 / 70.19 371.65 / 371.65 84.3 PP-OCRv5 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署
PP-OCRv5_mobile_det推理模型/训练模型 79.0 8.79 / 3.13 51.00 / 28.58 4.7 PP-OCRv5 的移动端文本检测模型,效率更高,适合在端侧设备部署
PP-OCRv4_server_det推理模型/训练模型 69.2 83.34 / 80.91 442.58 / 442.58 109 PP-OCRv4 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署
PP-OCRv4_mobile_det推理模型/训练模型 63.8 8.79 / 3.13 51.00 / 28.58 4.7 PP-OCRv4 的移动端文本检测模型,效率更高,适合在端侧设备部署
文本识别模块:
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时(ms)
[常规模式 / 高性能模式]
CPU推理耗时(ms)
[常规模式 / 高性能模式]
模型存储大小(M) 介绍
PP-OCRv5_server_rec推理模型/训练模型 86.38 8.45/2.36 122.69/122.69 81 M PP-OCRv5_rec 是新一代文本识别模型。该模型致力于以单一模型高效、精准地支持简体中文、繁体中文、英文、日文四种主要语言,以及手写、竖版、拼音、生僻字等复杂文本场景的识别。在保持识别效果的同时,兼顾推理速度和模型鲁棒性,为各种场景下的文档理解提供高效、精准的技术支撑。
PP-OCRv5_mobile_rec推理模型/训练模型 81.29 1.46/5.43 5.32/91.79 16 M
PP-OCRv4_server_rec_doc推理模型/训练模型 81.53 6.65 / 2.38 32.92 / 32.92 74.7 M PP-OCRv4_server_rec_doc是在PP-OCRv4_server_rec的基础上,在更多中文文档数据和PP-OCR训练数据的混合数据训练而成,增加了部分繁体字、日文、特殊字符的识别能力,可支持识别的字符为1.5万+,除文档相关的文字识别能力提升外,也同时提升了通用文字的识别能力
PP-OCRv4_mobile_rec推理模型/训练模型 78.74 4.82 / 1.20 16.74 / 4.64 10.6 M PP-OCRv4的轻量级识别模型,推理效率高,可以部署在包含端侧设备的多种硬件设备中
PP-OCRv4_server_rec 推理模型/训练模型 80.61 6.58 / 2.43 33.17 / 33.17 71.2 M PP-OCRv4的服务器端模型,推理精度高,可以部署在多种不同的服务器上
en_PP-OCRv4_mobile_rec推理模型/训练模型 70.39 4.81 / 0.75 16.10 / 5.31 6.8 M 基于PP-OCRv4识别模型训练得到的超轻量英文识别模型,支持英文、数字识别
> ❗ 以上列出的是文本识别模块重点支持的6个核心模型,该模块总共支持20个全量模型,包含多个多语言文本识别模型,完整的模型列表如下:
👉模型列表详情 * 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 1.46/5.43 5.32/91.79 81 M PP-OCRv5_rec 是新一代文本识别模型。该模型致力于以单一模型高效、精准地支持简体中文、繁体中文、英文、日文四种主要语言,以及手写、竖版、拼音、生僻字等复杂文本场景的识别。在保持识别效果的同时,兼顾推理速度和模型鲁棒性,为各种场景下的文档理解提供高效、精准的技术支撑。
PP-OCRv5_mobile_rec推理模型/训练模型 81.29 66.00 83.55 54.65 1.46/5.43 5.32/91.79 16 M
* 中文识别模型
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时(ms)
[常规模式 / 高性能模式]
CPU推理耗时(ms)
[常规模式 / 高性能模式]
模型存储大小(M) 介绍
PP-OCRv4_server_rec_doc推理模型/训练模型 81.53 6.65 / 2.38 32.92 / 32.92 74.7 M PP-OCRv4_server_rec_doc是在PP-OCRv4_server_rec的基础上,在更多中文文档数据和PP-OCR训练数据的混合数据训练而成,增加了部分繁体字、日文、特殊字符的识别能力,可支持识别的字符为1.5万+,除文档相关的文字识别能力提升外,也同时提升了通用文字的识别能力
PP-OCRv4_mobile_rec推理模型/训练模型 78.74 4.82 / 1.20 16.74 / 4.64 10.6 M PP-OCRv4的轻量级识别模型,推理效率高,可以部署在包含端侧设备的多种硬件设备中
PP-OCRv4_server_rec 推理模型/训练模型 80.61 6.58 / 2.43 33.17 / 33.17 71.2 M PP-OCRv4的服务器端模型,推理精度高,可以部署在多种不同的服务器上
PP-OCRv3_mobile_rec推理模型/训练模型 72.96 5.87 / 1.19 9.07 / 4.28 9.2 M PP-OCRv3的轻量级识别模型,推理效率高,可以部署在包含端侧设备的多种硬件设备中
模型模型下载链接 识别 Avg Accuracy(%) GPU推理耗时(ms)
[常规模式 / 高性能模式]
CPU推理耗时(ms)
[常规模式 / 高性能模式]
模型存储大小(M) 介绍
ch_SVTRv2_rec推理模型/训练模型 68.81 8.08 / 2.74 50.17 / 42.50 73.9 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 22.1 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 6.8 M 基于PP-OCRv4识别模型训练得到的超轻量英文识别模型,支持英文、数字识别
en_PP-OCRv3_mobile_rec推理模型/训练模型 70.69 5.44 / 0.75 8.65 / 5.57 7.8 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 8.6 M 基于PP-OCRv3识别模型训练得到的超轻量韩文识别模型,支持韩文、数字识别
japan_PP-OCRv3_mobile_rec推理模型/训练模型 45.69 5.70 / 1.02 8.48 / 4.07 8.8 M 基于PP-OCRv3识别模型训练得到的超轻量日文识别模型,支持日文、数字识别
chinese_cht_PP-OCRv3_mobile_rec推理模型/训练模型 82.06 5.90 / 1.28 9.28 / 4.34 9.7 M 基于PP-OCRv3识别模型训练得到的超轻量繁体中文识别模型,支持繁体中文、数字识别
te_PP-OCRv3_mobile_rec推理模型/训练模型 95.88 5.42 / 0.82 8.10 / 6.91 7.8 M 基于PP-OCRv3识别模型训练得到的超轻量泰卢固文识别模型,支持泰卢固文、数字识别
ka_PP-OCRv3_mobile_rec推理模型/训练模型 96.96 5.25 / 0.79 9.09 / 3.86 8.0 M 基于PP-OCRv3识别模型训练得到的超轻量卡纳达文识别模型,支持卡纳达文、数字识别
ta_PP-OCRv3_mobile_rec推理模型/训练模型 76.83 5.23 / 0.75 10.13 / 4.30 8.0 M 基于PP-OCRv3识别模型训练得到的超轻量泰米尔文识别模型,支持泰米尔文、数字识别
latin_PP-OCRv3_mobile_rec推理模型/训练模型 76.93 5.20 / 0.79 8.83 / 7.15 7.8 M 基于PP-OCRv3识别模型训练得到的超轻量拉丁文识别模型,支持拉丁文、数字识别
arabic_PP-OCRv3_mobile_rec推理模型/训练模型 73.55 5.35 / 0.79 8.80 / 4.56 7.8 M 基于PP-OCRv3识别模型训练得到的超轻量阿拉伯字母识别模型,支持阿拉伯字母、数字识别
cyrillic_PP-OCRv3_mobile_rec推理模型/训练模型 94.28 5.23 / 0.76 8.89 / 3.88 7.9 M 基于PP-OCRv3识别模型训练得到的超轻量斯拉夫字母识别模型,支持斯拉夫字母、数字识别
devanagari_PP-OCRv3_mobile_rec推理模型/训练模型 96.44 5.22 / 0.79 8.56 / 4.06 7.9 M 基于PP-OCRv3识别模型训练得到的超轻量梵文字母识别模型,支持梵文字母、数字识别
测试环境说明:
模式 GPU配置 CPU配置 加速技术组合
常规模式 FP32精度 / 无TRT加速 FP32精度 / 8线程 PaddleInference
高性能模式 选择先验精度类型和加速策略的最优组合 FP32精度 / 8线程 选择先验最优后端(Paddle/OpenVINO/TRT等)

如果您更注重模型的精度,请选择精度较高的模型;如果您更在意模型的推理速度,请选择推理速度较快的模型;如果您关注模型的存储大小,请选择存储体积较小的模型。 ## 2. 快速开始 在本地使用通用OCR产线前,请确保您已经按照[安装教程](../installation.md)完成了wheel包安装。安装完成后,可以在本地使用命令行体验或 Python 集成。 ### 2.1 命令行方式 一行命令即可快速体验OCR产线效果。运行以下代码前,请您下载[示例图片](https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png)到本地: ```bash # 默认使用 PP-OCRv5 模型 paddleocr ocr -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png \ --use_doc_orientation_classify False \ --use_doc_unwarping False \ --use_textline_orientation False \ --save_path ./output \ --device gpu:0 # 通过 --ocr_version 指定 PP-OCR 其他版本 paddleocr ocr -i ./general_ocr_002.png --ocr_version PP-OCRv4 ```
命令行支持更多参数设置,点击展开以查看命令行参数的详细说明
参数 参数说明 参数类型 默认值
input 待预测数据,必填。如图像文件或者PDF文件的本地路径:/root/data/img.jpg如URL链接,如图像文件或PDF文件的网络URL:示例如本地目录,该目录下需包含待预测图像,如本地路径:/root/data/(当前不支持目录中包含PDF文件的预测,PDF文件需要指定到具体文件路径)。 str
save_path 指定推理结果文件保存的路径。如果不设置,推理结果将不会保存到本地。 str
doc_orientation_classify_model_name 文档方向分类模型的名称。如果不设置,将会使用产线默认模型。 str
doc_orientation_classify_model_dir 文档方向分类模型的目录路径。如果不设置,将会下载官方模型。 str
doc_unwarping_model_name 文本图像矫正模型的名称。如果不设置,将会使用产线默认模型。 str
doc_unwarping_model_dir 文本图像矫正模型的目录路径。如果不设置,将会下载官方模型。 str
text_detection_model_name 文本检测模型的名称。如果不设置,将会使用产线默认模型。 str
text_detection_model_dir 文本检测模型的目录路径。如果不设置,将会下载官方模型。 str
text_line_orientation_model_name 文本行方向模型的名称。如果不设置,将会使用产线默认模型。 str
text_line_orientation_model_dir 文本行方向模型的目录路径。如果不设置,将会下载官方模型。 str
text_line_orientation_batch_size 文本行方向模型的批处理大小。如果不设置,将默认设置批处理大小为1 int
text_recognition_model_name 文本识别模型的名称。如果不设置,将会使用产线默认模型。 str
text_recognition_model_dir 文本识别模型的目录路径。如果不设置,将会下载官方模型。 str
text_recognition_batch_size 文本识别模型的批处理大小。如果不设置,将默认设置批处理大小为1 int
use_doc_orientation_classify 是否加载并使用文档方向分类功能。如果不设置,将默认使用产线初始化的该参数值,初始化为True bool
use_doc_unwarping 是否加载并使用文本图像矫正功能。如果不设置,将默认使用产线初始化的该参数值,初始化为True bool
use_textline_orientation 是否加载并使用文本行方向功能。如果不设置,将默认使用产线初始化的该参数值,初始化为True bool
text_det_limit_side_len 文本检测的最大边长度限制。 大于 0 的任意整数。如果不设置,将默认使用产线初始化的该参数值,初始化为 960 int
text_det_limit_type 文本检测的边长度限制类型。支持 minmaxmin 表示保证图像最短边不小于 det_limit_side_lenmax 表示保证图像最长边不大于 limit_side_len。如果不设置,将默认使用产线初始化的该参数值,初始化为 max str
text_det_thresh 文本检测像素阈值,输出的概率图中,得分大于该阈值的像素点才会被认为是文字像素点。 大于0的任意浮点数。如果不设置,将默认使用产线初始化的该参数值 0.3 float
text_det_box_thresh 文本检测框阈值,检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域。 大于 0 的任意浮点数。如果不设置,将默认使用产线初始化的该参数值 0.6 float
text_det_unclip_ratio 文本检测扩张系数,使用该方法对文字区域进行扩张,该值越大,扩张的面积越大。大于0的任意浮点数。如果不设置,将默认使用产线初始化的该参数值 2.0 float
text_det_input_shape 文本检测的输入形状,您可以设置3个值代表C,H,W。 int
text_rec_score_thresh 文本识别阈值,得分大于该阈值的文本结果会被保留。 大于0的任意浮点数。如果不设置,将默认使用产线初始化的该参数值 0.0。即不设阈值。 float
text_rec_input_shape 文本识别的输入形状。 tuple
lang 使用指定语言的 OCR 模型。
  • ch:中文;
  • en:英文;
  • korean:韩文;
  • japan:日文;
  • chinese_cht:繁体中文;
  • te:泰卢固文;
  • ka:卡纳达文;
  • ta:泰米尔文;
如果不设置,将默认使用ch
str
ocr_version OCR 版本。
  • PP-OCRv5:使用PP-OCRv5系列模型;
  • PP-OCRv4:使用PP-OCRv4系列模型;
  • PP-OCRv3:使用PP-OCRv3系列模型;
如果不设置,将默认使用PP-OCRv5系列模型。
str
det_model_dir 已废弃,请参考text_detection_model_dir,且与新的参数不能同时指定。 str
det_limit_side_len 已废弃,请参考text_det_limit_side_len,且与新的参数不能同时指定。 int
det_limit_type 已废弃,请参考text_det_limit_type,且与新的参数不能同时指定。 str
det_db_thresh 已废弃,请参考text_det_thresh,且与新的参数不能同时指定。 float
det_db_box_thresh 已废弃,请参考text_det_box_thresh,且与新的参数不能同时指定。 float
det_db_unclip_ratio 已废弃,请参考text_det_unclip_ratio,且与新的参数不能同时指定。 float
rec_model_dir 已废弃,请参考text_recognition_model_dir,且与新的参数不能同时指定。 str
rec_batch_num 已废弃,请参考text_recognition_batch_size,且与新的参数不能同时指定。 int
use_angle_cls 已废弃,请参考use_textline_orientation,且与新的参数不能同时指定。 bool
cls_model_dir 已废弃,请参考text_line_orientation_model_dir,且与新的参数不能同时指定。 str
cls_batch_num 已废弃,请参考text_line_orientation_batch_size,且与新的参数不能同时指定。 int
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 进行推理;
如果不设置,将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备,如果没有,则使用 CPU 设备。
str
enable_hpi 是否启用高性能推理。 bool False
use_tensorrt 是否使用 TensorRT 进行推理加速。 bool False
min_subgraph_size 最小子图大小,用于优化模型子图的计算。 int 3
precision 计算精度,如 fp32、fp16。 str fp32
enable_mkldnn 是否启用 MKL-DNN 加速库。如果不设置,将默认启用。 bool
cpu_threads 在 CPU 上进行推理时使用的线程数。 int 8
paddlex_config PaddleX产线配置文件路径。 str

运行结果会被打印到终端上: ```bash {'res': {'input_path': './general_ocr_002.png', 'page_index': None, 'model_settings': {'use_doc_preprocessor': True, 'use_textline_orientation': False}, 'doc_preprocessor_res': {'input_path': None, 'page_index': None, 'model_settings': {'use_doc_orientation_classify': False, 'use_doc_unwarping': False}, 'angle': -1}, 'dt_polys': array([[[ 3, 10], ..., [ 4, 30]], ..., [[ 99, 456], ..., [ 99, 479]]], dtype=int16), 'text_det_params': {'limit_side_len': 736, 'limit_type': 'min', 'thresh': 0.3, 'max_side_limit': 4000, 'box_thresh': 0.6, 'unclip_ratio': 1.5}, 'text_type': 'general', 'textline_orientation_angles': array([-1, ..., -1]), 'text_rec_score_thresh': 0.0, 'rec_texts': ['www.997700', '', 'Cm', '登机牌', 'BOARDING', 'PASS', 'CLASS', '序号SERIAL NO.', '座位号', 'SEAT NO.', '航班FLIGHT', '日期DATE', '舱位', '', 'W', '035', '12F', 'MU2379', '03DEc', '始发地', 'FROM', '登机口', 'GATE', '登机时间BDT', '目的地TO', '福州', 'TAIYUAN', 'G11', 'FUZHOU', '身份识别IDNO.', '姓名NAME', 'ZHANGQIWEI', '票号TKT NO.', '张祺伟', '票价FARE', 'ETKT7813699238489/1', '登机口于起飞前10分钟关闭 GATESCL0SE10MINUTESBEFOREDEPARTURETIME'], 'rec_scores': array([0.67634439, ..., 0.97416091]), 'rec_polys': array([[[ 3, 10], ..., [ 4, 30]], ..., [[ 99, 456], ..., [ 99, 479]]], dtype=int16), 'rec_boxes': array([[ 3, ..., 30], ..., [ 99, ..., 479]], dtype=int16)}} ``` 若指定了`save_path`,则会保存可视化结果在`save_path`下。可视化结果如下: ### 2.2 Python脚本方式集成 命令行方式是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下: ```python from paddleocr import PaddleOCR ocr = PaddleOCR( use_doc_orientation_classify=False, # 通过 use_doc_orientation_classify 参数指定不使用文档方向分类模型 use_doc_unwarping=False, # 通过 use_doc_unwarping 参数指定不使用文本图像矫正模型 use_textline_orientation=False, # 通过 use_textline_orientation 参数指定不使用文本行方向分类模型 ) # ocr = PaddleOCR(lang="en") # 通过 lang 参数来使用英文模型 # ocr = PaddleOCR(ocr_version="PP-OCRv4") # 通过 ocr_version 参数来使用 PP-OCR 其他版本 # ocr = PaddleOCR(device="gpu") # 通过 device 参数使得在模型推理时使用 GPU # ocr = PaddleOCR( # text_detection_model_name="PP-OCRv5_server_det", # text_recognition_model_name="PP-OCRv5_server_rec", # use_doc_orientation_classify=False, # use_doc_unwarping=False, # use_textline_orientation=False, # ) # 更换 PP-OCRv5_server 模型 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
paddlex_config PaddleX产线配置文件路径。 str None
(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
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 保存的文件路径,支持目录或文件路径。

此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:

属性 属性说明
json 获取预测的 json 格式的结果
img 获取格式为 dict 的可视化图像
## 3. 开发集成/部署 如果通用 OCR 产线可以达到您对产线推理速度和精度的要求,您可以直接进行开发集成/部署。 若您需要将通用 OCR 产线直接应用在您的Python项目中,可以参考[2.2 Python脚本方式集成](#22-python脚本方式集成)中的示例代码。 此外,PaddleOCR 也提供了其他两种部署方式,详细说明如下: 🚀 高性能推理:在实际生产环境中,许多应用对部署策略的性能指标(尤其是响应速度)有着较严苛的标准,以确保系统的高效运行与用户体验的流畅性。为此,PaddleOCR 提供高性能推理功能,旨在对模型推理及前后处理进行深度性能优化,实现端到端流程的显著提速,详细的高性能推理流程请参考[高性能推理](../deployment/high_performance_inference.md)。 ☁️ 服务化部署:服务化部署是实际生产环境中常见的一种部署形式。通过将推理功能封装为服务,客户端可以通过网络请求来访问这些服务,以获取推理结果。详细的产线服务化部署流程请参考[服务化部署](../deployment/serving.md)。 以下是基础服务化部署的API参考与多语言服务调用示例:
API参考

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

名称 类型 含义
logId string 请求的UUID。
errorCode integer 错误码。固定为0
errorMsg string 错误说明。固定为"Success"
result object 操作结果。
名称 类型 含义
logId string 请求的UUID。
errorCode integer 错误码。与响应状态码相同。
errorMsg string 错误说明。

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

获取图像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 参数相关说明。
名称 类型 含义
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 产线的在您的场景中的识别效果。 ### 4.1 模型微调 通用 OCR 产线包含若干模块,模型产线的效果如果不及预期,可能来自于其中任何一个模块。您可以对识别效果差的图片进行分析,进而确定是哪个模块存在问题,并参考以下表格中对应的微调教程链接进行模型微调。
情形 微调模块 微调参考链接
整图旋转矫正不准 文档图像方向分类模块 链接
图像扭曲矫正不准 文本图像矫正模块 暂不支持微调
文本行旋转矫正不准 文本行方向分类模块 链接
文本漏检 文本检测模块 链接
文本内容不准 文本识别模块 链接
### 4.2 模型应用 当您使用私有数据集完成微调训练后,可获得本地模型权重文件,然后可以通过参数指定本地模型保存路径的方式,或者通过自定义产线配置文件的方式,使用微调后的模型权重。 #### 4.2.1 通过参数指定本地模型路径 在初始化产线对象时,通过参数指定本地模型路径。以文本检测模型微调后的权重的使用方法为例,示例如下: 命令行方式: ```bash # 通过 --text_detection_model_dir 指定本地模型路径 paddleocr ocr -i ./general_ocr_002.png --text_detection_model_dir your_det_model_path # 默认使用 PP-OCRv5_mobile_det 模型作为默认文本检测模型,如果微调的不是该模型,通过 --text_detection_model_name 修改模型名称 paddleocr ocr -i ./general_ocr_002.png --text_detection_model_name PP-OCRv5_server_det --text_detection_model_dir your_v5_server_det_model_path ``` 脚本方式: ```python from paddleocr import PaddleOCR # 通过 text_detection_model_dir 指定本地模型路径 pipeline = PaddleOCR(text_detection_model_dir="./your_det_model_path") # 默认使用 PP-OCRv5_mobile_det 模型作为默认文本检测模型,如果微调的不是该模型,通过 text_detection_model_name 修改模型名称 # pipeline = PaddleOCR(text_detection_model_name="PP-OCRv5_server_det", text_detection_model_dir="./your_v5_server_det_model_path") ``` #### 4.2.2 通过配置文件指定本地模型路径 1.获取产线配置文件 可调用 PaddleOCR 中 通用OCR 产线对象的 `export_paddlex_config_to_yaml` 方法,将当前产线配置导出为 YAML 文件: ```Python from paddleocr import PaddleOCR pipeline = PaddleOCR() pipeline.export_paddlex_config_to_yaml("PaddleOCR.yaml") ``` 2.修改配置文件 在得到默认的产线配置文件后,将微调后模型权重的本地路径替换至产线配置文件中的对应位置即可。例如 ```yaml ...... SubModules: TextDetection: box_thresh: 0.6 limit_side_len: 960 limit_type: max max_side_limit: 4000 model_dir: null # 替换为微调后的文本测模型权重路径 model_name: PP-OCRv5_server_det # 如果微调的模型名称与默认模型名称不同,请一并修改此处 module_name: text_detection thresh: 0.3 unclip_ratio: 1.5 TextLineOrientation: batch_size: 6 model_dir: null # 替换为微调后的文本行方向分类模型权重路径 model_name: PP-LCNet_x0_25_textline_ori # 如果微调的模型名称与默认模型名称不同,请一并修改此处 module_name: textline_orientation TextRecognition: batch_size: 6 model_dir: null # 替换为微调后的文本识模型权重路径 model_name: PP-OCRv5_server_rec # 如果微调的模型名称与默认模型名称不同,请一并修改此处 module_name: text_recognition score_thresh: 0.0 ...... ``` 在产线配置文件中,不仅包含 PaddleOCR CLI 和 Python API 支持的参数,还可进行更多高级配置,具体信息可在 [PaddleX模型产线使用概览](https://paddlepaddle.github.io/PaddleX/3.0/pipeline_usage/pipeline_develop_guide.html) 中找到对应的产线使用教程,参考其中的详细说明,根据需求调整各项配置。 3.在 CLI 中加载产线配置文件 在修改完成配置文件后,通过命令行的 --paddlex_config 参数指定修改后的产线配置文件的路径,PaddleOCR 会读取其中的内容作为产线配置。示例如下: ```bash paddleocr ocr --paddlex_config PaddleOCR.yaml ... ``` 4.在 Python API 中加载产线配置文件 初始化产线对象时,可通过 paddlex_config 参数传入 PaddleX 产线配置文件路径或配置字典,PaddleOCR 会读取其中的内容作为产线配置。示例如下: ```python from paddleocr import PaddleOCR pipeline = PaddleOCR(paddlex_config="PaddleOCR.yaml") ```