PP-OCRv3进行OCR手写文字识别

本项目基于PP-OCRv3进行手写文字识别优化,通过本项目你可以掌握:

  • 如何优化手写识别模型
  • 使用PaddleOCR进行手写模型推理部署

1. 背景介绍

手写体在日常生活中较为常见,无论是记笔记,亦或是手写书信,再或是现如今出现的各种电子设备也都支持手写输入,或是触摸屏输入,手写体可以说是随处可见。手写体的自动识别功能对于保存手写体的内容是极为重要的。

example

手写体识别具有以下几个难点:

  • 中文汉字字符级别的类别繁多;
  • 手写体字符的书写随意性大, 缺乏规范性
  • 不同书写人书写风格多样
  • 中文汉字中存在很多相似字和易混淆的汉字对

以上难点对手写体自动识别都带来了很大的挑战。传统方法是基于投影法、连通域分析法等方法对文本行进行字符分割, 利用单字分类器对分割好的字符, 或利用滑动窗口按一定步长滑窗, 利用单字分类器对滑动窗口内的字符进行识别,但是这些方法的准确率有限,因此需要更为有效的方法来解决该问题。本项目通过计算机视觉中的OCR技术实现自动化的手写文字识别,具体地,本项目基于PP-OCRv3中英文超轻量模型进行优化,最终模型识别效果大大提升。

2. 快速体验

2.1 环境搭建

本项目基于PaddleOCR套件,以PP-OCRv3识别模型为基础,针对手写文字识别场景进行优化。

首先进行安装环境,命令如下:

In [ ]

# 首先git官方的PaddleOCR项目,安装需要的依赖
# 第一次运行打开该注释
# !git clone https://gitee.com/PaddlePaddle/PaddleOCR.git
%cd /home/aistudio/PaddleOCR
!pip install -r requirements.txt

2.2 模型推理

将下载或训练完成的模型放置在对应目录下即可完成模型推理。推理命令如下:

In [ ]

%cd /home/aistudio/PaddleOCR
# 推理预测
!python tools/infer/predict_rec.py --image_dir="train_data/handwrite/HWDB2.0Test_images/104-P16_4.jpg" --rec_model_dir="./inference/rec_ppocrv3/Student"

推理结果如下:

example

[2022/07/14 10:55:58] ppocr INFO: Predicts of train_data/handwrite/HWDB2.0Test_images/104-P16_4.jpg:('品结构,差异化的多品牌渗透使欧莱雅确立了其在中国化妆', 0.9904912114143372)

3. 数据准备

本项目使用公开的手写文本识别数据集,包含Chinese OCR, 中科院自动化研究所-手写中文数据集CASIA-HWDB2.x,以及由中科院手写数据和网上开源数据合并组合的数据集等,该项目已经挂载处理好的数据集,可直接下载使用进行训练。

In [ ]

%cd /home/aistudio/PaddleOCR

# 查看当前挂载的数据集目录
!ls /home/aistudio/data/
# 解压挂载的字符检测数据集到指定路径下
# !tar -xf /home/aistudio/data/data157646/hw_data.tar

4. 针对文字识别的优化

本部分基于PP-OCRv3的识别模型进行优化,关于PP-OCRv3的识别模型详细描述请参考PP-OCRv3。PP-OCRv3识别模型是基于自然场景文本数据训练出的模型,对于手写体的识别效果并不好,因此需要对其进行优化,优化方案如下:

  1. 基于PP-OCRv3的识别模型直接进行评估
  2. 基于PP-OCRv3的识别模型finetune

下面依次进行介绍:

4.1 基于PP-OCRv3的识别模型直接进行评估

下载预训练模型

首先下载需要的PP-OCRv3识别预训练模型,更多选择请自行下载其他的文字识别模型

In [ ]

%cd /home/aistudio/PaddleOCR
# 使用该指令下载需要的预训练模型
!wget -P ./pretrained_models/ https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_train.tar
# 解压预训练模型文件
!tar -xf ./pretrained_models/ch_PP-OCRv3_rec_train.tar -C pretrained_models

效果评估

使用下面命令来评估PP-OCRv3预训练模型的效果:

In [ ]

%cd /home/aistudio/PaddleOCR
# 评估预训练模型
!python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrained_models/ch_PP-OCRv3_rec_train/best_accuracy"

评估结果如下:

[2022/07/14 10:49:52] ppocr INFO: metric eval ***************
[2022/07/14 10:49:52] ppocr INFO: acc:0.03724954461811258
[2022/07/14 10:49:52] ppocr INFO: norm_edit_dis:0.4859541065843199
[2022/07/14 10:49:52] ppocr INFO: Teacher_acc:0.0371584699368947
[2022/07/14 10:49:52] ppocr INFO: Teacher_norm_edit_dis:0.48718814890536477
[2022/07/14 10:49:52] ppocr INFO: fps:947.8562684823883

可以看出,直接加载预训练模型进行评估,效果较差,因为预训练模型并不是基于手写文字进行单独训练的,所以需要基于预训练模型进行finetune优化。

4.2 基于PP-OCRv3的识别模型finetune

修改配置文件

该方案使用configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml配置文件,主要修改训练轮数和学习率参相关参数,设置预训练模型路径,设置数据集路径。 另外,batch_size可根据自己机器显存大小进行调整。 具体修改如下几个地方:

  epoch_num: 100 # 训练epoch数
  save_model_dir: ./output/ch_PP-OCR_v3_rec
  save_epoch_step: 10
  eval_batch_step: [0, 100] # 评估间隔,每隔100step评估一次
  pretrained_model: ./pretrained_models/ch_PP-OCRv3_rec_train/best_accuracy  # 预训练模型路径
  

  lr:
    name: Cosine # 修改学习率衰减策略为Cosine
    learning_rate: 0.0001 # 修改fine-tune的学习率
    warmup_epoch: 2 # 修改warmup轮数

Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data # 训练集图片路径
    ext_op_transform_idx: 1
    label_file_list: # 训练集标签
    - ./train_data/chineseocr-data/rec_hand_line_all_label_train.txt 
    - ./train_data/handwrite/HWDB2.0Train_label.txt
    - ./train_data/handwrite/HWDB2.1Train_label.txt
    - ./train_data/handwrite/HWDB2.2Train_label.txt
    - ./train_data/handwrite/hwdb_ic13/handwriting_hwdb_train_labels.txt
    - ./train_data/handwrite/HW_Chinese/train_hw.txt
    ratio_list:
    - 0.1
    - 1.0
    - 1.0
    - 1.0
    - 0.02
    - 1.0
  loader:
    shuffle: true
    batch_size_per_card: 64
    drop_last: true
    num_workers: 4
Eval:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data # 测试集图片路径
    label_file_list: # 测试集标签
    - ./train_data/chineseocr-data/rec_hand_line_all_label_val.txt 
    - ./train_data/handwrite/HWDB2.0Test_label.txt
    - ./train_data/handwrite/HWDB2.1Test_label.txt
    - ./train_data/handwrite/HWDB2.2Test_label.txt
    - ./train_data/handwrite/hwdb_ic13/handwriting_hwdb_val_labels.txt
    - ./train_data/handwrite/HW_Chinese/test_hw.txt
  loader:
    shuffle: false
    drop_last: false
    batch_size_per_card: 64
    num_workers: 4

由于数据集大多是长文本,因此需要注释掉下面的数据增广策略,以便训练出更好的模型。

- RecConAug:
    prob: 0.5
    ext_data_num: 2
    image_shape: [48, 320, 3]

开始训练

使用上面修改好的配置文件configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml,预训练模型、数据集路径、学习率、训练轮数等都已经设置完毕后,使用下面命令开始训练:

In [3]

%cd /home/aistudio/PaddleOCR
# 开始训练识别模型
!python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml

效果评估 训练完成后,可以进行测试评估,评估命令如下:

In [5]

%cd /home/aistudio/PaddleOCR
# 评估finetune效果
!python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./output/ch_PP-OCR_v3_rec/best_accuracy"

评估结果如下,可以看出识别准确率acc为54.3%,归一化的编辑距离norm_edit_dis92%,该值越大越好,越大说明预测值和真实值越相近,而acc是一个比较严格的评测指标,只要有一个字符错了,那么就认定该文本行预测结果是错的。

[2022/07/14 10:54:06] ppocr INFO: metric eval ***************
[2022/07/14 10:54:06] ppocr INFO: acc:0.5430100180913
[2022/07/14 10:54:06] ppocr INFO: norm_edit_dis:0.9203322593158589
[2022/07/14 10:54:06] ppocr INFO: Teacher_acc:0.5401183969626324
[2022/07/14 10:54:06] ppocr INFO: Teacher_norm_edit_dis:0.919827504507755
[2022/07/14 10:54:06] ppocr INFO: fps:928.948733797251

5 python引擎推理

训练完成后,可以将训练模型转换成inference模型。inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合于实际系统集成。

5.1 模型导出

导出命令如下:

In [6]

%cd /home/aistudio/PaddleOCR
# 转化为推理模型
!python tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./output/ch_PP-OCR_v3_rec/best_accuracy" Global.save_inference_dir="./inference/rec_ppocrv3/"

5.2 模型推理

导出模型后,可以使用如下命令进行推理预测:

In [7]

%cd /home/aistudio/PaddleOCR
# 推理预测
!python tools/infer/predict_rec.py --image_dir="train_data/handwrite/HWDB2.0Test_images/104-P16_4.jpg" --rec_model_dir="./inference/rec_ppocrv3/Student"

推理结果如下:

Predicts of train_data/handwrite/HWDB2.0Test_images/104-P16_4.jpg:('品结构,差异化的多品牌渗透使欧莱雅确立了其在中国化妆', 0.9904912114143372

In [9]

# 可视化文字识别图片
from PIL import Image  
import matplotlib.pyplot as plt
import numpy as np
import os 

    
img_path = 'train_data/handwrite/HWDB2.0Test_images/104-P16_4.jpg' 
 
def vis(img_path): 
    plt.figure() 
    image = Image.open(img_path)  
    plt.imshow(image)
    plt.show()
    # image = image.resize([208, 208])  
    
  
vis(img_path)

example

6. 总结

本项目基于PP-OCRv3中英文超轻量预训练模型进行优化手写文字识别模型,将默认预训练模型的准确率从0.03%提升到54%,可以看出,模型训练效果还有进一步的提升空间,但是通过可视化输出样例,可以看出模型效果还是可观的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要部署PP-OCRv3模型,你可以按照以下步骤进行操作: 1. 首先,下载并解压PP-OCRv3模型。你可以使用以下命令下载和解压目标检测模型和文字识别模型: ``` wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar tar xf ch_PP-OCRv3_det_infer.tar tar xf ch_PP-OCRv3_rec_infer.tar ``` 2. 接下来,你可以使用PaddleOCR计算模型的检测指标,包括Precision、Recall和Hmean(F-Score)等。这些指标可以帮助你评估模型的性能。 3. 如果你想使用PPOCRLabel工具对数据集进行标注,可以按照以下步骤进行安装和启动: - 对于Ubuntu Linux系统,使用以下命令安装PPOCRLabel和其依赖项: ``` pip3 install PPOCRLabel pip3 install trash-cli PPOCRLabel --lang ch ``` - 对于MacOS系统,使用以下命令安装PPOCRLabel和其依赖项: ``` pip3 install PPOCRLabel pip3 install opencv-contrib-python-headless==4.2.0.32 # 如果下载过慢请添加"-i https://mirror.baidu.com/pypi/simple" PPOCRLabel --lang ch ``` 请按照上述步骤进行PP-OCRv3模型的部署。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ARM端部署PP-OCR_V3](https://blog.csdn.net/crazty/article/details/126484626)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [PPv3-OCR自定义数据从训练到部署](https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/125087878)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值