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

news2024/12/30 1:48:29

【项目】基于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 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)
# 使用方向分类器
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: 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 开启训练
# 单机单卡训练 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)其它任务

  • 版面分析
  • 表格结构用解析
  • 关键信息提取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2255291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mock.js介绍

mock.js http://mockjs.com/ 1、mock的介绍 *** 生成随机数据,拦截 Ajax 请求。** 通过随机数据,模拟各种场景;不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据;支持生成随机的文本、数字…

重磅升级:OpenAI o1模型上手实测,从芯片架构分析到象棋残局判断的全能表现

引言 昨日,在圣诞节系列发布会的第一天,OpenAI终于给我们带来了令人振奋的更新,这些更新有望塑造AI互动的未来。备受期待的OpenAI o1正式版的推出,标志着ChatGPT体验的重大进化,宣告了AI驱动应用新时代的开始。o1现已可…

DataSophon集成CMAK KafkaManager

本次集成基于DDP1.2.1 集成CMAK-3.0.0.6 设计的json和tar包我放网盘了. 通过网盘分享的文件:DDP集成CMAK 链接: https://pan.baidu.com/s/1BR70Ajj9FxvjBlsOX4Ivhw?pwdcpmc 提取码: cpmc CMAK github上提供了zip压缩包.将压缩包解压之后 在根目录下加入启动脚本…

【vivado】时序报告--best时序和worst时序

利用vivado进行开发时,生成best时序报告和worst时序报告。 best时序报告 slow选择min_max,fast选择none。 worst时序报告 fast选择min_max,slow选择none。

EasyMedia播放rtsprtmp视频流(flvhls)

学习链接 MisterZhang/EasyMedia - gitee地址 EasyMedia转码rtsp视频流flv格式,hls格式,H5页面播放flv流视频 EasyMedia播放rtsp视频流(vue2、vue3皆可用) EasyMedia转码rtsp视频流flv格式,hls格式,H5页…

Linux C/C++编程中的多线程编程基本概念

【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com…

FPGA工作原理、架构及底层资源

FPGA工作原理、架构及底层资源 文章目录 FPGA工作原理、架构及底层资源前言一、FPGA工作原理二、FPGA架构及底层资源 1.FPGA架构2.FPGA底层资源 2.1可编程输入/输出单元简称(IOB)2.2可配置逻辑块2.3丰富的布线资源2.4数字时钟管理模块(DCM)2.5嵌入式块 …

C语言程序设计P5-3【应用函数进行程序设计 | 第三节】——知识要点:函数的嵌套调用和递归调用

知识要点:函数的嵌套调用和递归调用 视频 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 本任务要求用递归法求 n!。 我们知道n!n(n-1)(n-2)……1n(n-1)!递归公式为: 1.上面公式分解为n!n(n-1)!,即将求n!的问题变为…

word实践:正文/标题/表图等的共用模板样式设置

说在前面 最近使用word新建文件很多,发现要给大毛病,每次新建一个word文件,标题/正文的字体、大小和间距都要重新设置一遍,而且每次设置这些样式都忘记了参数,今天记录一下,以便后续方便查看使用。现在就以…

【工具变量】上市公司企业劳动密集度数据(2008-2023年)

一、测算方式: 参考《数量经济技术经济研究》陈勇兵(2023)老师的做法,使用员工数量与销售收入的比值作为劳动密集度的度量标准* o/ b% C( e* U我们做的比他完善,分为四类大家可以做核心变量或者稳健性检验Labor1&…

YOLOv11修改推理图片的标签字体大小

先打开ultralytics/utils/plotting.py,并搜索font scale(vscode快捷键ctrlF): 在这行代码动手脚,例如调小分母就是把字改大: self.sf self.lw 完成,可以正常运行:

TCP Analysis Flags 之 TCP Spurious Retransmission

前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…

在paddle中安装python-bidi出错

翻看网上解决方式,是由于系统中缺少 Rust 及其包管理器 Cargo。python-bidi 依赖 Rust 来编译其扩展,如果没有安装 Rust 和 Cargo,安装过程将无法继续。 解决方式 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh但是我的终端…

自动化测试工具Ranorex Studio(五十四)-CSV文件

CSV文件 你也可以通过选择CSV文件数据连接器来使用CSV文件为你的测试套件提供数据。在添加了CSV数据连接器后,管理数据源的对话框将被打开。 你可以在表色标示部分编辑数据连接器的名字,也可以在绿色标示的部分选择你要用的CSV文件。选择或者取消蓝色标示…

Flume基础概念

目录 作用组件构成ClientFlowAgentSourceSinkEvent 和Log4j的区别与定位事务传出流程输入到sourcesource端输入Channel 接收输入到SinkSink输出 作用 Flume可以从各种来源(如日志文件、消息队列、网络数据、文件系统、数据库等)收集数据,并将…

FPGA实战篇(IP核之MMCM/PLL实验)

1.MMCM/PLL IP 核简介 锁相环作为一种反馈控制电路,其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位。因为锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。 锁相环在工作的过程中,当…

Numpy基础练习

import numpy as np 1.创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1 n np.zeros(10,dtypenp.int32) n[4] 12.创建一个元素从10到49的ndarray对象 n np.arrange(10,50)3.将第2题的所有元素位置反转 n[::-1]使用np.random.random创建一个10*10的ndarray对象…

Probabilistic Face Embeddings 论文阅读

Probabilistic Face Embeddings 论文阅读 Abstract1. Introduction2. Related Work3. Limitations of Deterministic Embeddings4. Probabilistic Face Embeddings4.1. Matching with PFEs4.2. Fusion with PFEs4.3. Learning 5. Experiments5.1. Experiments on Different Bas…

基于SSM框架企业人事管理系统的设计与实现

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…

云数据库 MongoDB

MongoDB 是一个基于文档的 NoSQL 数据库,它与传统的关系型数据库不同,采用的是灵活的文档结构(类似 JSON 格式)。MongoDB 是开源的,且高度可扩展,通常用于处理大量的非结构化或半结构化数据。 云数据库 Mon…