【项目】基于PaddleOCR的文字检测识别项目
- 简介
- 安装与使用
- (1)Paddle环境安装
- (2)模型预测(文本检测+文本识别)
- (3)文本检测识别模型训练
- (4)本地模型训练与预测
- (5)其它任务
简介
PaddleOCR 旨在打造一套丰富、领先、且实用的 OCR 工具库,助力开发者训练出更好的模型,并应用落地。
支持多种 OCR 相关前沿算法,在此基础上打造产业级特色模型PP-OCR、PP-Structure和PP-ChatOCR,并打通数据生产、模型训练、压缩、预测部署全流程。
- PP-OCRv4 在线体验地址:https://aistudio.baidu.com/community/app/91660
- SLANet 在线体验地址:https://aistudio.baidu.com/community/app/91661
- PP-ChatOCRv3-doc 在线体验地址:https://aistudio.baidu.com/community/app/182491
- PP-ChatOCRv2-common 在线体验地址:https://aistudio.baidu.com/community/app/91662
- PP-ChatOCRv2-doc 在线体验地址:https://aistudio.baidu.com/community/app/70303
安装与使用
PaddleOCR 文档
(1)Paddle环境安装
开始使用_飞桨
# 拉取paddleOCR项目
git clone https://github.com/PaddlePaddle/PaddleOCR.git --depth 1 # 只拉取最近一次提交的库
# 安装conda环境
conda create -n paddleocr_env python=3.9
conda activate paddleocr_env
# 安装PaddleOCR相关依赖
pip install -r requirements.txt
# 安装paddle
# CPU版本
pip install paddlepaddle==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
# 英伟达 GPU版本
pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu123/
# 安装PaddleOCR
pip install paddleocr
(2)模型预测(文本检测+文本识别)
import os
import time
from paddleocr import PaddleOCR
filepath = r"tests/test_files/254.jpg"
ocr_model = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=True, show_log=1,
det_db_box_thresh=0.1, use_dilation=True,
det_model_dir='weight/ch_PP-OCRv4_det_server_infer',
cls_model_dir='weight/ch_ppocr_mobile_v2.0_cls_infer',
rec_model_dir='weight/ch_PP-OCRv4_rec_server_infer')
t1 = time.time()
for i in range(1):
result = ocr_model.ocr(img=filepath, det=True, rec=True, cls=True)[0]
t2 = time.time()
print((t2 - t1) / 10)
for res_str in result:
print(res_str)
# 使用方向分类器
python tools/infer/predict_system.py --image_dir="./tests/test_files/254.jpg" --det_model_dir="./weight/ch_PP-OCRv4_det_server_infer/" --cls_model_dir="./weight/ch_ppocr_mobile_v2.0_cls_infer/" --rec_model_dir="./weight/ch_PP-OCRv4_rec_server_infer/" --use_angle_cls=true
# 不使用方向分类器
python tools/infer/predict_system.py --image_dir="./tests/test_files/254.jpg" --det_model_dir="./weight/ch_PP-OCRv4_det_server_infer/" --rec_model_dir="./weight/ch_PP-OCRv4_rec_server_infer/" --use_angle_cls=false
# 使用多进程
python tools/infer/predict_system.py --image_dir="./tests/test_files/254.jpg" --det_model_dir="./weight/ch_PP-OCRv4_det_server_infer/" --rec_model_dir="./weight/ch_PP-OCRv4_rec_server_infer/" --use_angle_cls=false --use_mp=True --total_process_num=6
(3)文本检测识别模型训练
PaddleOCR-文本检测识别
- 概述
- 快速开始
- 快速安装
- 效果展示
- 运行环境
- 模型库
- 模型训练
- 基本概念
- 文本检测
- 文本识别
- 文本方向分类器
- 关键信息提取
- 模型微调
- 训练tricks
- 模型压缩
- 模型量化
- 模型裁剪
- 知识蒸馏
- 推理部署
- 基于Python预测引擎推理
- 基于C++预测引擎推理
- Visual Studio 2019 Community CMake 编译指南
- 服务化部署
- Android部署
- Jetson部署
项目实操采用PaddlePaddle的AI Studio平台
PaddleOCR使用 - 飞桨AI Studio星河社区
(4)本地模型训练与预测
- 1 准备数据
- 2 数据格式转化
# (1)文本检测数据集格式转换
python ppocr/utils/gen_label.py --mode="det" --root_path="/path/to/icdar_c4_train_imgs/" --input_path="/path/to/ch4_training_localization_transcription_gt" --output_label="/path/to/train_icdar2015_label.txt"
# 文本检测数据集格式转换示例
python ppocr/utils/gen_label.py --mode="det" --root_path="" --input_path="datasets/det/ch4_training_localization_transcription_gt" --output_label="datasets/det/ch4_training_paddleocr.txt"
# (2)文本识别数据集格式转换
python ppocr/utils/gen_label.py --mode="rec" --input_path="{path/of/origin/label}" --output_label="rec_gt_label.txt"
# 文本识别数据集格式转换示例
python ppocr/utils/gen_label.py --mode="rec" --input_path="datasets/rec/ch4_training_word_images_gt/gt.txt" --output_label="datasets/rec/rec_gt_label.txt"
- 3 下载预训练模型
cd PaddleOCR/
# 根据backbone的不同选择下载对应的预训练模型
# 下载MobileNetV3的预训练模型
wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/pretrained/MobileNetV3_large_x0_5_pretrained.pdparams
# 或,下载ResNet18_vd的预训练模型
wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/pretrained/ResNet18_vd_pretrained.pdparams
# 或,下载ResNet50_vd的预训练模型
wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/pretrained/ResNet50_vd_ssld_pretrained.pdparams
- 4 修改配置文件
configs/det/det_mv3_db.yml
Global:
use_gpu: false # 根据设备修改
use_xpu: false
use_mlu: false
epoch_num: 1200
log_smooth_window: 20
print_batch_step: 10
save_model_dir: ./output/db_mv3/
save_epoch_step: 1200
eval_batch_step: [0, 2000]
cal_metric_during_train: False
pretrained_model: ./pretrain_models/MobileNetV3_large_x0_5_pretrained # 修改预训练模型
checkpoints:
save_inference_dir:
use_visualdl: False
infer_img: doc/imgs_en/img_10.jpg
save_res_path: ./output/det_db/predicts_db.txt
Architecture:
model_type: det
algorithm: DB
Transform:
Backbone:
name: MobileNetV3
scale: 0.5
model_name: large
Neck:
name: DBFPN
out_channels: 256
Head:
name: DBHead
k: 50
Loss:
name: DBLoss
balance_loss: true
main_loss_type: DiceLoss
alpha: 5
beta: 10
ohem_ratio: 3
Optimizer:
name: Adam
beta1: 0.9
beta2: 0.999
lr:
learning_rate: 0.001
regularizer:
name: 'L2'
factor: 0
PostProcess:
name: DBPostProcess
thresh: 0.3
box_thresh: 0.6
max_candidates: 1000
unclip_ratio: 1.5
Metric:
name: DetMetric
main_indicator: hmean
Train:
dataset:
name: SimpleDataSet
data_dir: ./datasets/det/ch4_training_images # 修改为训练数据集图像路径
label_file_list:
- ./datasets/det/ch4_training_paddleocr.txt # 修改为训练数据集标签
ratio_list: [1.0]
transforms:
- DecodeImage: # load image
img_mode: BGR
channel_first: False
- DetLabelEncode: # Class handling label
- IaaAugment:
augmenter_args:
- { 'type': Fliplr, 'args': { 'p': 0.5 } }
- { 'type': Affine, 'args': { 'rotate': [-10, 10] } }
- { 'type': Resize, 'args': { 'size': [0.5, 3] } }
- EastRandomCropData:
size: [640, 640]
max_tries: 50
keep_ratio: true
- MakeBorderMap:
shrink_ratio: 0.4
thresh_min: 0.3
thresh_max: 0.7
- MakeShrinkMap:
shrink_ratio: 0.4
min_text_size: 8
- NormalizeImage:
scale: 1./255.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: 'hwc'
- ToCHWImage:
- KeepKeys:
keep_keys: ['image', 'threshold_map', 'threshold_mask', 'shrink_map', 'shrink_mask'] # the order of the dataloader list
loader:
shuffle: True
drop_last: False
batch_size_per_card: 16
num_workers: 8
use_shared_memory: True
Eval:
dataset:
name: SimpleDataSet
data_dir: ./datasets/det/ch4_test_images # 修改为验证数据集图像路径
label_file_list:
- ./datasets/det/ch4_test_paddleocr.txt # 修改为验证数据集标签路径
transforms:
- DecodeImage: # load image
img_mode: BGR
channel_first: False
- DetLabelEncode: # Class handling label
- DetResizeForTest:
image_shape: [736, 1280]
- NormalizeImage:
scale: 1./255.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: 'hwc'
- ToCHWImage:
- KeepKeys:
keep_keys: ['image', 'shape', 'polys', 'ignore_tags']
loader:
shuffle: False
drop_last: False
batch_size_per_card: 1 # must be 1
num_workers: 8
use_shared_memory: True
- 5 开启训练
# 单机单卡训练 mv3_db 模型
python tools/train.py -c configs/det/det_mv3_db.yml -o Global.pretrained_model=./pretrain_models/MobileNetV3_large_x0_5_pretrained
# 单机多卡训练,通过 --gpus 参数设置使用的GPU ID
python -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/det/det_mv3_db.yml -o Global.pretrained_model=./pretrain_models/MobileNetV3_large_x0_5_pretrained
(5)其它任务
- 版面分析
- 表格结构用解析
- 关键信息提取