当前位置:   article > 正文

Windows下的PaddleOCR本地部署_paddleocr windows部署

paddleocr windows部署

目录

一、环境配置

(一)PaddlePaddle运行环境部署

1.安装anaconda(网上教程很多很详细)

2.创建环境

3.激活环境并在该环境下安装PaddlePaddle框架

4.下载requirments.txt中的库

(二)PaddleOCR安装【非重点】

二、在自己的数据集上训练模型

(一)制作自己的数据集

1.安装PPOCRLabel并为自己的数据打标签,构建数据集

2.数据集的划分

(二)训练

1.文本检测训练

2.文本识别训练

(三)测试

1.文本检测模型测试

2.文本识别模型测试

(四)转换为推理模型

1.文本检测模型

2.文本识别模型

(五)检测模型和识别模型推理

(六)转换label并计算准确度指标

三、模型转换onnx

(一)环境准备

(二)模型转换

(三)推理预测


代码:从网址中下载压缩包并解压缩得到名为“PaddleOCR-main”的文件夹(我直接放到了桌面上)。

GitHub - 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)

一、环境配置

(一)PaddlePaddle运行环境部署

1.安装anaconda(网上教程很多很详细)

2.创建环境

  1. conda create --name padocr python=3.9
  2. # 检查是否是64位版本(基本上都是)
  3. python --version
  4. python -c "import platform;print(platform.architecture()[0]);print(platform.machine())"

3.激活环境并在该环境下安装PaddlePaddle框架

飞桨PaddlePaddle-源于产业实践的开源深度学习平台

  1. conda activate padocr
  2. # 比自己电脑的cuda版本低就行,我这里下载的我电脑可以接受的最新的
  3. conda install paddlepaddle-gpu==2.6.1 cudatoolkit=11.6 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge
  4. # 检查是否安装成功
  5. import paddle
  6. paddle.utils.run_check() # 如果出现PaddlePaddle is installed successfully!,说明已成功安装

4.下载requirments.txt中的库

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

(二)PaddleOCR安装【非重点】

如果训练自己的数据集,则不需要安装。

参考资料:

  1. pip install paddleocr==2.7.0.0 -i https://mirror.baidu.com/pypi/simple
  2. # 放一张图片在桌面上,测试安装是否成功
  3. cd Desktop
  4. paddleocr --image_dir img.pdf --use_angle_cls true --use_gpu false

在测试的过程中,出现了OMP的错误,显示如下。

解决该错误的方法如下(这里我同样属于情况一,删去其中一个,问题就解决了):

总结该问题解决方案:OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized-CSDN博客

【补充,没有这些错误就不用看了】

注意:如果上面安装出现问题时,比如缺少shapely,可以采用如下的方法。

对于Windows环境用户:直接通过pip安装的shapely库可能出现[winRrror 126]找不到指定模块的问题。建议从下面网址下载shapely安装包完成安装。

Links for shapely (tsinghua.edu.cn)

(1)下载shapely安装包并将其放置在“PaddleOCR-main”文件夹中

(2)安装shapely后再执行下载paddleocr的命令

  1. cd PaddleOCR-main
  2. pip install shapely-2.0.4-cp38-cp38-win_amd64.whl

二、在自己的数据集上训练模型

(一)制作自己的数据集

参考:

1.安装PPOCRLabel并为自己的数据打标签,构建数据集

  1. pip install PPOCRLabel -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. # 完成后,位置在D:\anaconda3\envs\padocr\Lib\site-packages\PPOCRLabel
  3. # 选择标签模式来启动,一般选第一个【检测+识别】的即可
  4. PPOCRLabel --lang ch # 启动【普通模式】,用于打【检测+识别】场景的标签
  5. PPOCRLabel --lang ch --kie True # 启动 【KIE 模式】,用于打【检测+识别+关键字提取】场景的标签

2.数据集的划分

  1. # 下面是官网给出的示例
  2. cd ./PPOCRLabel # 将目录切换到PPOCRLabel文件夹下
  3. python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath ../train_data
  4. # 一定要注意:路径一定要设置正确!!!
  5. '''
  6. trainValTestRatio 是训练集、验证集、测试集的图像数量划分比例,根据实际情况设定,默认是6:2:2
  7. datasetRootPath 是PPOCRLabel标注的完整数据集存放路径。默认路径是 PaddleOCR-main/train_data 。
  8. 数据集在划分前应有如下结构:
  9. |-train_data
  10. |-crop_img
  11. |- word_001_crop_0.png
  12. |- word_002_crop_0.jpg
  13. |- word_003_crop_0.jpg
  14. | ...
  15. |- Label.txt
  16. |- rec_gt.txt
  17. |- word_001.png
  18. |- word_002.jpg
  19. |- word_003.jpg
  20. | ...
  21. '''

我的数据集的划分

  1. cd ./PPOCRLabel
  2. python gen_ocr_train_val_test.py --trainValTestRatio 7:2:1 --datasetRootPath ../train_data/carriages
  3. '''
  4. 划分前我数据集的结构:
  5. |- train_data
  6. |- carriages
  7. |- crop_img
  8. |- carriage1450036_1_crop_0.jpg
  9. |- carriage1450036_1_crop_1.jpg
  10. |- carriage1450036_2_crop_0.jpg
  11. | ...
  12. |- fileState.txt
  13. |- Label.txt
  14. |- rec_gt.txt
  15. |- Cache.cach
  16. |- carriage1450036_1.png
  17. |- carriage1450036_2.jpg
  18. |- carriage1500244_1.jpg
  19. | ...
  20. '''

  1. '''
  2. 划分后我数据集的结构:
  3. |- train_data
  4. |- carriages
  5. |- det
  6. |- train(图像)
  7. |- val
  8. |- test
  9. |- train.txt(标签)
  10. |- val.txt
  11. |- test.txt
  12. |- rec
  13. |- train
  14. |- val
  15. |- test
  16. |- train.txt
  17. |- val.txt
  18. |- test.txt
  19. '''

 【补充】如果在ubuntu中运行划分数据集的命令的话,在修改fileState.txt中的路径后,会产生如下错误。

此时,只需要将gen_ocr_train_val_test.py中的 \\ 修改为 / 即可。

(二)训练

 参考:PaddleOCR/applications/轻量级车牌识别.md at main · PaddlePaddle/PaddleOCR (github.com)

doc/doc_ch/models_list.md,在这里面下载预训练权重,并放在新建的pretrain_models中。

首先在汽车车牌号数据集下做初步的训练。

汽车车牌号数据集CCPD2020的文件结构如下:

  1. |- train_data
  2. |- carriages
  3. |- det
  4. |- rec
  5. |- CCPD2020
  6. |- ccpd_green
  7. |- train(图像)
  8. |- val
  9. |- test
  10. |- PPOCR
  11. |- train
  12. |- crop_imgs(图像)
  13. |- det.txt
  14. |- rec.txt
  15. |- val
  16. |- crop_imgs(图像)
  17. |- det.txt
  18. |- rec.txt
  19. |- test
  20. |- crop_imgs(图像)
  21. |- det.txt
  22. |- rec.txt

1.文本检测训练

  1. # 首先,在汽车车牌号数据集CCPD2020上训练检测模型,具体过程可以前面参考链接里的内容
  2. python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.pretrained_model=pretrain_models/ch_PP-OCRv3_det_distill_train/ch_PP-OCRv3_det_distill_train/student.pdparams Global.save_model_dir=output/det_carlicense Global.epoch_num=100 Global.eval_batch_step="[0, 772]" Optimizer.lr.name=Const Optimizer.lr.learning_rate=0.0005 Optimizer.lr.warmup_epoch=5 Optimizer.regularizer.factor= 5.0e-05 Train.dataset.data_dir=./train_data/CCPD2020/ccpd_green Train.dataset.label_file_list=[./train_data/CCPD2020/PPOCR/train/det.txt] Eval.dataset.data_dir=./train_data/CCPD2020/ccpd_green Eval.dataset.label_file_list=[./train_data/CCPD2020/PPOCR/val/det.txt]
  3. # 然后,利用在汽车车牌号数据集上训练得到的权重来训练车厢号数据集
  4. python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.pretrained_model=./output/det_carlicense/best_accuracy.pdparams Global.save_model_dir=./output/PP-OCRv3_det Global.epoch_num=500 Optimizer.lr.name=Const Optimizer.lr.learning_rate=0.0005 Optimizer.lr.warmup_epoch=20 Optimizer.regularizer.factor=5.0e-05 Train.dataset.data_dir=./train_data/det/train/ Train.dataset.label_file_list=[./train_data/det/train.txt] Eval.dataset.data_dir=./train_data/det/val/ Eval.dataset.label_file_list=[./train_data/det/val.txt]

2.文本识别训练

  1. # 注意:文本识别的训练需要有一个txt文件来存储数据集中出现的文字、数字、字母等。
  2. # 其位置放在ppocr/utils/train_carriage_mine.txt
  3. # 首先,在汽车车牌号数据集CCPD2020上训练识别模型,具体过程可以前面参考链接里的内容
  4. python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=./pretrain_models/ch_PP-OCRv3_rec_train/ch_PP-OCRv3_rec_train/student Global.save_model_dir=./output/rec_carlicense Global.character_dict_path=ppocr/utils/train_carriage_mine Global.use_amp=True Global.scale_loss=1024.0 Global.use_dynamic_loss_scaling=True Train.dataset.data_dir=./train_data/CCPD2020/PPOCR Train.dataset.label_file_list=[./train_data/CCPD2020/PPOCR/train/rec.txt] Eval.dataset.data_dir=./train_data/CCPD2020/PPOCR Eval.dataset.label_file_list=[./train_data/CCPD2020/PPOCR/val/rec.txt] # 混合精度训练
  5. # 然后,利用在汽车车牌号数据集上训练得到的权重训练车厢号数据集
  6. python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=./output/rec_carlicense/best_accuracy Global.save_model_dir=./output/PP-OCRv3_rec Global.character_dict_path=ppocr/utils/train_carriage_mine Global.use_amp=True Global.scale_loss=1024.0 Global.use_dynamic_loss_scaling=True Train.dataset.data_dir=./train_data/rec/train Train.dataset.label_file_list=[./train_data/rec/train.txt] Eval.dataset.data_dir=./train_data/rec/val Eval.dataset.label_file_list=[./train_data/rec/val.txt] # 混合精度训练

(三)测试

1.文本检测模型测试

python tools/infer_det.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.pretrained_model=./output/PP-OCRv3_det/best_accuracy.pdparams Global.infer_img="C:\Users\W.ChenY\Desktop\PaddleOCR-main\train_data\det\test\carriage1503954_3.jpg"

2.文本识别模型测试

python tools/infer_rec.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=./output/PP-OCRv3_rec/best_accuracy.pdparams Global.infer_img="train_data/carriages/crop_img/carriage1505936_1_crop_1.jpg"

(四)转换为推理模型

1.文本检测模型

python tools/export_model.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o Global.pretrained_model=output/PP-OCRv3_det/best_accuracy.pdparams Global.save_inference_dir=output/infer_mine/det

2.文本识别模型

python tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=output/PP-OCRv3_rec/best_accuracy.pdparams Global.save_inference_dir=output/infer_mine/rec

(五)检测模型和识别模型推理

检测模型和识别模型同时使用

  1. # 注意:使用识别模型进行推理时,需要指定rec_char_dict_path
  2. # 单张图像检测+识别
  3. python tools/infer/predict_system.py --image_dir="train_data/carriages/carriage1553696_2.jpg" --det_model_dir="output/infer_mine/det" --rec_model_dir="output/infer_mine/rec" --use_angle_cls=false --draw_img_save_dir="./inference_results/use_infer" --rec_char_dict_path="ppocr/utils/train_carriage_mine"
  4. # 文件夹内全部图像检测+识别
  5. python tools/infer/predict_system.py --det_model_dir="output/infer_mine/det" --rec_model_dir="output/infer_mine/rec" --image_dir="train_data/carriages" --draw_img_save_dir=infer/fine-tune --use_dilation=true --rec_char_dict_path="ppocr/utils/train_carriage_mine"

只使用识别模型 

python tools/infer/predict_rec.py --image_dir="train_data/carriages/crop_img/carriage1505936_1_crop_1.jpg" --rec_model_dir="output/infer_mine/rec" --rec_char_dict_path="ppocr/utils/train_carriage_mine"

(六)转换label并计算准确度指标

  1. # 将gt和上一步保存的预测结果转换为端对端评测需要的数据格式,并根据转换后的数据进行端到端指标计算
  2. # 转换gt信息
  3. python tools/end2end/convert_ppocr_label.py --mode=gt --label_path="train_data/carriages/Label.txt" --save_folder=end2end/gt
  4. # 转换fine-tune预测信息
  5. python tools/end2end/convert_ppocr_label.py --mode=pred --label_path=infer/fine-tune/system_results.txt --save_folder=end2end/fine-tune
  6. # 将两者进行比对评估
  7. python tools/end2end/eval_end2end.py end2end/gt end2end/fine-tune

       gt:         fine_tune:

三、模型转换onnx

(一)环境准备

需要准备 Paddle2ONNX 模型转化环境,和 ONNXRuntime 预测环境。

注意:在安装以下环境时,参考NVIDIA - CUDA | onnxruntime,选择合适的版本号。

  1. pip install paddle2onnx -i https://pypi.tuna.tsinghua.edu.cn/simple/
  2. # 如果使用CPU进行推理
  3. pip install onnxruntime -i https://pypi.tuna.tsinghua.edu.cn/simple/
  4. # 如果使用GPU进行推理
  5. pip install onnxruntime-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple/

(二)模型转换

注意:在该步骤中,由于paddlepaddle-gpu版本的问题,转换识别模型时出现了错误,即: [ERROR] Cannot found attribute beta in op: swish
解决方法:
(1)首先,我的paddlepaddle-gpu版本为2.6.1,需要降低为2.5.2。

python -m pip install -U paddlepaddle-gpu==2.5.2 -i https://mirror.baidu.com/pypi/simple

(2)然后,将检测模型和识别模型重新转换为推理模型。(步骤在上面,即:二(四))
(3)最后,使用如下命令即可成功转出onnx。 

  1. # 检测
  2. paddle2onnx --model_dir ./output/infer_mine/det --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ./inference/det_onnx/model.onnx --opset_version 11 --enable_onnx_checker True
  3. # 识别
  4. paddle2onnx --model_dir ./output/infer_mine/rec --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ./inference/rec_onnx/model.onnx --opset_version 11 --enable_onnx_checker True
  5. # 分类(这个我用不到)
  6. paddle2onnx --model_dir ./inference/ch_ppocr_mobile_v2.0_cls_infer --model_filename inference.pdmodel --params_filename inference.pdiparams --save_file ./inference/cls_onnx/model.onnx --opset_version 11 --enable_onnx_checker True

python -m paddle2onnx.optimize --input_model=inference/det_onnx/model.onnx --output_model=inference/det_onnx/model.onnx --input_shape_dict="{'x': [-1,3,-1,-1]}"

(三)推理预测

python tools/infer/predict_system.py --use_gpu=True --use_onnx=True --det_model_dir=./inference/det_onnx/model.onnx --rec_model_dir=./inference/rec_onnx/model.onnx --image_dir=./train_data/carriages --draw_img_save_dir="./inference_results/use_onnx" --rec_char_dict_path="ppocr/utils/train_carriage_mine"

--------------------------------------------截止--------------------------------------------

【补充】

车号识别模型的验证和推理

  1. python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml
  2. python tools/infer_rec.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=output/rec_carlicense/best_accuracy.pdparams Global.infer_img="图像绝对路径"

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/946130
推荐阅读
相关标签
  

闽ICP备14008679号