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

paddleocr安装,数据集制作,训练自己的模型,调用训练好的模型

文章目录

  • 一. PaddleOCR环境安装
  • 二.OCR识别
  • 三.标注自己的数据集
  • 四.训练自己的模型
    • 训练自己的文字检测模型

PaddleOCR官网
PaddleOCR官网教程

一. PaddleOCR环境安装

cuda:cuda_11.8.0_522.06_windows
cudnn:cudnn-windows-x86_64-8.9.7.29_cuda11-archive

conda create -n paddleocr python=3.10
python -m pip install paddlepaddle-gpu==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
pip install paddleocr -i https://pypi.mirrors.ustc.edu.cn/simple/
pip install paddleocr -i https://pypi.mirrors.ustc.edu.cn/simple/
git clone https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
pip install -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/

二.OCR识别

from paddleocr import PaddleOCR
from datetime import datetime
import cv2ocr = PaddleOCR(use_doc_orientation_classify=False, # 通过 use_doc_orientation_classify 参数指定不使用文档方向分类模型use_doc_unwarping=False, # 通过 use_doc_unwarping 参数指定不使用文本图像矫正模型use_textline_orientation=False, # 通过 use_textline_orientation 参数指定不使用文本行方向分类模型
)img = cv2.imread("example_ocr.png")
x, y, w, h = 0, 0, 600, 111  # x, y 是左上角坐标,w 和 h 是宽度和高度
roi = img[y:y+h, x:x+w]  # 截取感兴趣区域
cv2.rectangle(roi, (250, 0), (385, 111), (255, 255, 255), -1)  # 绘制矩形
# cv2.imshow("1", roi)
# cv2.waitKey(0)
result = ocr.predict(roi)# 定义日期和时间的格式
datetime_format = '%Y-%m-%d%H:%M:%S'# 将合并后的字符串转换为 datetime 对象
datetime_obj = datetime.strptime(result[0]["rec_texts"][0] + result[0]["rec_texts"][1], datetime_format)
formatted_date = datetime_obj.strftime("%Y%m%d_%H%M%S")  # 输出格式为 "20250608_171034"
print(formatted_date)

PaddleOCR可选参数含义:

参数名默认值作用说明
input / -i必填要识别的图像、PDF 或文件夹路径
lang“ch”指定语言模型:ch, en, fr, japan, korean, german
ocr_version“PP-OCRv5”选择算法版本:PP-OCRv3 / v4 / v5 / v5_server 等
device“gpu:0”运行设备:cpu, gpu, gpu:1
use_doc_orientation_classifyFalse是否启用整图方向分类(0°/90°/180°/270°)
use_doc_unwarpingFalse是否对弯曲/倾斜文档做展平校正
use_textline_orientationFalse是否对每个文字行再做 180° 纠正
text_det_limit_side_len960检测阶段图片最长边限制,大图会被等比缩放
text_det_limit_type“max”缩放策略:max(按长边)或 min(按短边)
text_det_thresh0.3检测概率图二值化阈值,越大越严格
text_det_box_thresh0.6检测框置信度过滤阈值
text_det_unclip_ratio1.5检测框外扩比例,越大框越宽松
text_rec_score_thresh / drop_score0.5识别结果置信度过滤阈值,低于该值丢弃
save_path“./output”结果保存目录(命令行方式)
page_num0PDF 场景下要识别的前 N 页,0 表示全部
use_angle_clsFalse是否使用方向分类器(传统 cls 模型)
det_model_dir内置自定义检测模型路径
rec_model_dir内置自定义识别模型路径
cls_model_dir内置自定义方向分类模型路径
use_mpFalse是否开启多进程加速(CPU 场景)
cpu_threads10CPU 预测时的线程数
precision“fp32”计算精度:fp32, fp16, int8(TensorRT 下有效)
ir_optimTrue是否打开计算图优化
use_tensorrtFalse是否启用 TensorRT 加速
benchmarkFalse是否开启 benchmark 日志统计耗时与显存

predict函数中可选参数的含义:

参数名类型/默认值作用说明
inputAny

要识别的原始输入,可以是图片路径、np.ndarray、PIL.Image、pdf 文件路径、甚至 http url 等。
use_doc_orientation_classifybool / None是否启用文档方向分类(0°/90°/180°/270°)。如果为 True,会在真正 OCR 前先把整个图片旋转到正向,提高后续文字检测和识别准确率。
use_doc_unwarpingbool / None是否启用文档去畸变/展平(dewarping)。对拍摄的书页、折皱纸张、弯曲曲面等场景有效,先把曲面拉平再做 OCR。
use_textline_orientationbool / None是否启用单行文字方向分类。有些场景里,单行文字本身可能是竖排或旋转 180°,打开后会给每一行文字再做一次方向校正。
text_det_limit_side_lenint / None检测阶段最长边限制。图片会先等比缩放,使长边 ≤ 该值;过大图片会被缩小以节省显存,过小会被放大以提高小字召回率。常见设置 960、1536、2048 等。
text_det_limit_typestr / None当长边超过 limit_side_len 时的缩放方式。常见取值:
- “max”(默认)——按长边比例整体缩放;
- “min” ——按短边比例整体缩放;
- “none” ——不缩放。
text_det_threshfloat / None检测网络输出的概率图二值化阈值。值越大,检测框越少、越“有把握”,但容易漏检;值越小,框越多,容易引入噪声。典型 0.3~0.5。
text_det_box_threshfloat / None对检测框再做一次置信度过滤的阈值。低于该值的框会被丢弃。通常比 text_det_thresh 稍高,如 0.5~0.6。
text_det_unclip_ratiofloat / None控制检测框“外扩”比例。检测网络给出的是文字区域的收缩核,需要按一定比例向外扩张才能包住完整文字。值越大,框越宽松,易粘连;值越小,框偏紧,可能切字。常用 1.5~2.0。
text_rec_score_threshfloat / None识别阶段的置信度阈值。识别模型会给每个字符一个概率,整张文字行的平均概率低于该值就会被丢弃。一般设为 0.3~0.5,想更严格就调高。

三.标注自己的数据集

ppocrlabel官方教程

conda create -n ppocrlabel python=3.7
conda activate ppocrlabel
pip3 install --upgrade pip
python -m pip install paddlepaddle==2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install PPOCRLabel -i https://pypi.tuna.tsinghua.edu.cn/simple
PPOCRLabel --lang ch

数据集划分

cd ./PPOCRLabel # 将目录切换到PPOCRLabel文件夹下
python gen_ocr_train_val_test.py --trainValTestRatio 8:2:0 --datasetRootPath E:\numberplate

四.训练自己的模型

PaddleOCR算法主要包含三个部分,分别是:

  • DB文本检测(detection)
  • 检测框矫正(classification)
  • CRNN文本识别(recognition)

在训练时,这三个模型单独进行训练,得到三个模型的训练权重,在推理预测时会把三个模型整合在一起,即PaddleOCR推理模型的最终结果是由上述三个模型串联推理而得,推理步骤大致如下:

  • 第一步,进行文本检测,得到文本位置的检测框;
  • 第二步,根据得到的文本检测框对其进行角度分类;
  • 第三步,进行文本识别。

训练自己的文字检测模型

官网教程

  1. 准备数据集
    数据集下载地址:icdar2015数据集,首次下载需注册。
    在这里插入图片描述
    数据集标签下载

    cd PaddleOCR/
    wget -P ./train_data/  https://paddleocr.bj.bcebos.com/dataset/train_icdar2015_label.txt
    wget -P ./train_data/  https://paddleocr.bj.bcebos.com/dataset/test_icdar2015_label.txt
    

    将下载好的图像和标签按以下路径进行存放:

    /PaddleOCR/train_data/icdar2015/text_localization/└─ icdar_c4_train_imgs/         icdar数据集的训练数据└─ icdar_c4_test_imgs/             icdar数据集的测试数据└─ train_icdar2015_label.txt    icdar数据集的训练标注└─ test_icdar2015_label.txt     icdar数据集的测试标注
    
  2. 预训练模型下载
    预训练官网模型下载地址

  3. 训练模型
    模型训练是根据yaml文件进行各个参数的配置的,配置文件在下载的代码目录:D:\code\PaddleOCR-main\configs\det\PP-OCRv5中
    其中主要修改训练数据集目录和与训练模型文件目录
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    开始训练的脚本代码,其中-c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml这个参数指定了你的训练配置文件

    python tools/train.py -c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml
    

    出现以下则说明开始正常训练
    在这里插入图片描述
    配置文件参数说明:

    Global:model_name: PP-OCRv5_server_det # 模型标识符,指定选用那个模型debug: false # 是否开启调试模式(false表示关闭)use_gpu: true # 是否使用GPU训练/推理(true启用GPU)epoch_num: &epoch_num 500 # 总训练轮数(设为500轮)log_smooth_window: 20 # 日志平滑窗口大小(取20个batch的损失平均值)print_batch_step: 10 # 每隔多少batch打印一次日志(每10个batch打印)save_model_dir: ./output/PP-OCRv5_server_det # 模型保存目录save_epoch_step: 10 # 每隔多少轮保存一次模型eval_batch_step: # 每隔多少轮进行一次评估- 0- 1500cal_metric_during_train: false # 训练中是否实时计算指标checkpoints: # 本地预训练模型路径pretrained_model: D:\code\PaddleOCR-main\models\PP-OCRv5_server_det_pretrained.pdparams # 预训练模型下载地址(官方提供的PPHGNetV2_B4权重)save_inference_dir: null # 转换后的推理模型保存目录use_visualdl: false # 是否使用VisualDL可视化工具infer_img: doc/imgs_en/img_10.jpg # 单张测试图片路径save_res_path: ./checkpoints/det_db/predicts_db.txt # 推理结果保存路径distributed: true # 是否使用分布式训练Architecture:model_type: det # 任务类型(det表示检测任务)algorithm: DB # 核心算法(DB即Differentiable Binarization)Transform: null # 输入图像预处理(null表示无需额外变换)Backbone:name: PPHGNetV2_B4 # 主干网络(PPHGNetV2_B4,高性能CNN)det: True # 是否为检测任务定制(true)Neck:name: LKPAN # 特征融合模块(LKPAN,改进的特征金字塔)out_channels: 256 # 输出通道数(256)intracl: true # 是否使用层内连接(true)Head:name: PFHeadLocal # 检测头类型(PFHeadLocal,渐进式特征头)k: 50 # 关键点数量(50)mode: "large" # 规模模式(large表示大模型)Loss:name: DBLoss # 损失类型(DBLoss,专用于DB算法)balance_loss: true # 是否平衡正负样本损失(true启用)main_loss_type: DiceLoss # 主损失函数(DiceLoss,处理类别不平衡)alpha: 5 # 二值图损失权重(5)beta: 10 # 阈值图损失权重(10)ohem_ratio: 3 # 难例挖掘比例(3:1的负/正样本比例)Optimizer:name: Adam # 优化器类型(Adam)beta1: 0.9 # Adam动量参数(0.9/0.999)beta2: 0.999 # Adam动量参数(0.9/0.999)lr:name: Cosine # 学习率调度策略(Cosine余弦退火)learning_rate: 0.001 #(8*8c) # 初始学习率(0.001)warmup_epoch: 2 # 学习率预热轮数(2轮)regularizer:name: L2 # 正则化方法(L2权重衰减)factor: 1e-6 # 正则化系数(1e-6)PostProcess:name: DBPostProcess # 后处理方法(DBPostProcess)thresh: 0.3 # 二值化阈值(0.3)box_thresh: 0.6 # 框得分阈值(高于0.6才保留)max_candidates: 1000 # 最大候选框数量(1000)unclip_ratio: 1.5 # 框扩展比例(1.5倍)Metric:name: DetMetric # 指标计算器(DetMetric)main_indicator: hmean # 核心评估指标(hmean即F1-score)Train:dataset:name: SimpleDataSet # 数据集类型(SimpleDataSet)data_dir: D:\code\PaddleOCR-main\train_data\icdar2015\text_localization\ # 训练数据目录(ICDAR2015路径)label_file_list: # 训练标签文件路径- D:\code\PaddleOCR-main\train_data\icdar2015\text_localization\train_icdar2015_label.txtratio_list: [1.0] # 数据采样比例([1.0]表示全采样)transforms: # 数据增强流水线- DecodeImage: # 图像解码(BGR格式img_mode: BGRchannel_first: false- DetLabelEncode: null # 标签解析- CopyPaste: null # 复制粘贴增强- IaaAugment: # 多策略增强(翻转/旋转/缩放)augmenter_args:- type: Fliplrargs:p: 0.5- type: Affineargs:rotate:- -10- 10- type: Resizeargs:size:- 0.5- 3- EastRandomCropData: # 随机裁剪(640x640)size:- 640- 640max_tries: 50keep_ratio: true- MakeBorderMap: # 生成阈值图(配合DB算法)shrink_ratio: 0.4thresh_min: 0.3thresh_max: 0.7total_epoch: *epoch_num- MakeShrinkMap: # 生成二值图(文本区域收缩)shrink_ratio: 0.4min_text_size: 8total_epoch: *epoch_num- NormalizeImage: # 标准化(ImageNet均值/方差)scale: 1./255.mean:- 0.485- 0.456- 0.406std:- 0.229- 0.224- 0.225order: hwc- ToCHWImage: null # 转换张量维度(HWC → CHW)- KeepKeys: # 指定需保留的数据键keep_keys:- image- threshold_map- threshold_mask- shrink_map- shrink_maskloader:shuffle: true # 数据打乱(true)drop_last: false # 是否丢弃末尾不完整batch(false)batch_size_per_card: 8 # 单GPU batch大小(8)num_workers: 8 # 数据加载线程数(8)Eval:dataset:name: SimpleDataSetdata_dir: D:\code\PaddleOCR-main\train_data\icdar2015\text_localization\label_file_list:- D:\code\PaddleOCR-main\train_data\icdar2015\text_localization\test_icdar2015_label.txttransforms:- DecodeImage:img_mode: BGRchannel_first: false- DetLabelEncode: null- DetResizeForTest:- NormalizeImage:scale: 1./255.mean:- 0.485- 0.456- 0.406std:- 0.229- 0.224- 0.225order: hwc- ToCHWImage: null- KeepKeys:keep_keys:- image- shape- polys- ignore_tagsloader:shuffle: falsedrop_last: falsebatch_size_per_card: 1num_workers: 2
    profiler_options: null # 性能分析工具选项(null表示不启用)
    
  4. 导出模型

    python tools/export_model.py -c configs/det/PP-OCRv5/PP-OCRv5_server_det.yml
    
http://www.dtcms.com/a/291330.html

相关文章:

  • 20250721-day19
  • 【PTA数据结构 | C语言版】双连通分量
  • C# 实现:动态规划解决 0/1 背包问题
  • nextjs编程式跳转
  • 《小白学习产品经理》第七章:方法论之波特五力模型
  • springcloud -- 微服务02
  • Iridium Certus 9704 卫星物联网开发套件
  • cuda编程笔记(9)--使用 Shared Memory 实现 tiled GEMM
  • 补环境基础(二) this的作用和绑定规则
  • 关于Ajax的学习笔记
  • synchronized 修饰符的使用
  • (7)ROS2-MUJOCO联合仿真环境迁移优化
  • MVCC 多版本并发控制 详解
  • C语言(20250721)
  • 【PTA数据结构 | C语言版】验证六度空间理论
  • day20-sed-find
  • 【学习路线】C#企业级开发之路:从基础语法到云原生应用
  • 感知机-梯度下降法
  • 代码随想录day41dp8
  • 教资科三【信息技术】— 学科知识: 第三章(多媒体技术)
  • Java I/O模型深度解析:BIO、NIO与AIO的演进之路
  • CDN和DNS 在分布式系统中的作用
  • JAVA+AI教程-第三天
  • 数据库mysql是一个软件吗?
  • 主流 MQ 的关键性能指标
  • 瑶池数据库Data+AI驱动的全栈智能实践开放日回顾
  • 5.Java的4个权限修饰符
  • 如何用 LUKS 和 cryptsetup 为 Linux 配置加密
  • 3.4 递归函数
  • GUI简介