PaddleOCR对于手写符号识别,从零开始搭建(包括期间遇到的所有问题)

需求:需要对手写图片进行识别 勾,叉,圈,识别成对于的 v,x,o 其他的符号识别成 e

搭建环境: win10 gpu模式(用cpu搭建过一版,但是cpu训练太慢,搭建cpu期间的问题比gpu问题的少)

使用gpu的需要有一块N卡(英伟达)。我使用的是2060s,显卡算力需要超过3.5。( 第一次训练使 用i5—1135G7 cpu模式 需要两天多时间,第二次训练使用2060s 需要两个小时)

python环境:3.7

cuda:11.6

cudnn:8.8.0.121

pycharm:2020.1.5

pip也要更新到最新版本

安装PaddleOCR前,需要把环境先搭建好

官方代码库(gitee)PaddleOCR: 基于飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。同时支持多种文本检测、文本识别的训练算法。

过程:本次识别模型建立,使用识别素材850张图片,验证素材446张图片,通过PaddleOCR算法成功建立了一个手写符号识别模型。

PaddlePaddle安装

安装PaddleORC前,需要先安装好PaddlePaddle

安装地址:开始使用_飞桨-源于产业实践的开源深度学习平台

我东西下载完后,期间验证的时候报错了,错误没有截图

主要问题是 显卡驱动——》cuda驱动——》cudnn驱动,三个的版本关系没有对应好。

首先要确定显卡的驱动,然后根据显卡驱动来选择cuda的驱动,然后根据cuda驱动选择cudnn驱动。

PaddleOCR安装

PaddlePaddle安装好后,可以安装PaddleOCR了

地址doc/doc_ch/quickstart.md · PaddlePaddle/PaddleOCR - Gitee.com

(如果是win搭建的话,图中的python3命令都可以换成python)

其中 win运行这个命令,下载一堆东西后,会报错的,原因有些包下载不下来。官方提供的额外安装包也不够用

主要是“lanms_neo-1.0.2”这个包下载不下来

可以手动下载,解压,地址:

https://download.youkuaiyun.com/download/kobe24livemvp/87369709?utm_medium=distribute.pc_relevant_download.none-task-download-2~default~OPENSEARCH~Rate-2-87369709-download-87429869.pc_dl_relevant_base1&depth_1-utm_source=distribute.pc_relevant_download.none-task-download-2~default~OPENSEARCH~Rate-2-87369709-download-87429869.pc_dl_relevant_base1&dest=https%3A%2F%2Fdownload.youkuaiyun.com%2Fdownload%2Fkobe24livemvp%2F87369709&spm=1003.2020.3001.6616.2

下载下来是whI结尾的文件,可以把后缀名改成zip压缩包的形式,进行解压。解压地址:python安装包里的/lib/sit-packages里面

其他的包应该就可以手动pip进行下载了,如果还是不行。可能需要下载C++的环境,参考:

解决PaddleOCR安装lanms-neo时报错,Could not build wheels for lanms-neo ..._樱阙诗汀的博客-优快云博客

然后就可以下载官方的图片包了,切换路径后,识别图片

我当时这里出现了问题,原因是没有装cudnn和cuda驱动里少了zlibwapi。zlibwapi需要手动进行下载然后放入cuda里面

到此图片就可以正常识别了。

模型训练

地址

doc/doc_ch/recognition.md · PaddlePaddle/PaddleOCR - Gitee.com

首先建立素材库,文档中给出来的素材库结构不正确,和代码中的不对应。

这个需要注意

我是训练新的内容,所以我这边要新建立一个字典。

我是将原先的字典复制一个,然后在这个字典上修改

然后还修改了这个文件的地址路径,后续用的上(应该,忘了为啥改这里了):

启动训练:

训练模型自己下载下来放在pretrain_models包里然后解压就行了,地址:https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_train.tar

我这边是进行单卡训练的:

python tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy

但是单卡训练应该要改参数,文档中没有说,改之前,我一直训练不成功

batch_size_per_card: 128
num_workers: 4

改成了:

batch_size_per_card: 64
num_workers: 1

然后就跑起来了,跑了两个小时,模型生成了出来

生成的模板在/output/v3_en_mobile里面,best_accuracy表示最好的模型

然后用这个命令,导出模型: python tools/export_model.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml -o Global.pretrained_model=./output/v3_en_mobile/best_accuracy Global.save_inference_dir=./inference/en_PP-OCRv3_rec/

导出的模型在/inference/en_PP-OCRv3_rec里面

然后新建测试图片集合:

用命令进行测试: python tools/infer/predict_rec.py --image_dir="./ppocr_img/imgs_en/1.jpg" --rec_model_dir="./inference/en_PP-OCRv3_rec" --rec_image_shape="3, 48, 320" --rec_char_dict_path="ppocr/utils/en_dict.txt"

我这边放了50张图片进行测试,前30张为较正常的勾,叉,圈。全部识别出来。后20张为离谱的勾,叉,圈,识别出来17张,错了3张。

图片名称

真实符号

检测符号

确认率

识别图片

1

v

v

0.99

2

v

v

0.99

3

v

v

0.99

4

v

v

0.81

5

v

v

0.99

6

v

v

0.99

7

v

v

0.99

8

v

v

0.99

9

v

v

0.98

10

v

v

0.99

11

x

x

0.99

12

x

x

0.99

13

x

x

0.69

14

x

x

0.99

15

x

x

0.99

16

x

x

0.98

17

x

x

0.99

18

x

x

0.99

19

x

x

0.99

20

x

x

0.99

21

o

o

0.99

22

o

o

0.99

23

o

o

0.99

24

o

o

0.99

25

o

o

0.99

26

o

o

0.99

27

o

o

0.99

28

o

o

0.99

29

o

o

0.99

30

o

o

0.99

31

e

e

0.94

32

e

e

0.80

33

x

x

0.99

34

x

e

0.99

35

e

e

0.99

36

v

v

0.99

37

e

e

0.99

38

e

e

0.87

39

e

o

0.42

40

o

o

0.99

41

o

o

0.99

42

v

v

0.59

43

e

e

0.99

44

e

e

0.99

45

e

e

0.99

46

o

o

0.99

47

e

e

0.96

48

v

v

0.97

49

x

x

0.99

50

e

o

0.98

注:标色的为识别错误符号。

### 使用PaddleOCR实现数学公式或LaTeX公式的识别 为了使用PaddleOCR进行数学公式或LaTeX公式的识别,除了基本的文字识别外,还需要额外的技术来处理公式特有的结构和符号。以下是具体方法: #### 准备工作 确保安装并配置好PaddleOCR环境,包括必要的工具和权重文件[^3]。 ```bash pip install paddleocr ``` #### 基本设置 初始化PaddleOCR实例时可以选择特定的语言包或其他参数调整,但对于公式识别来说,默认设置可能不足以满足需求[^1]。 ```python from paddleocr import PaddleOCR # 初始化PaddleOCR对象 ocr = PaddleOCR(use_angle_cls=False, lang="en") # 可尝试不同语言选项 ``` #### 图像预处理 对于含有复杂公式的图像,在输入到PaddleOCR之前应先做适当预处理,比如裁剪、去噪等操作以提升识别精度[^2]。 #### 执行OCR识别 调用`ocr.ocr()`函数执行图片中的文字及简单符号的初步识别。 ```python result = ocr.ocr('formula_image.png', cls=True) for line in result: print(line[1][0]) ``` 然而,仅依靠上述方式无法很好地解析复杂的数学表达式或LaTeX语法。因此建议采用专门针对公式的识别库如MathPix Snip或者Tesseract配合LaTeX OCR插件来进行更精确的结果获取。 #### 结合其他技术 考虑到单独依赖PaddleOCR难以达到理想的公式识别效果,推荐将其与其他专用于数学表达式的识别引擎相结合。例如,可以利用深度学习模型对分割后的公式片段进一步分类判断;也可以借助开源项目如Im2Latex将手写/印刷体公式转化为标准LaTeX代码。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值