---
comments: true
---
# 文本检测模块使用教程
## 一、概述
文本检测模块是OCR(光学字符识别)系统中的关键组成部分,负责在图像中定位和标记出包含文本的区域。该模块的性能直接影响到整个OCR系统的准确性和效率。文本检测模块通常会输出文本区域的边界框(Bounding Boxes),这些边界框将作为输入传递给文本识别模块进行后续处理。
## 二、支持模型列表
> 推理耗时仅包含模型推理耗时,不包含前后处理耗时。表格中的“常规模式”耗时对应本地 paddle_static 推理引擎。
| 模型 | 模型下载链接 | 检测Hmean(%) | GPU推理耗时(ms) [常规模式 / 高性能模式] |
CPU推理耗时(ms) [常规模式 / 高性能模式] |
模型存储大小(MB) | 介绍 |
|---|---|---|---|---|---|---|
| PP-OCRv6_medium_det | 推理模型/训练模型 | 86.2* | - / - | - / - | 59.4 | PP-OCRv6 的中等规模文本检测模型,基于 PPLCNetV4 + RepLKFPN,精度最高,适合服务端部署 |
| PP-OCRv6_small_det | 推理模型/训练模型 | 84.1* | - / - | - / - | 9.6 | PP-OCRv6 的小型文本检测模型,兼顾精度与效率,适合移动端部署 |
| PP-OCRv6_tiny_det | 推理模型/训练模型 | 80.6* | - / - | - / - | 1.9 | PP-OCRv6 的超轻量文本检测模型(0.43M 参数),适合端侧/IoT 场景 |
| PP-OCRv5_server_det | 推理模型/训练模型 | 83.8 | 89.55 / 70.19 | 383.15 / 383.15 | 84.3 | PP-OCRv5 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署 |
| PP-OCRv5_mobile_det | 推理模型/训练模型 | 79.0 | 10.67 / 6.36 | 57.77 / 28.15 | 4.7 | PP-OCRv5 的移动端文本检测模型,效率更高,适合在端侧设备部署 |
| PP-OCRv4_server_det | 推理模型/训练模型 | 69.2 | 127.82 / 98.87 | 585.95 / 489.77 | 109 | PP-OCRv4 的服务端文本检测模型,精度更高,适合在性能较好的服务器上部署 |
| PP-OCRv4_mobile_det | 推理模型/训练模型 | 63.8 | 9.87 / 4.17 | 56.60 / 20.79 | 4.7 | PP-OCRv4 的移动端文本检测模型,效率更高,适合在端侧设备部署 |
| 模式 | GPU配置 | CPU配置 | 加速技术组合 |
|---|---|---|---|
| 常规模式 | FP32精度 / 无TRT加速 | FP32精度 / 8线程 | PaddleInference |
| 高性能模式 | 选择先验精度类型和加速策略的最优组合 | FP32精度 / 8线程 | 选择先验最优后端(Paddle/OpenVINO/TRT等) |
paddle_static 推理引擎,请先按照[飞桨框架安装](../paddlepaddle_installation.md)完成 PaddlePaddle 安装。
如果选择 `transformers` 作为推理引擎,请确保已配置 Transformers 环境,然后执行如下命令:
```bash
# 使用 transformers 引擎进行推理
paddleocr text_detection -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_001.png \
--engine transformers
```
如果选择 `onnxruntime` 作为推理引擎,请确保已配置 ONNX Runtime 环境,然后执行如下命令:
```bash
# 使用 onnxruntime 引擎进行推理
paddleocr text_detection -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_001.png \
--engine onnxruntime
```
在大多数场景下,默认的 `paddle_static` 推理引擎通常具备更好的推理性能,建议优先使用。
注:PaddleOCR 官方模型默认从 HuggingFace 获取,如运行环境访问 HuggingFace 不便,可通过环境变量修改模型源为 BOS:`PADDLE_PDX_MODEL_SOURCE="BOS"`,未来将支持更多主流模型源;
### 3.3 Python API 使用
您也可以将文本检测的模块中的模型推理集成到您的项目中。运行以下代码前,请您下载[示例图片](https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_001.png)到本地。
```python
from paddleocr import TextDetection
model = TextDetection()
output = model.predict("general_ocr_001.png", batch_size=1)
for res in output:
res.print()
res.save_to_img(save_path="./output/")
res.save_to_json(save_path="./output/res.json")
```
上述示例默认使用 paddle_static 推理引擎,请先按照[飞桨框架安装](../paddlepaddle_installation.md)完成 PaddlePaddle 安装。
如果选择 `transformers` 作为推理引擎,请确保已配置 Transformers 环境,然后执行如下代码:
```python
from paddleocr import TextDetection
model = TextDetection(engine="transformers")
output = model.predict("general_ocr_001.png", batch_size=1)
for res in output:
res.print()
res.save_to_img(save_path="./output/")
res.save_to_json(save_path="./output/res.json")
```
如果选择 `onnxruntime` 作为推理引擎,请确保已配置 ONNX Runtime 环境,然后执行如下代码:
```python
from paddleocr import TextDetection
model = TextDetection(engine="onnxruntime")
output = model.predict("general_ocr_001.png", batch_size=1)
for res in output:
res.print()
res.save_to_img(save_path="./output/")
res.save_to_json(save_path="./output/res.json")
```
在大多数场景下,默认的 `paddle_static` 推理引擎通常具备更好的推理性能,建议优先使用。
训练后的模型如果想使用 `paddle_dynamic` 或 `transformers` 引擎,请参考后文 [推理引擎](#五推理引擎) 中的 [权重转换](#52-权重转换) 部分将模型由 `pdparams` 格式通过 PaddleX 转换为 `safetensors` 格式。
运行后,得到的结果为:
```bash
{'res': {'input_path': 'general_ocr_001.png', 'page_index': None, 'dt_polys': array([[[ 75, 549],
...,
[ 77, 586]],
...,
[[ 31, 406],
...,
[ 34, 455]]], dtype=int16), 'dt_scores': [0.873949039891189, 0.8948166013613552, 0.8842595305917041, 0.876953790920377]}}
```
运行结果参数含义如下:
input_path:表示输入待预测图像的路径page_index:如果输入是PDF文件,则表示当前是PDF的第几页,否则为 Nonedt_polys:表示预测的文本检测框,其中每个文本检测框包含一个四边形的四个顶点。其中每个顶点都是一个列表,分别表示该顶点的x坐标和y坐标dt_scores:表示预测的文本检测框的置信度
相关方法、参数等说明如下:
* TextDetection类实例化文本检测模型,具体说明如下:
| 参数 | 参数说明 | 参数类型 | 默认值 |
|---|---|---|---|
model_name |
含义:模型名称。 说明: 如果设置为 None,则使用PP-OCRv6_medium_det。 |
str|None |
None |
model_dir |
含义:模型存储路径。 | str|None |
None |
device |
含义:用于推理的设备。 说明: 例如: "cpu"、"gpu"、"npu"、"gpu:0"、"gpu:0,1"。如指定多个设备,将进行并行推理。 默认情况下,优先使用 GPU 0;若不可用则使用 CPU。 |
str|None |
None |
engine |
含义:推理引擎。 说明:支持 None(默认值)、paddle、paddle_static、paddle_dynamic、transformers、onnxruntime。保持为默认值 None 时,本地推理默认使用 paddle_static 引擎。详细说明、取值、兼容性规则与示例请参见 推理引擎与配置说明。 |
str|None |
None |
engine_config |
含义:推理引擎配置。 说明:推荐与 engine 搭配使用。详细字段、兼容性规则与示例请参见 推理引擎与配置说明。 |
dict|None |
None |
enable_hpi |
含义:是否启用高性能推理。 | bool |
False |
use_tensorrt |
含义:是否启用 Paddle Inference 的 TensorRT 子图引擎。 说明: 如果模型不支持通过 TensorRT 加速,即使设置了此标志,也不会使用加速。 对于 CUDA 11.8 版本的飞桨,兼容的 TensorRT 版本为 8.x(x>=6),建议安装 TensorRT 8.6.1.6。 |
bool |
False |
precision |
含义:当使用 Paddle Inference 的 TensorRT 子图引擎时设置的计算精度。 说明: 可选项: "fp32"、"fp16"。 |
str |
"fp32" |
enable_mkldnn |
含义:是否启用 MKL-DNN 加速推理。 说明: 如果 MKL-DNN 不可用或模型不支持通过 MKL-DNN 加速,即使设置了此标志,也不会使用加速。 |
bool |
True |
mkldnn_cache_capacity |
含义:MKL-DNN 缓存容量。 | int |
10 |
cpu_threads |
含义:在 CPU 上推理时使用的线程数量。 | int |
10 |
limit_side_len |
含义:检测的图像边长限制:int 表示边长限制数值。说明: 如果设置为 None,将使用模型默认配置。 |
int|None |
None |
limit_type |
含义:检测的图像边长限制,检测的边长限制类型。 说明: "min" 表示保证图像最短边不小于det_limit_side_len,"max"表示保证图像最长边不大于limit_side_len。如果设置为None,将使用模型默认配置。 |
str|None |
None |
max_side_limit |
含义:检测的图像边长最大值限制:int 限制输入检测模型的图片最长边。说明: 如果设置为 None,将使用模型默认配置。 |
int|None |
None |
thresh |
含义:像素得分阈值。输出概率图中得分大于该阈值的像素点被认为是文本像素。 说明: 如果设置为 None,将使用模型默认配置。 |
float|None |
None |
box_thresh |
含义:检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域。 说明: 如果设置为 None,将使用模型默认配置。 |
float|None |
None |
unclip_ratio |
含义:Vatti clipping算法的扩张系数,使用该方法对文字区域进行扩张。 说明: 如果设置为 None,将使用模型默认配置。 |
float|None |
None |
input_shape |
含义:模型输入图像尺寸,格式为 (C, H, W)。 |
tuple|None |
None |
predict() 方法进行推理预测,该方法会返回一个结果列表。另外,本模块还提供了 predict_iter() 方法。两者在参数接受和结果返回方面是完全一致的,区别在于 predict_iter() 返回的是一个 generator,能够逐步处理和获取预测结果,适合处理大型数据集或希望节省内存的场景。可以根据实际需求选择使用这两种方法中的任意一种。predict() 方法参数有 input 、batch_size、 limit_side_len、 limit_type、 thresh、 box_thresh、 max_candidates、unclip_ratio,具体说明如下:
| 参数 | 参数说明 | 参数类型 | 默认值 |
|---|---|---|---|
input |
含义:待预测数据,支持多种输入类型,必填。 说明:
|
Python Var|str|list |
|
batch_size |
含义:批大小 说明: 可设置为任意正整数。 |
int |
1 |
limit_side_len |
含义:参数含义与实例化参数基本相同。 说明: 设置为 None表示使用实例化参数,否则该参数优先级更高。 |
int|None |
None |
limit_type |
含义:参数含义与实例化参数基本相同。 说明: 设置为 None表示使用实例化参数,否则该参数优先级更高。 |
str|None |
None |
thresh |
含义:参数含义与实例化参数基本相同。 说明: 设置为 None表示使用实例化参数,否则该参数优先级更高。 |
float|None |
None |
box_thresh |
含义:参数含义与实例化参数基本相同。 说明: 设置为 None表示使用实例化参数,否则该参数优先级更高。 |
float|None |
None |
unclip_ratio |
含义:参数含义与实例化参数基本相同。 说明: 设置为 None表示使用实例化参数,否则该参数优先级更高。 |
float|None |
None |
json文件的操作:
| 方法 | 方法说明 | 参数 | 参数类型 | 参数说明 | 默认值 |
|---|---|---|---|---|---|
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的可视化图像 |
| model | engine | Preprocessing (ms) | Inference (ms) | PostProcessing (ms) | End-to-End (ms) |
|---|---|---|---|---|---|
| PP-OCRv5_mobile_det | paddle_static | 11.43 | 13.80 | 2.15 | 27.58 |
| paddle_dynamic | 11.70 | 48.36 | 2.47 | 62.71 | |
| transformers | 14.05 | 18.45 | 3.98 | 37.54 | |
| onnxruntime | 9.98 | 5.70 | 2.04 | 17.90 | |
| PP-OCRv5_server_det | paddle_static | 13.24 | 26.91 | 2.63 | 43.05 |
| paddle_dynamic | 11.82 | 45.56 | 2.52 | 60.10 | |
| transformers | 14.56 | 13.76 | 7.44 | 36.76 | |
| onnxruntime | 10.01 | 13.76 | 1.92 | 25.86 | |
| PP-OCRv6_medium_det | paddle_static | 13.89 | 16.02 | 2.49 | 33.14 |
| paddle_dynamic | 11.42 | 26.23 | 2.30 | 40.10 | |
| transformers | 11.40 | 8.57 | 8.35 | 29.57 | |
| onnxruntime | 10.80 | 13.06 | 2.19 | 26.18 | |
| PP-OCRv6_small_det | paddle_static | 10.91 | 10.97 | 2.41 | 24.45 |
| paddle_dynamic | 11.56 | 22.17 | 2.66 | 36.55 | |
| transformers | 11.70 | 7.34 | 3.87 | 23.89 | |
| onnxruntime | 11.32 | 7.46 | 2.54 | 21.49 | |
| PP-OCRv6_tiny_det | paddle_static | 11.14 | 10.71 | 2.84 | 24.85 |
| paddle_dynamic | 11.52 | 21.70 | 2.94 | 36.31 | |
| transformers | 10.90 | 6.99 | 4.13 | 23.00 | |
| onnxruntime | 11.19 | 6.35 | 2.79 | 20.49 |