【项目】基于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 PaddleOCRfilepath = 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: falseuse_mlu: falseepoch_num: 1200log_smooth_window: 20print_batch_step: 10save_model_dir: ./output/db_mv3/save_epoch_step: 1200eval_batch_step: [0, 2000]cal_metric_during_train: Falsepretrained_model: ./pretrain_models/MobileNetV3_large_x0_5_pretrained # 修改预训练模型checkpoints:save_inference_dir:use_visualdl: Falseinfer_img: doc/imgs_en/img_10.jpgsave_res_path: ./output/det_db/predicts_db.txtArchitecture:model_type: detalgorithm: DBTransform:Backbone:name: MobileNetV3scale: 0.5model_name: largeNeck:name: DBFPNout_channels: 256Head:name: DBHeadk: 50Loss:name: DBLossbalance_loss: truemain_loss_type: DiceLossalpha: 5beta: 10ohem_ratio: 3Optimizer:name: Adambeta1: 0.9beta2: 0.999lr:learning_rate: 0.001regularizer:name: 'L2'factor: 0PostProcess:name: DBPostProcessthresh: 0.3box_thresh: 0.6max_candidates: 1000unclip_ratio: 1.5Metric:name: DetMetricmain_indicator: hmeanTrain:dataset:name: SimpleDataSetdata_dir: ./datasets/det/ch4_training_images # 修改为训练数据集图像路径label_file_list:- ./datasets/det/ch4_training_paddleocr.txt # 修改为训练数据集标签ratio_list: [1.0]transforms:- DecodeImage: # load imageimg_mode: BGRchannel_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: 50keep_ratio: true- MakeBorderMap:shrink_ratio: 0.4thresh_min: 0.3thresh_max: 0.7- MakeShrinkMap:shrink_ratio: 0.4min_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 listloader:shuffle: Truedrop_last: Falsebatch_size_per_card: 16num_workers: 8use_shared_memory: TrueEval:dataset:name: SimpleDataSetdata_dir: ./datasets/det/ch4_test_images # 修改为验证数据集图像路径label_file_list:- ./datasets/det/ch4_test_paddleocr.txt # 修改为验证数据集标签路径transforms:- DecodeImage: # load imageimg_mode: BGRchannel_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: Falsedrop_last: Falsebatch_size_per_card: 1 # must be 1num_workers: 8use_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)其它任务
- 版面分析
- 表格结构用解析
- 关键信息提取