文本检测模块是OCR(光学字符识别)系统中的关键组成部分,负责在图像中定位和标记出包含文本的区域。该模块的性能直接影响到整个OCR系统的准确性和效率。文本检测模块通常会输出文本区域的边界框(Bounding Boxes),这些边界框将作为输入传递给文本识别模块进行后续处理。
二、支持模型列表¶ 模型 模型下载链接 检测Hmean(%) GPU推理耗时(ms)测试环境说明:
❗ 在快速开始前,请先安装 PaddleOCR 的 wheel 包,详细请参考 安装教程。
使用一行命令即可快速体验:
paddleocr text_detection -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_001.png
注:PaddleOCR 官方模型默认从 HuggingFace 获取,如运行环境访问 HuggingFace 不便,可通过环境变量修改模型源为 BOS:PADDLE_PDX_MODEL_SOURCE="BOS"
,未来将支持更多主流模型源;
您也可以将文本检测的模块中的模型推理集成到您的项目中。运行以下代码前,请您下载示例图片到本地。
from paddleocr import TextDetection
model = TextDetection(model_name="PP-OCRv5_server_det")
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")
运行后,得到的结果为:
{'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的第几页,否则为 None
- dt_polys
:表示预测的文本检测框,其中每个文本检测框包含一个四边形的四个顶点。其中每个顶点都是一个列表,分别表示该顶点的x坐标和y坐标 - dt_scores
:表示预测的文本检测框的置信度
可视化图片如下:
相关方法、参数等说明如下:
TextDetection
实例化文本检测模型(此处以PP-OCRv5_server_det
为例),具体说明如下:model_name
模型名称。如果设置为None
,则使用PP-OCRv5_server_det
。 str|None
None
model_dir
模型存储路径。 str|None
None
device
用于推理的设备。
"cpu"
、"gpu"
、"npu"
、"gpu:0"
、"gpu:0,1"
。
str|None
None
enable_hpi
是否启用高性能推理。 bool
False
use_tensorrt
是否启用 Paddle Inference 的 TensorRT 子图引擎。如果模型不支持通过 TensorRT 加速,即使设置了此标志,也不会使用加速。
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
待预测数据,支持多种输入类型,必填。
numpy.ndarray
表示的图像数据/root/data/img.jpg
;如URL链接,如图像文件或PDF文件的网络URL:示例;如本地目录,该目录下需包含待预测图像,如本地路径:/root/data/
(当前不支持目录中包含PDF文件的预测,PDF文件需要指定到具体文件路径)[numpy.ndarray, numpy.ndarray]
,["/root/data/img1.jpg", "/root/data/img2.jpg"]
,["/root/data1", "/root/data2"]
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
的可视化图像 四、二次开发¶
如果以上模型在您的场景上效果仍然不理想,您可以尝试以下步骤进行二次开发,此处以训练 PP-OCRv5_server_det
举例,其他模型替换对应配置文件即可。首先,您需要准备文本检测的数据集,可以参考文本检测 Demo 数据的格式准备,准备好后,即可按照以下步骤进行模型训练和导出,导出后,可以将模型快速集成到上述 API 中。此处以文本检测 Demo 数据示例。在训练模型之前,请确保已经按照安装文档安装了 PaddleOCR 所需要的依赖。
# 下载示例数据集
wget https://paddle-model-ecology.bj.bcebos.com/paddlex/data/ocr_det_dataset_examples.tar
tar -xf ocr_det_dataset_examples.tar
4.1.2 下载预训练模型¶
# 下载 PP-OCRv5_server_det 预训练模型
wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_pretrained_model/PP-OCRv5_server_det_pretrained.pdparams
4.2 模型训练¶
PaddleOCR 对代码进行了模块化,训练 PP-OCRv5_server_det
识别模型时需要使用 PP-OCRv5_server_det
的配置文件。
训练命令如下:
#单卡训练 (默认训练方式)
python3 tools/train.py -c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml \
-o Global.pretrained_model=./PP-OCRv5_server_det_pretrained.pdparams \
Train.dataset.data_dir=./ocr_det_dataset_examples \
Train.dataset.label_file_list='[./ocr_det_dataset_examples/train.txt]' \
Eval.dataset.data_dir=./ocr_det_dataset_examples \
Eval.dataset.label_file_list='[./ocr_det_dataset_examples/val.txt]'
#多卡训练,通过--gpus参数指定卡号
python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py \
-c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml \
-o Global.pretrained_model=./PP-OCRv5_server_det_pretrained.pdparams \
Train.dataset.data_dir=./ocr_det_dataset_examples \
Train.dataset.label_file_list='[./ocr_det_dataset_examples/train.txt]' \
Eval.dataset.data_dir=./ocr_det_dataset_examples \
Eval.dataset.label_file_list='[./ocr_det_dataset_examples/val.txt]'
4.3 模型评估¶
您可以评估已经训练好的权重,如,output/PP-OCRv5_server_det/best_accuracy.pdprams
,使用如下命令进行评估:
# 注意将pretrained_model的路径设置为本地路径。若使用自行训练保存的模型,请注意修改路径和文件名为{path/to/weights}/{model_name}。
# demo 测试集评估
python3 tools/eval.py -c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml \
-o Global.pretrained_model=output/PP-OCRv5_server_det/best_accuracy.pdparams \
Eval.dataset.data_dir=./ocr_det_dataset_examples \
Eval.dataset.label_file_list='[./ocr_det_dataset_examples/val.txt]'
4.4 模型导出¶
python3 tools/export_model.py -c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml -o \
Global.pretrained_model=output/PP-OCRv5_server_det/best_accuracy.pdparams \
Global.save_inference_dir="./PP-OCRv5_server_det_infer/"
导出模型后,静态图模型会存放于当前目录的./PP-OCRv5_server_det_infer/
中,在该目录下,您将看到如下文件:
./PP-OCRv5_server_det_infer/
├── inference.json
├── inference.pdiparams
├── inference.yml
至此,二次开发完成,该静态图模型可以直接集成到 PaddleOCR 的 API 中。 五、FAQ¶
limit_type
和limit_side_len
来对图片的尺寸进行限制,limit_type
可选参数为[max
, min
],limit_side_len
为正整数,一般设置为 32 的倍数,比如 960。 如果输入图形分辨率不大,建议使用limit_type=min
和 limit_side_len=960
节省计算资源的同时能获得最佳检测效果。如果输入图片的分辨率比较大,而且想使用更大的分辨率预测,可以设置 limit_side_len
为想要的值,比如 1216。RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4