文章目录
前言
前段时间搞了一个PaddleOCR相关的项目, 一路跌跌撞撞,碰了不少壁,往往很多个教程才能拼凑出正确的步骤。所以决定自己写一份详细教程,也是怕自己忘了,以后使用PaddleOCR的时候也可以再翻出来看看。
PaddleOCR介绍
PaddleOCR是一个基于飞桨开发的OCR(Optical Character Recognition,光学字符识别)系统。其技术体系包括文字检测、文字识别、文本方向检测和图像处理等模块。以下是其优点:
高精度:PaddleOCR采用深度学习算法进行训练,可以在不同场景下实现高精度的文字检测和文字识别。
多语种支持:PaddleOCR支持多种语言的文字识别,包括中文、英文、日语、韩语等。同时,它还支持多种不同文字类型的识别,如手写字、印刷体、表格等。
高效性:PaddleOCR的训练和推理过程都采用了高效的并行计算方法,可大幅提高处理速度。同时,其轻量化设计也使得PaddleOCR能够在移动设备上进行部署,适用于各种场景的应用。
易用性:PaddleOCR提供了丰富的API接口和文档说明,用户可以快速进行模型集成和部署,实现自定义的OCR功能。同时,其开源代码也为用户提供了更好的灵活性和可扩展性。
鲁棒性:PaddleOCR采用了多种数据增强技术和模型融合策略,能够有效地应对图像噪声、光照变化等干扰因素,并提高模型的鲁棒性和稳定性。
总之,PaddleOCR具有高精度、高效性、易用性和鲁棒性等优点,为用户提供了一个强大的OCR解决方案。
下面将以行驶证为例,详细介绍PaddleOCR如何使用
一、PaddleOCR环境搭建
1.Anaconda安装
打开Anaconda官网,或者去清华镜像站下载。后者下载速度快,对应自己的电脑版本即可。
Free Download | AnacondaAnaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.https://www.anaconda.com/products/distribution#macos https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
翻到最下面对应自己电脑选择64位或者34位
下载好安装包后进行安装,记得勾选第一个,用来自动加入环境变量,别的没有什么需要注意的地方,一直点next即可。
2.cuda和cudnn安装
(1)判断下载什么版本
打开终端输入nvidia-smi,看CUDA Version的版本,只要下载这个版本或者这个以下的就可以。
(2)下载CUDA Toolkit
以11.2版本为例,打开链接
CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive
下载好后打开安装包选择自定义安装
默认安装即可。
(3)下载cuDNN
进入以下网址,需要进行注册。Log in | NVIDIA Developerhttps://developer.nvidia.com/login
将cudnn解压,为一个文件夹,将以下文件分别复制到cuda的根目录下。
cuda根目录如下
在系统高级设置中添加如下环境变量。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\libnvvp
(3) 验证是否安装成功
win+R cmd进入安装目录下,再进入到 extras\demo_suite下,执行.\bandwidthTest.exe和.\deviceQuery.exe,得到下图。
两个PASS说明安装成功。
3.创建虚拟环境
在开始菜单搜索Anaconda,点击以下应用进入anaconda终端。
输入以下代码用来创建虚拟环境,paddle2为虚拟环境命名,可以自己取名字,后面是要安装的python版本。
conda create -n paddle2 python=3.8
输入以下代码即可激活创建的虚拟环境activate + 自己创建的虚拟环境命名
输入以下指令安装paddlepaddle GPU版本
python -m pip install paddlepaddle-gpu==2.5.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
4.pycharm中配置环境
在pycharm中配置环境而不是在虚拟环境中继续安装,因为具体的一些库在以下这个文件中的requirements.txt文件中。
打开anaconda终端,进入PaddleOCR-release-2.6目录下激活环境并输入以下指令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
5.验证环境
进入以下网址下载官方模型
PaddleOCR/doc/doc_ch/models_list.md at release/2.6 · PaddlePaddle/PaddleOCR · GitHubhttps://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/models_list.md 需要下载两个模型用来进行验证,分别为文本检测模型和文本识别模型,选择下载推理模型。
模型下载之后为两个压缩包,在PaddleOCR-realase-2.6根目录下新建文件夹
将压缩包解压到该文件夹下,如下图所示。
打开anaconda终端激活环境进入到PaddleOCR-releas-2.6目录下运行以下指令,其中image_dir为所要识别的图片路径,det_model_dir为刚才下载的文字检测模型,rec_model_dir为刚才下载的文字识别模型。
python tools/infer/predict_system.py --image_dir="C:\Users\User\Desktop\test.jpg" --det_model_dir="./inference_model/ch_PP-OCRv3_det_infer/" --rec_model_dir="./inference_model/ch_PP-OCRv3_rec_infer"
输入指令后,原图和识别结果如图所示。
说明环境搭建成功,接下来就到如何训练自己的模型。
二、制作数据集
在终端进入paddleOCR-release-2.6根目录下,再输入cd PPOCRLabel 进入目录,输入以下代码打开打标软件。
python PPOCRLabel.py --lang ch
可能会报错,如下图所示。
此错误只需要再PPOCRLabel文件目录下的PPOCRLabel.py文件最上面加入以下代码即可解决此问题。
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
打开后点击文件,点击打开目录选择需要打标签的数据集文件夹,我这以行驶证为例。如下图所示。
选择自动标注点击ok等待自动标注完成
然后从第一张开始检查,漏打标的按下Q框出字体,打标文字错误的,点击方框,在右边修改,并对每一个方框给出关键词列表(点击编辑点击更改box关键词信息)。最后删除无用信息,切换下一张快捷键为D,如下图所示。
全部打标完成之后,点击文件选择导出标记结果,再点击文件选择导出识别结果,完成后再文件夹多出四个文件fileState,Label,rec_gt, crop_img。其中crop_img中的图片用来训练文字识别模型,fileState记录图片的打标完成与否,Label为训练文字检测模型的标签,rec_gt为训练文字识别模型的标签。
打标签告一段落。下面进行数据集的制作。在PaddleOCR根目录下建立train_data文件夹,并且将打标签生成的文件和图片放在该文件夹下。
打开终端进入PPOCRLabel的文件夹下,输入以下代码进行数据集的划分
python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath ../train_data/drivingData
输入指令之后,在train_data文件夹下会出现以下文件,其中det是用来训练文字检测的数据集,rec是用来训练文字识别的数据集。此时可以删去drivingData。
此时文字检测和文字识别的数据集就都制作好了。
三、训练文字检测模型
下面进入文字检测模型的训练
1. 下载模型训练文件
在下面网站下载官方训练模型,注意不是推理模型。
识别训练模型如下:
下载之后在PaddleOCR-release-2.6根目录下建立pretrain_models文件夹,并将训练模型解压至该文件夹下。如下图所示:
2. 配置模型文件
下面配置模型文件。
打开模型配置文件,如下图所示,我一般用ch_det_res18_db_v2.0.yml这个配置文件。
下面详细解释此配置文件
我们需要手动更改的地方主要有以下几个地方。
3.开始训练
打开anaconda终端,激活环境进入到PaddleOCR-releas-2.6根目录下。输入以下指令开始模型训练。
python tools/train.py -c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml
会发现报错了,因为yaml这个库没有装。在终端输入以下指令即可解决。
pip install pyyaml
再次输入指令之后开始训练。
会出现一个警告,这个警告应该是paddle版本的问题。应该不影响结果。
Warning:: 0D Tensor cannot be used as 'Tensor.numpy()[0]' . In order to avoid this problem, 0D Tensor will be changed to 1D numpy currently, but it's not correct and will be removed in release 2.6. For Tensor contain only one element, Please modify 'Tensor.numpy()[0]' to 'float(Tensor)' as soon as possible, otherwise 'Tensor.numpy()[0]' will raise error in release 2.6.
4. 测试训练模型
模型训练完之后会在文件夹下保存训练好的模型,具体保存的文件夹看配置文件,这就是模型保存的路径。
save_model_dir: ./output/ch_db_res18/
打开文件夹,文件组成大概如下图所示。
我们使用best_accuracy.pdparams进行我们的模型测试。
在anaconda终端中输入以下指令进行测试。 其中Global.pretrained_model是我们训练好并且需要测试的模型,Global.infer_img为所要检测的图片路径。
python tools/infer_det.py -c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml -o Global.pretrained_model=output/ch_db_driving/best_accuracy.pdparams Global.infer_img="C:\Users\User\Desktop\PaddleOCR-release-2.6\train_data\det\test\0201_1 (3).jpg"
指令运行后终端输入如下:
测试图片结果如下,跟我们训练的时候所要识别的内容一致,其中档案编号没有,所以没有蓝色方框。
文字检测模型的训练和测试就告一段落,下面进行文字识别模型的训练和测试。
四、训练文字识别模型
1. 配置模型文件
在第三节已经下载了文字识别的模型所以不再多叙述。文字识别我一般使用的配置文件为ch_PP-OCRv3_rec.yml
修改的地方和文字检测修改的差不多。
2.模型训练
打开anaconda终端,激活环境进入到PaddleOCR-releas-2.6根目录下。输入以下指令开始模型训练。
python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml
训练完之后模型保存路径和文件组成和文字检测差不多,不再多叙述。
3.模型测试
在anaconda终端中输入以下指令进行测试。 其中Global.pretrained_model是我们训练好并且需要测试的模型,Global.infer_img为所要检测的图片路径。
python tools/infer_rec.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=output/rec/best_accuracy.pdparams Global.infer_img=“C:\Users\User\Desktop\PaddleOCR-release-2.6\train_data\rec\test\0001_1 (110)_crop_3.jpg”
指令运行后终端输入如下:
文字识别模型的训练和测试就告一段落。
五、转换成推理模型
在anaconda终端中输入以下指令进行测试。 其中Global.pretrained_model是我们训练好并且需要推理的模型,Global.save_inference_dir为所要保存推理模型的位置。推理模型是可以直接被调用进行识别和检测。分别把训练好的文字检测模型和文字识别模型推理。
python tools/export_model.py -c "./configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml" -o Global.pretrained_model="./output/rec_mobile_pp-OCRv2/latest.pdparams" Global.save_inference_dir="./inference_model/rec/"
python tools/export_model.py -c "./configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml" -o Global.pretrained_model="./output/ch_db_driving/latest.pdparams" Global.save_inference_dir="./inference_model/det/"
输入以下指令后推理模型将会出现在PaddleOCR-release-2.6根目录下文件夹inference_model,他的文件结构如下图所示。
其中det和rec即是我们的推理模型,可以用predict_system.py进行验证。打开anaconda终端输入以下指令
python tools/infer/predict_system.py --image_dir=":\Users\User\PycharmProjects\PaddleOCR-release-2.6\train_data\drivingData\30.jpg" --det_model_dir="./inference_model/det/" --rec_model_dir="./inference_model/rec"
输入指令后结果如下
还会将识别图片保存到inference_results文件夹下。如图所示
六、推理模型应用
把模型训练出来之后还要对其进行应用,怎么去利用模型来实现我们需要的效果也是非常关键的一部分。
我所要实现的效果是将行驶证的7个信息识别出来,还要进行归类,将各自的信息对应各自的类别。
通过以下代码可以将咋们训练的模型在程序中调用,frame为所要识别的图片路径,result为识别结果,texts是将结果中的纯文字部分提取出来进行下一步处理。
from paddleocr import PaddleOCR, draw_ocr
ocr = PaddleOCR(use_angle_cls=True, rec_model_dir='./inference_model/rec',
det_model_dir='./inference_model/det')
result = ocr.ocr(frame, cls=True)
result = result[0]
texts = [line[1][0] for line in result]
具体的文字处理部分代码就不公开了,写的有点垃圾,具体就是根据每部分信息的特征信息将其匹配。毕竟这篇文章主要是介绍PaddleOCR的应用,行驶证的识别只是举个例子,所以不太详细介绍了,如果想了解,可以私信我。最后贴出识别的结果图。
总结
希望可以对刚接触PaddleOCR的新手给予一点帮助,厉害的大佬也可以对文章中错误的地方批评指正。