【PaddleOCR的简单使用】


paddleocr文档
paddlepaddle飞浆官网
paddlepaddle飞浆AI低代码

一、环境配置

  1. win10
  2. Anaconda
  3. 创建Anaconda python环境在这里插入图片描述
# 在命令行输入以下命令,创建名为paddle_env的环境
# 此处为加速下载,使用清华源
conda create --name paddle_env python=3.10 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/  # 这是一行命令
# 激活paddle_env环境
conda activate paddle_env
# 查看当前python的位置
where python
  1. 安装PaddlePaddle
# 机器安装的是CUDA 11,请运行以下命令安装
pip install paddlepaddle-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple
# 您的机器是CPU,请运行以下命令安装,建议安装2.5.0版本的,可以使用很多独特的功能,比如表格内容SRE,RE预测推理模型
pip install paddlepaddle==2.5.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 安装PaddleOCR whl包
pip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 安装PaddleLabel标注工具
pip install PPOCRLabel -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 下载paddleocr 源代码
方便安装依赖包及运行训练
指定位置下D:\PythonWorkSpace_Study\PaddleOCR_test
git clone https://gitee.com/PaddlePaddle/PaddleOCR

## 1.6 安装requirements
cd D:\PythonWorkSpace_Study\PaddleOCR_test\PaddleOCR
# 此时conda无反应,需要再输入
D:
# 切换到指定目录
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

二、PaddleLabel标注工具的使用方法

  1. conda 启动python环境
  2. 找到环境下的site-package对应的PaddleLabel文件夹
  3. 启动PaddleLabel工具
python PPOCRLabel.py  --lang ch  # 启动【普通模式】,用于打【检测+识别】场景的标签
  1. 例如我的PaddleLabel就在D:\DevelopmentTools\Anaconda\envs\paddle_env\Lib\site-packages\PPOCRLabel目录下
  2. 自定义模型:如果用户想将内置模型更换为自己的推理模型,可根据自定义模型代码使用,通过修改PPOCRLabel.py中针对PaddleOCR类的实例化 或者PPStructure实现,例如指定检测模型:self.ocr = PaddleOCR(det=True, cls=True, use_gpu=gpu, lang=lang) ,在 det_model_dir 中传入自己的模型即可。
  3. 导出结果:用户可以通过菜单中“文件-导出标记结果”手动导出,同时也可以点击“文件 - 自动导出标记结果”开启自动导出。手动确认过的标记将会被存放在所打开图片文件夹下的Label.txt中。在菜单栏点击 “文件” - "导出识别结果"后,会将此类图片的识别训练数据保存在crop_img文件夹下,识别标签保存在rec_gt.txt中[4]
  4. 数据集划分
cd ./PPOCRLabel # 将目录切换到PPOCRLabel文件夹下
python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath ../train_data
# --datasetRootPath 后面的../train_data就是数据标注文件所在位置
# 生成的数据集在D:\DevelopmentTools\Anaconda\envs\paddle_env\Lib\site-packages\train_data目录下

三、数据集的使用方法

3.1 飞浆AI Studio模型产线

  1. 建议使用该模型产线进行训练
    在这里插入图片描述
  2. 选择创建产线
    在这里插入图片描述
  3. 首先选文本检测产线
    在这里插入图片描述
  4. 自定义数据集需要满足目录条件
    在这里插入图片描述
  5. 改变每一个txt文件里面的图片目录,改成当前文件的相对目录,需要注意linux和windows路径符号
    在这里插入图片描述
  6. 将数据集文件统一打包成zip文件并放置在模型产线进行训练,所有训练配置都选择默认即可

3.2 自己电脑训练,建议使用GPU

  1. PaddleOCR训练属于自己的模型详细教程

四、结果文件的使用方法

4.1 可直接离线部署

4.2 可以选择结果文件

在这里插入图片描述

  1. 获取上面截图中的文件
  2. 转换成推理模型
# -c 后面设置训练算法的yml配置文件
# -o 配置可选参数
# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
# Global.save_inference_dir参数设置转换的模型将保存的地址。

python3 tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml -o Global.pretrained_model=./ch_lite/ch_ppocr_mobile_v2.0_det_train/best_accuracy Global.save_inference_dir=./inference/det_db/

4.3 测试训练模型

  • 测试单张图像的检测效果:
python tools/infer_det.py -c D:\PythonWorkSpace_Study\PaddleOCR\inference_model\djzs_det1\config.yaml -o Global.infer_img="D:\WorkDocument\OCRTest\Carfi\sre_ocr\00037.jpg" Global.pretrained_model="D:\PythonWorkSpace_Study\PaddleOCR\inference_model\djzs_det1\best_accuracy"
  • 其中需要注意config.yaml的配置信息。没有的要补充上
    在这里插入图片描述

  • 转换检测训练模型到推理模型

python tools/export_model.py -c D:\PythonWorkSpace_Study\PaddleOCR\inference_model\djzs_det1\config.yaml -o Global.pretrained_model="D:\PythonWorkSpace_Study\PaddleOCR\inference_model\djzs_det1\best_accuracy" Global.save_inference_dir="D:\PythonWorkSpace_Study\PaddleOCR\model\djzs_det1"
  • 使用检测推理模型预测检测
python tools/infer/predict_det.py --det_algorithm="DB" --det_model_dir="D:\PythonWorkSpace_Study\PaddleOCR\model\djzs_det1" --image_dir="D:\WorkDocument\OCRTest\Carfi\sre_ocr\00037.jpg"
  • 转换识别训练模型到推理模型
python tools/export_model.py -c D:\PythonWorkSpace_Study\PaddleOCR\inference_model\djzs_rec1\config.yaml -o Global.pretrained_model=D:\PythonWorkSpace_Study\PaddleOCR\inference_model\djzs_rec1\best_accuracy Global.save_inference_dir=D:\PythonWorkSpace_Study\PaddleOCR\model\djzs_rec1
  • 可能遇见的错误
    UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xcb’ in position 0: illegal multibyte sequence
    在这里插入图片描述
  • 解决方法
    • 找到export_model.py,更改 with open(path, “w”, encoding=“utf-8”) as f:
      在这里插入图片描述
  • 使用检测和识别推理模型识别图片
python tools/infer/predict_system.py --image_dir="D:\WorkDocument\OCRTest\Carfi\sre_ocr\00037.jpg" --det_model_dir="D:\PythonWorkSpace_Study\PaddleOCR\model\djzs_det1" --rec_model_dir="D:\PythonWorkSpace_Study\PaddleOCR\model\djzs_rec1"

五、关于Paddle OCR检测器检测框偏小的解决方法

  1. 将yaml文件里面字段"unclip_ratio"的值调大。例如:configs/det_mv3_db.yml文件:将默认值1.5改为3.0。
  2. 在测试评估没有问题,转为推理模型,再做推理测试,发现又变小了,然后追踪推理的代码。发现推理的配置信息在tools/infer/utillity.py文件中。这个文件里面也有一个det_db_unclip_ratio,修改这里的unclip_ratio,检测框正常了
  3. ppocr如果多次训练导致识别率下降,需要考虑降低学习率,从而保证识别精度

六、Paddlehub Serving部署

PaddleHub

6.1 报错ImportError: libGL.so.1: cannot open shared object file: No such file or directory

# 下载mesa-libGL.x86_64 
yum install mesa-libGL.x86_64

6.2 报错ImportError: cannot import name ‘RNNCell’ from ‘paddle.fluid.layers’ (/root/anaconda3/envs/paddle_env/lib/python3.8/site-packages/paddle/fluid/layers/init.py)

paddle是2.5.1 gpu,Linux运行时cannot import name 'RNNCell' from 'paddle.fluid.layers',这是因为2.5.0后没有fluid某些算子了,这时不用降版本(因为我将版本后出现了另一个错误,这时只需要把/root/anaconda3/envs/paddle_env/lib/python3.8/site-packages/paddlehub/compat/task/text_generation_task.py这个文件

from 'paddle.fluid.layers import RNNCell ... 换成from paddle.nn import RNNCellBase...对应其他同名的也做替换就可。

小写的rnn需要更换成大小的RNN

在这里插入图片描述

6.3 protobuf版本过高,可使用protobuf ==3.20.2

七、关于docker内部部署paddlehub遇见的问题

7.1 paddlehub所在位置

一般所在位置/opt/conda/lib/python3.9/site-packages/paddlehub
其中commands包含install.py serving.py 用于安装模块和启动模块

7.2 安装模块所在位置

一般在/root/.paddlehub/modules/kie_ser

7.3 关于paddlehub 内存爆炸的处理方案

主要是看module运行的是啥,比如我用的是kie_ser模块,最终调用的是
/opt/conda/lib/python3.9/site-packages/paddleocr/ppstructure/kie 目录下
predict_kie_token_ser.py方法,
该方法内部存在
def __call__(self, img):
        ori_im = img.copy()
        data = {"image": img}
        data = transform(data, self.preprocess_op)
        if data[0] is None:
            return None, 0
        starttime = time.time()

        for idx in range(len(data)):
            if isinstance(data[idx], np.ndarray):
                data[idx] = np.expand_dims(data[idx], axis=0)
            else:
                data[idx] = [data[idx]]

        for idx in range(len(self.input_tensor)):
            self.input_tensor[idx].copy_from_cpu(data[idx])

        self.predictor.run()

        outputs = []
        for output_tensor in self.output_tensors:
            output = output_tensor.copy_to_cpu()
            outputs.append(output)
        preds = outputs[0]

        post_result = self.postprocess_op(
            preds, segment_offset_ids=data[6], ocr_infos=data[7]
        )
        elapse = time.time() - starttime
        # 释放内存
        self.predictor.clear_intermediate_tensor()
        self.predictor.try_shrink_memory()
        return post_result, data, elapse

主要关注 self.predictor.run()该方法,
内部使用
   # 释放内存
        self.predictor.clear_intermediate_tensor()
        self.predictor.try_shrink_memory()

PaddleHub内存爆炸
Predictor内存回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值