当前位置: 首页 > news >正文

飞浆OCR模型训练详细教程

目录

  • 飞浆使用文档
  • 一 环境查看
    • 1.1 Python 环境
    • 1.2 版本选择
    • 1.3 飞浆测试
  • 二 数据集的标准备
    • 2.1 PPOCRLabelv2
      • 2.1.1 安装 PaddlePaddle
      • 2.1.2 安装与运行 PPOCRLabel
      • 2.1.3 数据集划分
  • 三 PaddleOCR 的环境搭建
    • 3.1 环境搭建
    • 3.2 模型下载
  • 四 模型训练
    • 4.1 检测模型训练
    • 4.2 识别模型训练
  • 五 模型转换
    • 5.1 检测模型转换
    • 5.2 识别模型转换
  • 六 使用模型

飞浆使用文档

  • 官网:https://www.paddlepaddle.org.cn/
  • 教程:PaddleOCR 模型训练及使用详细教程_paddleocr 使用-CSDN 博客

一 环境查看

1.1 Python 环境

Pyhton 环境

  • 需要确认 python 的版本是否满足要求使用以下命令确认是 3.8/3.9/3.10/3.11/3.12

python`` ``--``version

在这里插入图片描述

  • 安装 Python 环境:参考教程:https://blog.csdn.net/qq_53280175/article/details/121107748

pip 的版本

  • 需要确认 pip 的版本是否满足要求,要求 pip 版本为 20.2.2 或更高版本

python -m ensurepip

python -m pip --version

在这里插入图片描述

处理器架构

  • 需要确认 Python 和 pip 是 64bit,并且处理器架构是 x86_64(或称作 x64、Intel 64、AMD64)架构。下面的第一行输出的是”64bit”,第二行输出的是”x86_64”、”x64”或”AMD64”即可

python -c "import platform;print(platform.architecture()[0]);print(platform.machine())"

在这里插入图片描述

1.2 版本选择

  • 简单来说分为 CPU 与 GPU 版本,我这里选择 CPU 版本
  • CPU 的配置较简单,而 GPU 相对复杂,且配置繁琐
  • 安装
python -m pip install paddlepaddle==3.0.0b0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
  • 卸载
python -m pip uninstall paddlepaddle

1.3 飞浆测试

_"""_
_ @Author: EasonShu_
_ @FileName: ImagesTest.py_
_ @DateTime: 2024/7/18 下午4:10_
_"""_
import timefrom paddleocr import PaddleOCR
from paddlenlp import Taskflowfrom paddleocr import PaddleOCR
from sympy import true
#
# ocr = PaddleOCR(use_angle_cls=True,
#                 lang="ch",
#                 det_model_dir='model/mymodel/',
#                 rec_model_dir='model/recmodel/'
#                 )  # need to run only once to download and load model into memory
ocr = PaddleOCR(use_angle_cls=True,lang="ch")  # need to run only once to download and load model into memoryif __name__ == '__main__':# 中文结果chinese_characters =""SatrtTime = time.time()# 选择图片result = ocr.ocr("./images/微信图片_20240801205243.jpg", cls=True)for idx in range(len(result)):res = result[idx]for line in res:# 识别结果, 如果与dict中no_orc.txt的识别字符匹配,则滤掉chinese_characters += line[1][0]+"\n"print(chinese_characters)print("识别时间:", time.time() - SatrtTime)
  • 如果有结果表示安装成功可以进行下一步

二 数据集的标准备

2.1 PPOCRLabelv2

PPOCRLabel 是一款适用于 OCR 领域的半自动化图形标注工具,内置 PP-OCR 模型对数据自动标注和重新识别。使用 Python3 和 PyQT5 编写,支持矩形框标注、表格标注、不规则文本标注、关键信息标注模式,导出格式可直接用于 PaddleOCR 检测和识别模型的训练。

环境搭建

2.1.1 安装 PaddlePaddle

pip3 install --upgrade pip
# 如果您的机器是CPU,请运行以下命令安装
python3 -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 我的机器就是 CPU

2.1.2 安装与运行 PPOCRLabel

  • Window 平台
pip install PPOCRLabel  # 安装
# 选择标签模式来启动
PPOCRLabel --lang ch  # 启动【普通模式】,用于打【检测+识别】场景的标签
PPOCRLabel --lang ch --kie True  # 启动 【KIE 模式】,用于打【检测+识别+关键字提取】场景的标签
  • 运行

在这里插入图片描述

  • 导入数据,自动标注:注意有些标注点组要自己修改

在这里插入图片描述

在这里插入图片描述

  • 结果文件说明:

2.1.3 数据集划分

  • 方案一:自己下载源码:https://github.com/PFCCLab/PPOCRLabel
  • 安装依赖:

在这里插入图片描述

  • 方案二:先查看下载的 ppocrlabel 库所在位置:pip show ppocrlabel

在这里插入图片描述

  • 进入该目录终端运行该命令
python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath E:\PPOCRLabel-main\train_data --detRootPath E:\PPOCRLabel-main\train_data\det --recRootPath E:\PPOCRLabel-main\train_data\rec
  • trainValTestRatio 是训练集、验证集、测试集的图像数量划分比例,根据实际情况设定,默认是 6:2:2
  • datasetRootPath 是 PPOCRLabel 标注的完整数据集存放路径。默认路径是 …/train_data/
    就是步骤 6 的结果文件夹 train_data 文件夹。
  • detRootPath 是输出训练文字检测的数据集存放路径。默认路径是 …/train_data/det
  • recRootPath 是输出训练文字识别的数据集存放路径。默认路径是 …/train_data/rec

编写脚本方便下次使用

@echo off
setlocal enabledelayedexpansion:: 打印系统信息
echo -------- System Information --------
echo Current Date and Time: !date! !time!
echo Python Version:
python --version:: 指定数据分割脚本的路径和参数
set _SCRIPT_=gen_ocr_train_val_test.py
set _TRAINVALTESTRATIO_=6:2:2
set _DATASETROOTPATH_=E:\PPOCRLabel-main\train_data
set _DETROOTPATH_=E:\PPOCRLabel-main\train_data\det
set _RECROOTPATH_=E:\PPOCRLabel-main\train_data\rec:: 打印数据集分割命令
echo --------
echo Data Split Command:
echo python !SCRIPT! --trainValTestRatio !TRAINVALTESTRATIO! --datasetRootPath !DATASETROOTPATH! --detRootPath !DETROOTPATH! --recRootPath !RECROOTPATH!:: 执行Python数据集分割命令
echo --------
echo -------- begin data split --------
python !SCRIPT! --trainValTestRatio !TRAINVALTESTRATIO! --datasetRootPath !DATASETROOTPATH! --detRootPath !DETROOTPATH! --recRootPath !RECROOTPATH!
echo -------- end data split --------endlocal
  • 数据集划分结果:为下一步模型训练做准备

三 PaddleOCR 的环境搭建

3.1 环境搭建

  • 下载地址:https://github.com/PaddlePaddle/PaddleOCR/tree/main
  • 解压下载,用 Pycharm 打开

在这里插入图片描述

  • 依赖下载
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

在这里插入图片描述

3.2 模型下载

  • 参考网站:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/models_list.md
  • 主要分为三类:文本检测,文本识别,文本方向
  • det_model_dir 是检测模型的位置,rec_model_dir 是识别模型的位置,cls_model_dir 是分类模型的位置。

在这里插入图片描述

  • 将上一步的训练数据集已入跟目录下

在这里插入图片描述

四 模型训练

  • 参考配置文件:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/config.md

在这里插入图片描述

  • 新建 pretrain_models 文件夹,下载训练模型
  • 模型下载地址:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md

在这里插入图片描述

在这里插入图片描述

  • 注意:是训练模型,不是推理模型,而且有需要对应的配置文件,这个目录有

在这里插入图片描述
在这里插入图片描述

4.1 检测模型训练

在这里插入图片描述

  • 关键参数
Global:debug: false _# debug model_
_  _use_gpu: false _# 是否使用gpu_
_  _epoch_num: 500 _# 训练轮数_
_  _log_smooth_window: 20 _# 训练时,og队列长度,每次打印输出队列里的中间值_
_  _print_batch_step: 10 _# 每多少个batch打印一次日志_
_  _save_model_dir: ./output/ch_PP-OCR_v3_det/ _# 模型保存路径_
_  _save_epoch_step: 100 _# 每多少轮保存一次模型_
_  _max_text_length: 500 _# 最大文本长度_
_  _eval_batch_step: _# 评估模型间隔_
_  _- 0 _# 训练轮数_
_  _- 1 _# 评估轮数_
_  _cal_metric_during_train: false _# 设置是否在训练过程中评估指标,此时评估的是模型在当前batch下的指标_
_  _pretrained_model: ./pretrain_models/ch_PP-OCRv3_det_distill_train/ch_PP-OCRv3_det_distill_train/best_accuracy _#设置加载预训练模型路径_
_  _checkpoints: null _# 加载模型参数路径_
_  _save_inference_dir: nulluse_visualdl: true _# 是否使用visualdl_
_  _infer_img: doc/imgs_en/img_10.jpgsave_res_path: ./checkpoints/det_db/predicts_db.txt _# 设置检测模型的结果保存地址_
_  _distributed: true _# 设置是否识别空格_
_  _d2s_train_image_shape: [3, -1, -1]amp_dtype: bfloat16Architecture:name: DistillationModelalgorithm: Distillationmodel_type: detModels:Student:pretrained:model_type: detalgorithm: DBTransform: nullBackbone:name: MobileNetV3scale: 0.5model_name: largedisable_se: trueNeck:name: RSEFPNout_channels: 96shortcut: TrueHead:name: DBHeadk: 50Student2:pretrained:model_type: detalgorithm: DBTransform: nullBackbone:name: MobileNetV3scale: 0.5model_name: largedisable_se: trueNeck:name: RSEFPNout_channels: 96shortcut: TrueHead:name: DBHeadk: 50Teacher:freeze_params: truereturn_all_feats: falsemodel_type: detalgorithm: DBBackbone:name: ResNet_vdin_channels: 3layers: 50Neck:name: LKPANout_channels: 256Head:name: DBHeadkernel_list: [7,2,2]k: 50Loss:name: CombinedLossloss_config_list:- DistillationDilaDBLoss:weight: 1.0model_name_pairs:- ["Student", "Teacher"]- ["Student2", "Teacher"]key: mapsbalance_loss: truemain_loss_type: DiceLossalpha: 5beta: 10ohem_ratio: 3- DistillationDMLLoss:model_name_pairs:- ["Student", "Student2"]maps_name: "thrink_maps"weight: 1.0model_name_pairs: ["Student", "Student2"]key: maps- DistillationDBLoss:weight: 1.0model_name_list: ["Student", "Student2"]balance_loss: truemain_loss_type: DiceLossalpha: 5beta: 10ohem_ratio: 3_####优化器类名###_
_###学习率是训练神经网络的重要超参数之一,它代表在每一次迭代中梯度向损失函数最优解移动的步长。_
_###_
Optimizer:name: Adam _# 目前支持Momentum,Adam,RMSProp, 见ppocr/optimizer/optimizer.py_
_  _beta1: 0.9 _# 设置一阶矩估计的指数衰减率_
_  _beta2: 0.999 _# 设置二阶矩估计的指数衰减率_
_  _lr:name: Cosinelearning_rate: 0.001warmup_epoch: 2regularizer:name: L2factor: 5.0e-05PostProcess:name: DistillationDBPostProcessmodel_name: ["Student"]key: head_outthresh: 0.3box_thresh: 0.6max_candidates: 1000unclip_ratio: 1.5Metric:name: DistillationMetricbase_metric_name: DetMetricmain_indicator: hmeankey: "Student"
_# 训练数据集配置_
Train:dataset:name: SimpleDataSetdata_dir: ./train_data/ _# 数据集路径_
_    _label_file_list:- ./train_data/det/train.txt _# 训练数据标签文件_
_    _ratio_list: [1.0]transforms:- DecodeImage:img_mode: BGRchannel_first: false- DetLabelEncode: null- CopyPaste:- IaaAugment:augmenter_args:- type: Fliplrargs:p: 0.5- type: Affineargs:rotate:- -10- 10- type: Resizeargs:size:- 0.5- 3- EastRandomCropData:size:- 960- 960max_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.406std:- 0.229- 0.224- 0.225order: hwc- ToCHWImage: null- KeepKeys:keep_keys:- image- threshold_map- threshold_mask- shrink_map- shrink_maskloader:shuffle: truedrop_last: falsebatch_size_per_card: 8num_workers: 4
_# 评估数据集配置_
Eval:dataset:name: SimpleDataSetdata_dir: ./train_data/ _# 数据集路径_
_    _label_file_list:- ./train_data/det/val.txt _# 训练数据标签文件_
_    _transforms:- DecodeImage: _# load image_
_          _img_mode: BGRchannel_first: False- DetLabelEncode: _# Class handling label_
_      _- DetResizeForTest:- 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 1_
_    _num_workers: 2
  • 开始训练,注意在根目录下
python tools/train.py -c pretrain_models/ch_PP-OCRv3_det_cml.yml
  • 编写运行脚本下次使用
@echo off
setlocal enabledelayedexpansion:: 指定Python解释器的路径,如果不在PATH中
:: set PYTHON_EXECUTABLE=C:\path\to\python.exe:: 打印系统信息
echo -------- System Information --------
echo Current Date and Time: !date! !time!
echo Python Version:
python --version
echo PaddlePaddle Version:
python -c "import paddle; print(paddle.__version__)":: 指定训练脚本和配置文件的路径
set _TRAIN_SCRIPT_=tools\train.py
set _CONFIG_FILE_=pretrain_models\ch_PP-OCRv3_det_cml.yml:: 打印训练命令
echo --------
echo Training Command:
echo python !TRAIN_SCRIPT! -c !CONFIG_FILE!:: 执行Python训练命令
echo --------
echo -------- begin train --------
python !TRAIN_SCRIPT! -c !CONFIG_FILE!
echo -------- end train --------endlocal
  • 查看日志

在这里插入图片描述

  • 评估模型中
hmean: 0.90104772991851, is_float16: False, precision: 0.8745762711864407, recall: 0.929171668667467, fps: 0.010587729849145846, best_epoch: 1
  1. hmean (调和平均数): 这是精度(precision)和召回率(recall)的调和平均数,通常用于评估分类器的整体性能。它在两个指标都较高时才给出较高的值,因此是一个更全面的性能度量。0.90104772991851 是一个相当高的值,表明模型在预测方面表现良好。
  2. is_float16: 这个布尔值表明模型是否使用了 float16 数据类型。False 意味着模型使用的是更高精度的数据类型,如 float32 或 float64。
  3. precision (精确率): 这是所有被模型预测为正类别的样本中,真正属于正类别的比例。0.8745762711864407 表示当模型预测某个样本为正类时,大约有 87.46% 的概率它是正确的。
  4. recall (召回率): 这是所有实际为正类别的样本中,被模型正确识别为正类别的比例。0.929171668667467 表示模型能够识别出大约 92.92% 的真实正类样本。
  5. fps: 这可能指的是每秒帧数(Frames Per Second),如果这个上下文与图像处理或视频分析相关。但是,在机器学习模型评估中,这可能是指“假阳性每秒”(False Positives per Second),表示模型每秒钟产生的假阳性数量。0.010587729849145846 指的是模型每秒产生的假阳性非常低。
  6. best_epoch: 这个值指示训练过程中哪个 epoch(训练轮次)的模型表现最佳。在这个例子中,best_epoch 是 1,意味着模型在第一个 epoch 结束时达到了最佳性能。
  • 日志查看:经过 20 轮的训练,我们可以看到参数在发生变化,但是 CPU 运行效率有点慢

!在这里插入图片描述

在这里插入图片描述

4.2 识别模型训练

在这里插入图片描述

  • 配置文件
Global:debug: trueuse_gpu: falseepoch_num: 100log_smooth_window: 20print_batch_step: 1save_model_dir: ./output/rec_ppocr_v3_distillationsave_epoch_step: 10eval_batch_step: [0, 10]cal_metric_during_train: truepretrained_model: ./pretrain_models/ch_PP-OCRv3_rec_train/ch_PP-OCRv3_rec_train/best_accuracy _#设置加载预训练模型路径_
_  _checkpoints:save_inference_dir:use_visualdl: falseinfer_img: doc/imgs_words/ch/word_1.jpgcharacter_dict_path: ppocr/utils/ppocr_keys_v1.txtmax_text_length: &max_text_length 1000infer_mode: falseuse_space_char: truedistributed: truesave_res_path: ./output/rec/predicts_ppocrv3_distillation.txtd2s_train_image_shape: [3, 48, -1]Optimizer:name: Adambeta1: 0.9beta2: 0.999lr:name: Piecewisedecay_epochs : [700]values : [0.0005, 0.00005]warmup_epoch: 5regularizer:name: L2factor: 3.0e-05Architecture:model_type: &model_type "rec"name: DistillationModelalgorithm: DistillationModels:Teacher:pretrained:freeze_params: falsereturn_all_feats: truemodel_type: *model_typealgorithm: SVTR_LCNetTransform:Backbone:name: MobileNetV1Enhancescale: 0.5last_conv_stride: [1, 2]last_pool_type: avglast_pool_kernel_size: [2, 2]Head:name: MultiHeadhead_list:- CTCHead:Neck:name: svtrdims: 64depth: 2hidden_dims: 120use_guide: TrueHead:fc_decay: 0.00001- SARHead:enc_dim: 512max_text_length: *max_text_lengthStudent:pretrained:freeze_params: falsereturn_all_feats: truemodel_type: *model_typealgorithm: SVTR_LCNetTransform:Backbone:name: MobileNetV1Enhancescale: 0.5last_conv_stride: [1, 2]last_pool_type: avglast_pool_kernel_size: [2, 2]Head:name: MultiHeadhead_list:- CTCHead:Neck:name: svtrdims: 64depth: 2hidden_dims: 120use_guide: TrueHead:fc_decay: 0.00001- SARHead:enc_dim: 512max_text_length: *max_text_length
Loss:name: CombinedLossloss_config_list:- DistillationDMLLoss:weight: 1.0act: "softmax"use_log: truemodel_name_pairs:- ["Student", "Teacher"]key: head_outmulti_head: Truedis_head: ctcname: dml_ctc- DistillationDMLLoss:weight: 0.5act: "softmax"use_log: truemodel_name_pairs:- ["Student", "Teacher"]key: head_outmulti_head: Truedis_head: sarname: dml_sar- DistillationDistanceLoss:weight: 1.0mode: "l2"model_name_pairs:- ["Student", "Teacher"]key: backbone_out- DistillationCTCLoss:weight: 1.0model_name_list: ["Student", "Teacher"]key: head_outmulti_head: True- DistillationSARLoss:weight: 1.0model_name_list: ["Student", "Teacher"]key: head_outmulti_head: TruePostProcess:name: DistillationCTCLabelDecodemodel_name: ["Student", "Teacher"]key: head_outmulti_head: TrueMetric:name: DistillationMetricbase_metric_name: RecMetricmain_indicator: acckey: "Student"ignore_space: FalseTrain:dataset:name: SimpleDataSetdata_dir: ./train_data/ _# 数据集路径_
_    _ext_op_transform_idx: 1label_file_list:- ./train_data/rec/train.txt _# 训练数据标签文件_
_    _transforms:- DecodeImage:img_mode: BGRchannel_first: false- RecConAug:prob: 0.5ext_data_num: 2image_shape: [48, 320, 3]max_text_length: *max_text_length- RecAug:- MultiLabelEncode:- RecResizeImg:image_shape: [3, 48, 320]- KeepKeys:keep_keys:- image- label_ctc- label_sar- length- valid_ratioloader:shuffle: truebatch_size_per_card: 128drop_last: truenum_workers: 4
Eval:dataset:name: SimpleDataSetdata_dir: ./train_datalabel_file_list:- ./train_data/rec/val.txt _# 训练数据标签文件_
_    _transforms:- DecodeImage:img_mode: BGRchannel_first: false- MultiLabelEncode:- RecResizeImg:image_shape: [3, 48, 320]- KeepKeys:keep_keys:- image- label_ctc- label_sar- length- valid_ratioloader:shuffle: falsedrop_last: falsebatch_size_per_card: 128num_workers: 4
  • 执行训练
**python tools/train.py -c pretrain_models/ch_PP-OCRv3_rec_distillation.yml**
  • 编写脚本
@echo off
setlocal enabledelayedexpansion:: 指定Python解释器的路径,如果不在PATH中
:: set PYTHON_EXECUTABLE=C:\path\to\python.exe:: 打印系统信息
echo -------- System Information --------
echo Current Date and Time: !date! !time!
echo Python Version:
python --version
echo PaddlePaddle Version:
python -c "import paddle; print(paddle.__version__)":: 指定训练脚本和配置文件的路径
set _TRAIN_SCRIPT_=tools\train.py
set _CONFIG_FILE_=pretrain_models\ch_PP-OCRv3_rec_distillation.yml:: 打印训练命令
echo --------
echo Training Command:
echo python !TRAIN_SCRIPT! -c !CONFIG_FILE!:: 执行Python训练命令
echo --------
echo -------- begin train --------
python !TRAIN_SCRIPT! -c !CONFIG_FILE!
echo -------- end train --------endlocal
  • 运行结果:我们可以发现准确率不高,需要多次训练
acc: 0.5774739545737373, norm_edit_dis: 0.8797479676734311, Teacher_acc: 0.5605468713506063, Teacher_norm_edit_dis: 0.8741167944408945, fps: 3.7627413423809424

acc (Accuracy, 准确率):

  • : 0.5774739545737373
  • 解释: 准确率表示模型预测正确的比例。在这里,模型的准确率约为 57.75%,即模型在测试数据上有 57.75% 的预测是正确的。

norm_edit_dis (Normalized Edit Distance, 归一化编辑距离):

  • : 0.8797479676734311
  • 解释: 归一化编辑距离用于衡量模型预测与真实标签之间的差异,值越小表示预测越接近真实值。在这里,归一化编辑距离约为 0.88,表明模型预测与真实标签之间有一定的差异。

Teacher_acc (Teacher Accuracy, 教师模型准确率):

  • : 0.5605468713506063
  • 解释: 教师模型是用于指导学生模型训练的参考模型。教师模型的准确率约为 56.05%。

Teacher_norm_edit_dis (Teacher Normalized Edit Distance, 教师模型归一化编辑距离):

  • : 0.8741167944408945
  • 解释: 教师模型的归一化编辑距离约为 0.87,表示教师模型预测与真实标签之间的差异情况。

fps (Frames per Second, 每秒帧数):

  • : 3.7627413423809424
  • 解释: 每秒帧数表示模型处理每帧图像的速度。在这里,模型每秒能处理约 3.76 帧图像,说明模型的计算速度。

五 模型转换

5.1 检测模型转换

  • 执行命令
python tools/export_model.py -c pretrain_models/ch_PP-OCRv3_det_cml.yml -o Global.pretrained_model=./output/ch_PP-OCR_v3_det/best_accuracy  Global.save_inference_dir=./inference_model/det_model/
@echo off
setlocal enabledelayedexpansion:: 指定Python解释器的路径,如果不在PATH中
:: set PYTHON_EXECUTABLE=C:\path\to\python.exe:: 打印系统信息
echo -------- System Information --------
echo Current Date and Time: !date! !time!
echo Python Version:
python --version
echo PaddlePaddle Version:
python -c "import paddle; print(paddle.__version__)":: 指定导出模型的脚本和配置文件的路径
set _EXPORT_SCRIPT_=tools\export_model.py
set _CONFIG_FILE_=pretrain_models\ch_PP-OCRv3_det_cml.yml
set _PRETRAINED_MODEL_=./output/rec_ppocr_v3_distillation/best_accuracy
set _SAVE_INFERENCE_DIR_=./inference_model/ret_model/:: 打印导出模型的命令
echo --------
echo Export Model Command:
echo python !EXPORT_SCRIPT! -c !CONFIG_FILE! -o Global.pretrained_model=!PRETRAINED_MODEL! Global.save_inference_dir=!SAVE_INFERENCE_DIR!:: 执行Python导出模型命令
echo --------
echo -------- begin export --------
python !EXPORT_SCRIPT! -c !CONFIG_FILE! -o Global.pretrained_model=!PRETRAINED_MODEL! Global.save_inference_dir=!SAVE_INFERENCE_DIR!
echo -------- end export --------endlocal
  • -c 指定导出模型使用的配置文件,需与训练时使用的配置文件相同
  • -o 指定配置文件中的某个参数,即在不修改配置文件的情况下修改参数
  • Global.pretrained_model 此处是指要导出模型的参数文件路径
  • Global.save_inference_dir 指导出模型的保存路径
  • 导出结果

在这里插入图片描述

5.2 识别模型转换

  • 执行命令
python tools/export_model.py -c pretrain_models/ch_PP-OCRv3_det_cml.yml -o Global.pretrained_model=./output/rec_ppocr_v3_distillation/best_accuracy  Global.save_inference_dir=./inference_model/ret_model/
@echo off
setlocal enabledelayedexpansion:: 打印系统信息
echo -------- System Information --------
echo Current Date and Time: !date! !time!
echo Python Version:
python --version
echo PaddlePaddle Version:
python -c "import paddle; print(paddle.__version__)":: 指定模型导出脚本和配置文件的路径
set _EXPORT_SCRIPT_=tools\export_model.py
set _CONFIG_FILE_=pretrain_models\ch_PP-OCRv3_det_cml.yml
set _PRETRAINED_MODEL_=./output\rec_ppocr_v3_distillation\best_accuracy
set _SAVE_INFERENCE_DIR_=./inference_model\ret_model/:: 打印模型导出命令
echo --------
echo Export Model Command:
echo python !EXPORT_SCRIPT! -c !CONFIG_FILE! -o Global.pretrained_model=!PRETRAINED_MODEL! Global.save_inference_dir=!SAVE_INFERENCE_DIR!:: 执行Python模型导出命令
echo --------
echo -------- begin export --------
python !EXPORT_SCRIPT! -c !CONFIG_FILE! -o Global.pretrained_model=!PRETRAINED_MODEL! Global.save_inference_dir=!SAVE_INFERENCE_DIR!
echo -------- end export --------endlocal
  • -c 指定导出模型使用的配置文件,需与训练时使用的配置文件相同
  • -o 指定配置文件中的某个参数,即在不修改配置文件的情况下修改参数
  • Global.pretrained_model 此处是指要导出模型的参数文件路径
  • Global.save_inference_dir 指导出模型的保存路径
  • 导出结果,参考上面只是目录不一样

六 使用模型

在这里插入图片描述

_"""@Author: EasonShu@FileName: ImagesTest.py@DateTime: 2024/7/18 下午4:10
"""
import timefrom paddleocr import PaddleOCR
from paddlenlp import Taskflowfrom paddleocr import PaddleOCR
from sympy import true
#
ocr = PaddleOCR(use_angle_cls=True,lang="ch",det_model_dir='model/mymodel/',rec_model_dir='model/ch_PP-OCRv4_rec_server_infer/')  # need to run only once to download and load model into memory
# ocr = PaddleOCR(use_angle_cls=True,
#                 lang="ch"
#                 )  # need to run only once to download and load model into memory
# 加载dict下的不识别字符,过滤掉if __name__ == '__main__':# 中文结果chinese_characters =""SatrtTime = time.time()# 选择图片result = ocr.ocr("./images/810a19d8bc3eb1359aef8739a61ea8d3fd1f4403.jpg", cls=True)for idx in range(len(result)):res = result[idx]for line in res:# 识别结果, 如果与dict中no_orc.txt的识别字符匹配,则滤掉chinese_characters += line[1][0]+"\n"print(chinese_characters)
__    print("识别时间:", time.time() - SatrtTime)_

在这里插入图片描述

  • 可以发现效果不是很好,可能需要更多数据集

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 短视频系统设计:支持三千万用户同时在线看视频
  • OD C卷 - 分配土地
  • 在 Django 模板中渲染并行数组
  • Es6常用的一些数组处理方法
  • JetBrains:Wrong tag。注释告警
  • 代码随想录算法训练营第三十天 | 贪心算法 part04
  • Python接口自动化测试框架(实战篇)-- Jenkins持续集成
  • PXE+Kickstart自动化安装操作系统
  • 荒原之梦考研:考研二战会很难吗?
  • 二十八、【人工智能】【机器学习】【PyTorch】- 手写体识别
  • 下一个排列
  • FFmpeg有理数相关的源码:AVRational结构体和其相关的函数分析
  • 英伟达显卡查看占用情况
  • 设计模式实战:报表生成系统的设计与实现
  • Chapter 22 数据可视化——折线图
  • [译]Python中的类属性与实例属性的区别
  • 08.Android之View事件问题
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • AngularJS指令开发(1)——参数详解
  • crontab执行失败的多种原因
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Javascript弹出层-初探
  • JS学习笔记——闭包
  • mongo索引构建
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue中实现单选
  • windows-nginx-https-本地配置
  • 第2章 网络文档
  • 聊一聊前端的监控
  • 码农张的Bug人生 - 见面之礼
  • 日剧·日综资源集合(建议收藏)
  • MPAndroidChart 教程:Y轴 YAxis
  • ​一些不规范的GTID使用场景
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #07【面试问题整理】嵌入式软件工程师
  • #单片机(TB6600驱动42步进电机)
  • (C++20) consteval立即函数
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (南京观海微电子)——COF介绍
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (学习日记)2024.01.19
  • (一)Linux+Windows下安装ffmpeg
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (转载)深入super,看Python如何解决钻石继承难题
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .cn根服务器被攻击之后