---
comments: true
---
# 文档图像预处理产线使用教程
## 1. 文档图像预处理产线介绍
文档图像预处理产线集成了文档方向分类和形变矫正两大功能。文档方向分类可自动识别文档的四个方向(0°、90°、180°、270°),确保文档以正确的方向进行后续处理。文本图像矫正模型则用于修正文档拍摄或扫描过程中的几何扭曲,恢复文档的原始形状和比例。适用于数字化文档管理、OCR类任务前处理、以及任何需要提高文档图像质量的场景。通过自动化的方向校正与形变矫正,该模块显著提升了文档处理的准确性和效率,为用户提供更为可靠的图像分析基础。本产线同时提供了灵活的服务化部署方式,支持在多种硬件上使用多种编程语言调用。不仅如此,本产线也提供了二次开发的能力,您可以基于本产线在您自己的数据集上训练调优,训练后的模型也可以无缝集成。
通用文档图像预处理产线中包含以下2个模块。每个模块均可独立进行训练和推理,并包含多个模型。有关详细信息,请点击相应模块以查看文档。
- [文档图像方向分类模块](../module_usage/doc_img_orientation_classification.md)(可选)
- [文本图像矫正模块](../module_usage/text_image_unwarping.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度
测试环境说明:
模式
GPU配置
CPU配置
加速技术组合
常规模式
FP32精度 / 无TRT加速
FP32精度 / 8线程
PaddleInference
高性能模式
选择先验精度类型和加速策略的最优组合
FP32精度 / 8线程
选择先验最优后端(Paddle/OpenVINO/TRT等)
命令行支持更多参数设置,点击展开以查看命令行参数的详细说明
参数
参数说明
参数类型
默认值
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
use_doc_orientation_classify
是否加载并使用文档方向分类模块。如果不设置,将默认使用产线初始化的该参数值,初始化为
True
。
bool
use_doc_unwarping
是否加载并使用文本图像矫正模块。如果不设置,将默认使用产线初始化的该参数值,初始化为
True
。
bool
device
用于推理的设备。支持指定具体卡号。
如果不设置,将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备,如果没有,则使用 CPU 设备。
cpu
表示使用 CPU 进行推理;gpu:0
表示使用第 1 块 GPU 进行推理;npu:0
表示使用第 1 块 NPU 进行推理;xpu:0
表示使用第 1 块 XPU 进行推理;mlu:0
表示使用第 1 块 MLU 进行推理;dcu:0
表示使用第 1 块 DCU 进行推理;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
运行结果会被打印到终端上,默认配置的 doc_preprocessor 产线的运行结果如下:
```bash
{'res': {'input_path': '/root/.paddlex/predict_input/doc_test_rotated.jpg', 'page_index': None, 'model_settings': {'use_doc_orientation_classify': True, 'use_doc_unwarping': True}, 'angle': 180}}
```
可视化结果保存在`save_path`下,可视化结果如下:
### 2.2 Python脚本方式集成
命令行方式是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下:
```python
from paddleocr import DocPreprocessor
pipeline = DocPreprocessor()
# docpp = DocPreprocessor(use_doc_orientation_classify=True) # 通过 use_doc_orientation_classify 指定是否使用文档方向分类模型
# docpp = DocPreprocessor(use_doc_unwarping=True) # 通过 use_doc_unwarping 指定是否使用文本图像矫正模块
# docpp = DocPreprocessor(device="gpu") # 通过 device 指定模型推理时使用 GPU
output = pipeline.predict("./doc_test_rotated.jpg")
for res in output:
res.print() ## 打印预测的结构化输出
res.save_to_img("./output/")
res.save_to_json("./output/")
```
在上述 Python 脚本中,执行了如下几个步骤:
(1)通过 `DocPreprocessor()` 实例化 doc_preprocessor 产线对象:具体参数说明如下:
参数 | 参数说明 | 参数类型 | 默认值 |
---|---|---|---|
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 |
use_doc_orientation_classify |
是否加载并使用文档方向分类模块。如果设置为None ,将默认使用产线初始化的该参数值,初始化为True 。
|
bool |
None |
use_doc_unwarping |
是否加载并使用文本图像矫正模块。如果设置为None ,将默认使用产线初始化的该参数值,初始化为True 。
|
bool |
None |
device |
用于推理的设备。支持指定具体卡号。
|
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 |
参数 | 参数说明 | 参数类型 | 默认值 |
---|---|---|---|
input |
待预测数据,支持多种输入类型,必填。
|
Python Var|str|list |
|
use_doc_orientation_classify |
是否在推理时使用文档方向分类模块。 | bool |
None |
use_doc_unwarping |
是否在推理时使用文本图像矫正模块。 | bool |
None |
方法 | 方法说明 | 参数 | 参数类型 | 参数说明 | 默认值 |
---|---|---|---|---|---|
print() |
打印结果到终端 | format_json |
bool |
是否对输出内容进行使用 JSON 缩进格式化 |
True |
indent |
int |
指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_json 为 True 时有效 |
4 | ||
ensure_ascii |
bool |
控制是否将非 ASCII 字符转义为 Unicode 。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_json 为True 时有效 |
False |
||
save_to_json() |
将结果保存为json格式的文件 | save_path |
str |
保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致 | 无 |
indent |
int |
指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_json 为 True 时有效 |
4 | ||
ensure_ascii |
bool |
控制是否将非 ASCII 字符转义为 Unicode 。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_json 为True 时有效 |
False |
||
save_to_img() |
将结果保存为图像格式的文件 | save_path |
str |
保存的文件路径,支持目录或文件路径 | 无 |
属性 | 属性说明 |
---|---|
json |
获取预测的 json 格式的结果 |
img |
获取格式为 dict 的可视化图像 |
对于服务提供的主要操作:
200
,响应体的属性如下:名称 | 类型 | 含义 |
---|---|---|
logId |
string |
请求的UUID。 |
errorCode |
integer |
错误码。固定为0 。 |
errorMsg |
string |
错误说明。固定为"Success" 。 |
result |
object |
操作结果。 |
名称 | 类型 | 含义 |
---|---|---|
logId |
string |
请求的UUID。 |
errorCode |
integer |
错误码。与响应状态码相同。 |
errorMsg |
string |
错误说明。 |
服务提供的主要操作如下:
infer
获取图像文档图像预处理结果。
POST /document-preprocessing
名称 | 类型 | 含义 | 是否必填 |
---|---|---|---|
file |
string |
服务器可访问的图像文件或PDF文件的URL,或上述类型文件内容的Base64编码结果。默认对于超过10页的PDF文件,只有前10页的内容会被处理。 要解除页数限制,请在产线配置文件中添加以下配置:
|
是 |
fileType |
integer | null |
文件类型。0 表示PDF文件,1 表示图像文件。若请求体无此属性,则将根据URL推断文件类型。 |
否 |
useDocOrientationClassify |
boolean | null |
请参阅产线对象中 predict 方法的 use_doc_orientation_classify 参数相关说明。 |
否 |
useDocUnwarping |
boolean | null |
请参阅产线对象中 predict 方法的 use_doc_unwarping 参数相关说明。 |
否 |
result
具有如下属性:名称 | 类型 | 含义 |
---|---|---|
docPreprocessingResults |
object |
文档图像预处理结果。数组长度为1(对于图像输入)或实际处理的文档页数(对于PDF输入)。对于PDF输入,数组中的每个元素依次表示PDF文件中实际处理的每一页的结果。 |
dataInfo |
object |
输入数据信息。 |
docPreprocessingResults
中的每个元素为一个object
,具有如下属性:
名称 | 类型 | 含义 |
---|---|---|
outputImage |
string |
经过预处理的图像。图像为PNG格式,使用Base64编码。 |
prunedResult |
object |
产线对象的 predict 方法生成结果的 JSON 表示中 res 字段的简化版本,其中去除了 input_path 和 page_index 字段。 |
docPreprocessingImage |
string | null |
可视化结果图。图像为JPEG格式,使用Base64编码。 |
inputImage |
string | null |
输入图像。图像为JPEG格式,使用Base64编码。 |
import base64
import requests
API_URL = "http://localhost:8080/document-preprocessing"
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["docPreprocessingResults"]):
print(res["prunedResult"])
output_img_path = f"out_{i}.png"
with open(output_img_path, "wb") as f:
f.write(base64.b64decode(res["outputImage"]))
print(f"Output image saved at {output_img_path}")
情形 | 微调模块 | 微调参考链接 |
---|---|---|
整图旋转矫正不准 | 文档图像方向分类模块 | 链接 |
图像扭曲矫正不准 | 文本图像矫正模块 | 暂不支持微调 |