【项目】基于PaddleOCR的文字检测识别项目

【项目】基于PaddleOCR的文字检测识别项目

简介

PaddleOCR 旨在打造一套丰富、领先、且实用的 OCR 工具库,助力开发者训练出更好的模型,并应用落地。

支持多种 OCR 相关前沿算法,在此基础上打造产业级特色模型PP-OCR、PP-Structure和PP-ChatOCR,并打通数据生产、模型训练、压缩、预测部署全流程。

安装与使用

PaddleOCR 文档

(1)Paddle环境安装

开始使用_飞桨

shell 复制代码
# 拉取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)模型预测(文本检测+文本识别)

python 复制代码
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)
shell 复制代码
# 使用方向分类器
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-文本检测识别

项目实操采用PaddlePaddle的AI Studio平台

PaddleOCR使用 - 飞桨AI Studio星河社区

(4)本地模型训练与预测

  • 1 准备数据
  • 2 数据格式转化
shell 复制代码
# (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 下载预训练模型
python 复制代码
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

python 复制代码
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 开启训练
python 复制代码
# 单机单卡训练 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)其它任务

  • 版面分析
  • 表格结构用解析
  • 关键信息提取
相关推荐
羑悻的小杀马特1 小时前
OpenCV 引擎:驱动实时应用开发的科技狂飙
人工智能·科技·opencv·计算机视觉
蹦蹦跳跳真可爱5892 小时前
Python----计算机视觉处理(Opencv:道路检测之提取车道线)
python·opencv·计算机视觉
guanshiyishi4 小时前
ABeam 德硕 | 中国汽车市场(2)——新能源车的崛起与中国汽车市场机遇与挑战
人工智能
极客天成ScaleFlash5 小时前
极客天成NVFile:无缓存直击存储性能天花板,重新定义AI时代并行存储新范式
人工智能·缓存
澳鹏Appen6 小时前
AI安全:构建负责任且可靠的系统
人工智能·安全
蹦蹦跳跳真可爱5896 小时前
Python----机器学习(KNN:使用数学方法实现KNN)
人工智能·python·机器学习
视界宝藏库7 小时前
多元 AI 配音软件,打造独特音频体验
人工智能
xinxiyinhe7 小时前
GitHub上英语学习工具的精选分类汇总
人工智能·deepseek·学习英语精选
ZStack开发者社区8 小时前
全球化2.0 | ZStack举办香港Partner Day,推动AIOS智塔+DeepSeek海外实践
人工智能·云计算
Spcarrydoinb9 小时前
基于yolo11的BGA图像目标检测
人工智能·目标检测·计算机视觉