目录
1.Anaconda安装 打开Anaconda官网去下载然后安装,这个在网上很多教程根据他们安装就行 2.cuda,cudnn安装
上述训练流程是英文的,中英文都可用步骤不变 唯一不同的就是用的模型和.yml配置文件不同
如果你训练结束后acc为0 或者 没有任何参数 但是有流程的话 那就是你配置出了问题可以看我另一篇博客
PaddleOCR是一个基于飞桨开发的OCR(Optical Character Recognition,光学字符识别)系统。其技术体系包括文字检测、文字识别、文本方向检测和图像处理等模块。以下是其优点:
高精度:PaddleOCR采用深度学习算法进行训练,可以在不同场景下实现高精度的文字检测和文字识别。
多语种支持:PaddleOCR支持多种语言的文字识别,包括中文、英文、日语、韩语等。同时,它还支持多种不同文字类型的识别,如手写字、印刷体、表格等。
高效性:PaddleOCR的训练和推理过程都采用了高效的并行计算方法,可大幅提高处理速度。同时,其轻量化设计也使得PaddleOCR能够在移动设备上进行部署,适用于各种场景的应用。
易用性:PaddleOCR提供了丰富的API接口和文档说明,用户可以快速进行模型集成和部署,实现自定义的OCR功能。同时,其开源代码也为用户提供了更好的灵活性和可扩展性。
鲁棒性:PaddleOCR采用了多种数据增强技术和模型融合策略,能够有效地应对图像噪声、光照变化等干扰因素,并提高模型的鲁棒性和稳定性。
总之,PaddleOCR具有高精度、高效性、易用性和鲁棒性等优点,为用户提供了一个强大的OCR解决方案。
一、环境安装
1.Anaconda安装
打开Anaconda官网去下载然后安装,这个在网上很多教程根据他们安装就行
2.cuda,cudnn安装
去这里找入口安装对应的cuda和cudnn版本 cuda各个版本的Pytorch下载网页版,模型转化工具,免费gpt链接_cuda国内镜像下载网站-优快云博客
和yolov5配置跑通基本流程一样
ppocr环境
pip install requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
二、下载训练源码:
如果打不开可以直接下载我的
PaddleOCR-main(可训练可标注一体,内置推理脚本)(这个版本可正常训练,亲测可用)资源-优快云文库
预训练模型
如果打开了就下载
最好下载这个 其他版本可能报错
这个版本的没有标注的程序所以你还需要下载一个r2.6的把里面的PPOCRlabel复制到你下载的main版本的OCR。
验证环境是否跑通
进入往下翻
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.mdGitHub - PaddlePaddle/PaddleOCR: Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
https://github.com/PaddlePaddle/PaddleOCR/tree/main
下载压缩然后放到下方文件夹中
打开py终端输入指令
python tools/infer/predict_system.py --image_dir="C:\Users\User\Desktop\test.jpg" --det_model_dir="./inference_model/en_PP-OCRv3_det_infer/" --rec_model_dir="./inference_model/en_PP-OCRv3_rec_infer"
效果大概就是这个样子
环境没问题的话就可以开始制作自己的数据集训练了
三、数据集制作
如果你的环境没问题,那么进入PPOCRLabel中直接右键运行,
网上又说用这个 python PPOCRLabel.py --lang ch指令的,我用不了这个,报错,所以这个指令用不了的可以直接右键run PPOCRLabel.py 文件即可
如果报错
就在 PPOCRLabel.py 文件头上加入
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
然后右键运行 PPOCRLabel.py
打开后是这样的
导入图片,再点击自动保存
旁边改成你需要标注的字符 注意如果你是自动标注里面有中文那你需要设置一下否则就是如下结果。
点上面paddleocr 然后再点 Choose OCR model 或者直接快捷键 ctrl+M
然后就没问题了
注意自动标注后 需要检测一下 防止有问题 最后一定要保存
这里是绿色勾勾 就是你保存成功了
标注后你的数据集文件夹中会生成这些文件
全部打标完成之后,点击文件选择导出标记结果,再点击文件选择导出识别结果,完成后再文件夹多出四个文件fileState,Label,rec_gt, crop_img。
其中crop_img中的图片用来训练文字识别模型,
fileState记录图片的打标完成与否,
Label为训练文字检测模型的标签,
rec_gt为训练文字识别模型的标签。
注意如果你文件夹中没有上述的文件,如下这样
依次点击Export Label
Export Recognition
Result Export Table Label
然后就有了
如果是文字文本识别标注那你可以直接点击左下角那里进行自动标注
然后数据集划分
python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath ../train_data/drivingData
如果无法划分 那就直接去代码里划分
修改这几处就行
在终端运行上述指令 文件路劲在PPOCRLabel文件中
运行后数据集就会被划分
生成的det 和rec文件打开后为如下
旧的数据集中加入新数据集
训练paddleocr数据集在原有的数据集中加入新标注的数据一起训练(建议收藏)-优快云博客
四、开始训练字符模型
下载训练模型
当然也可以不需要,训练模型那里添 null 就行,这样的话你训练出来的模型只针对于你训练的数据集字体,所以需要大量的数据集,来训练。
如果你打不开如上链接,那就这里下载里面有两种训练模型和推理模型
【免费】PP-OCR-V3-V4模型包含训练模型以及推理模型资源-优快云文库
最好三个都下载下来,也可以只下载检测和识别两个
下载好解压,放入
配置训练文件
打开后你需要手动修改数据集路径
这里有一个是多少代保存一次,你可以设置为一代保存一次 改为1即可
py终端运行如下指令就可以开始运行了
python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml
运行完毕了模型会保存在这里
如果你训练中断,继续训练方法 原训练指令后面加入
-o Global.checkpoints=./output/rec_ppocr_v3_distillation/latest
完整的指令
python tools/train.py -c configs/ch_rec_to_det/ch_PP_OCR_V3_rec.yml -o Global.checkpoints=./output/rec_ppocr_v3_distillation/latest
五、测试
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/iter_epoch_400.pdparams Global.infer_img="C:\Users\User\Desktop\PaddleOCR-release-2.6\train_data\det\test\0201_1 (3).jpg"
六、训练rec识别模型()
和上面的检测det模型的训练方式一样
这里更改多少代 保存一次
七、运行
python tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec.yml
八、然后测试
和上面的方法一样,只是把模型换成rec模型
python tools/infer_det.py -c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml -o Global.pretrained_model=output/en_db_driving/iter_epoch_400.pdparams Global.infer_img="C:\Users\User\Desktop\PaddleOCR-release-2.6\train_data\det\test\0201_1 (3).jpg"
你可以用如下代码进行批量推理和模型测试
中间那个是分类模型 你可以在官网上直接下载
将训练的rec和det模型,转为 推理模型 inf 模型
det模型
python tools/export_model.py -c "./configs/endet_enrec_encls/en_PP_OCRV3_det_cml.yml" -o Global.pretrained_model="./output/det/ch_PP-OCR_v3_det3/latest.pdparams" Global.save_inference_dir="./models/inf_det/"
rec模型
python tools/export_model.py -c "./configs/endet_enrec_encls/en_PP_OCRv3_rec.yml" -o Global.pretrained_model="./output/rec/v3_en_mobile_rec4/latest.pdparams" Global.save_inference_dir="./models/inf_rec/"
转完后如下 det中可能是三个文件夹,可以将teacher中的三个模型文件拉出来,或者直接在下方代码中写路径
然后用如下代码进行推理,cls的分类模型可以直接用官方的
from paddleocr import PaddleOCR
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
from paddleocr import PaddleOCR, draw_ocr
import os
import skimage
font = cv2.FONT_HERSHEY_SIMPLEX
# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="en", use_gpu=False,
rec_model_dir='./models/en_PP-OCRv3_rec_infer/',
cls_model_dir='./models/ch_ppocr_mobile_v2.0_cls_infer/',
det_model_dir='./models/en_PP-OCRv3_det_infer/') # need to run only once to download and load model into memory
def OCRsspt_en(img_path,out_path):
for filename in os.listdir(img_path):
img = os.path.join(img_path,filename)
print(filename)
# ims = np.ndarray(range(img))
# img_flor=cv2.imread(ims,flags=1)
# img_flor=Image.open(img)
# img_flor = skimage.io.imread(img)
result = ocr.ocr(img, cls=True)
# 显示结果
image = Image.open(img).convert('RGB')
boxes = [line[0] for line in result[0]]
txts = [line[1][0] for line in result[0]]
scores = [line[1][1] for line in result[0]]
im_show = draw_ocr(image, boxes, txts, scores, font_path='./simfang.ttf')
im_show = Image.fromarray(im_show)
output_path = os.path.join(out_path, f"{os.path.splitext(filename)[0]}s.bmp")
im_show.save(output_path)
print(txts)
print("####################OK#####################")
img_path = "H:\\DL\\OCRrelse\\PaddleOCR-release-2.6\\train_DATA\\jpegs"
out_path = "H:\\DL\\OCRrelse\\PaddleOCR-release-2.6\\inference_results\\dete"
OCRsspt_en(img_path,out_path)
效果如下
上述训练流程是英文的,中英文都可用步骤不变 唯一不同的就是用的模型和.yml配置文件不同
如果你训练结束后acc为0 或者 没有任何参数 但是有流程的话 那就是你配置出了问题可以看我另一篇博客
PPOCR训练后acc为0解决方法_paddleocr训练rec模型 acc一直是0-优快云博客
九、C#部署(不完善)
官方部署包 https://github.com/sdcb/PaddleSharp
1.你需要下载ocr的包以及其他工具包
将你训练的两个模型导入进去,根据官方的部署包进行修改,读取模型
就像这样
然后就可以进行ocr识别了
需要其他操作,都可以自己加