PaddleX最新版本使用完整方案

        笔者最近使用了PaddleX工具中的文字识别,也就是通用OCR,参考的教程都已不是最新版本,走了很多弯路,故整理了一份完整的教程。

注意:本方案基于PaddlePaddle3.0.0rc0,PaddleX3.0.0rc0,cuda11.8,python3.8.10实现

一、背景介绍

        文字识别需要使用到PaddleX中的PaddleOCR工具,该工具的作用是识别图片中的文本。更具体地说,该工具由文本检测模型和文本识别模型组成,前者负责寻找图片中的文本框,后者负责识别文本框的内容,二者有一个效果较差就会使得最终结果较差。识别效果请参考官方文档PaddleOCR 文档

二、制作数据集

1.制作文本检测数据集

由于模型分为文本检测模型和文本识别模型,故我们要训练自己的模型,需要准备两种数据集,这里参考官方给出的示例数据集。

图2-1 文本检测数据集的文件

下载链接:https://paddle-model-ecology.bj.bcebos.com/paddlex/data/ocr_det_dataset_examples.tar

(1)images文件夹包括所有检测数据集

(2)train.txt是训练集的标签

单个标签格式:图片image1的路径 image1的所有文本框 所有文本框的逆时针四个点的x、y坐标。

如果使用repr函数查看,jpg后面是\t,最后一个符号]接了一个\n,其余分割均为空格,jpg后面是一个列表,每个列表是一个字典,字典的transcription的值对应文本内容,points的值是一个列表,这个列表包含四个值,是文本框逆时针顺序的x、y坐标值。

如果你需要制作自己数据集标签,可以参考这个代码。

s1是图片名字,s2是文本框文本内容,s3是文本框坐标列表。

f'{s1}\t[{{"transcription": "{s2}", "points": {s3}}}]\n'

图2-2 官方文本检测数据集的标签文件

(3)val.txt是验证集的标签,格式类似。

2.制作文本识别数据集

图2-3 官方文本识别数据集的文件

下载链接:https://paddle-model-ecology.bj.bcebos.com/paddlex/data/ocr_rec_dataset_examples.tar

(1)images文件夹包括所有文本检测数据集。

(2)dict.txt是字典,路径为paddleocr\ppocr\utils\dict中的一个字典,这个路径是安装虚拟环境后在iniconda3/envs/ocr/lib/python3.8/site-packages里面找。

(3)train.txt是训练集的标签

单个标签格式:图片image1的路径 image1的文本框内容

如果使用repr函数查看,jpg后面是\t,最后一个符号]接了一个\n

如果你需要制作自己数据集标签,可以参考这个代码

s1是图片名字,s2是文本框文本内容

f'{s1}\t{s2}\n'

图2-4 官方文本检测数据集的标签文件

三、搭建环境

笔者参考了安装PaddlePaddle - PaddleX 文档,选择了CUDA11.8环境

图3-1 官方文档版本参考

在AutoDL平台可以直接构造这个环境,你可以使用在终端中使用以下命令来查看CUDA版本

nvcc --version

图3-2 虚拟环境选择

然后依次输入以下命令

conda init # 输入后重启
conda create --name ocr python==3.8.10 #构造python3.8.10环境
conda activate ocr # 启动虚拟环境
python -m pip install paddlepaddle-gpu==3.0.0rc0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/ # 安装11.8cuda环境的paddlegpu环境
git clone https://github.com/PaddlePaddle/PaddleX.git # 下载git文件
cd PaddleX # 进入下载的文件
pip install -e . # 可编译方式下载PaddleX
paddlex --install PaddleOCR # 利用PaddleX下载PaddleOCR

以下是几个可能遇到的问题

1.OSError: cannot load library 'libsndfile.so': libsndfile.so: cannot open shared object file: No such file or directory

参考链接:cannot load library ‘libsndfile.so‘: libsndfile.so: cannot open shared object file: No such file or_oserror: cannot load library 'libsndfile.so': libs-CSDN博客

省流:

运行以下命令

sudo apt-get update
apt install libsndfile1

2.ImportError: cannot import name 'preserve_channel_dim' from 'albucore.utils' (/root/miniconda3/envs/ocr/lib/python3.8/site-packages/albucore/utils.py)

参考链接:

cannot import name 'preserve_channel_dim' from 'albucore.utils' · Issue #182 · ostris/ai-toolkit

省流:

运行以下命令

pip install albucore==0.0.16

四、训练模型

注意:请自己注意路径,笔者不在路径进行赘述

1、训练文本检测模型

在以下路径PaddleX/paddlex/configs/modules/text_detection随机选取一个yaml文件作为配置文件,笔者选择的是PP-OCRv4_mobile_det.yaml

图4-1 文本检测模型配置文件

标红位置说明:以下(1)代表从上往下第一个红框,(2)代表从上往下第二个红框,以此类推。

(1)数据集位置

(2)gpu:0,1,2,3 改为 gpu:0

(3)(5)(7)分别为模型训练输出路径、评估输出路径、预测数据路径,注意三个都有子字符out,如果你修改了,要全部修改

(4)(6)官方给出的预训练模型链接,建议复制链接在自己电脑上下载,然后上传。

权重路径参考替换"pretrained_model/PP-OCRv4_mobile_det_pretrained.pdparams"

图4-2 文本检测模型配置文件修改

上传按钮在这里

图4-3 上传按钮

除了这个预训练模型文件,还需要上传你自己的文本检测数据集,一定一定注意标签的格式,自己参考上面的。

做完以上工作,在挨个运行以下命令

第一个命令是检查数据集,如果成功会出现一行绿字提示你通过检测,如果失败,请你仔细检查格式。

第二个命令是训练模型,如果提示“超过最大递归深度”的错误,可能是你把“文本识别”数据集当成“文本检测”数据集了,替换一下再试试。训练会产生日志文件,想打印日志中的一些参数,可以考虑用正则表达式和字典键值对的方法。

第三个命令是评估模型,会评估模型。

python main.py -c paddlex/configs/modules/text_detection/PP-OCRv4_mobile_det.yaml -o Global.mode=check_dataset 
python main.py -c paddlex/configs/modules/text_detection/PP-OCRv4_mobile_det.yaml -o Global.mode=train 
python main.py -c paddlex/configs/modules/text_detection/PP-OCRv4_mobile_det.yaml -o Global.mode=evaluate

其实还有个命令,是预测命令,根据你的输入图片输出一些结果,但笔者没尝试。

python main.py -c paddlex/configs/modules/text_detection/PP-OCRv4_mobile_det.yaml -o Global.mode=predict -o Predict.input="image11.jpg"

2、训练文本识别模型

在以下路径PaddleX/paddlex/configs/modules/text_recognition随机选取一个yaml文件作为配置文件,笔者由于数据集是日语,选择的是japan_PP-OCRv3_mobile_rec.yaml

修改文件的方法类似,请自己解决。

(4)(6)参考替换:"pretrained_model/japan_PP-OCRv3_mobile_rec_pretrained.pdparams"

这里给出运行命令

python main.py -c paddlex/configs/modules/text_recognition/japan_PP-OCRv3_mobile_rec.yaml -o Global.mode=check_dataset
python main.py -c paddlex/configs/modules/text_recognition/japan_PP-OCRv3_mobile_rec.yaml -o Global.mode=train 
python main.py -c paddlex/configs/modules/text_recognition/japan_PP-OCRv3_mobile_rec.yaml -o Global.mode=evaluate 

到了这一步,你应该有了两个模型了,接下来就是去替换模型了。

五、通用OCR场景识别

在终端输入以下命令:

paddlex --get_pipeline_config OCR --save_path ./my_path

你会在在PaddleX中创建一个my_path文件夹,里面有OCR.yaml文件

修改OCR.yaml文件

(1)文本检测模型名称

(2)文本检测模型路径

(3)文本识别模型名称

(4)文本检测模型路径

图5-1 OCR产线配置文件

关于两个模型的路径,里面的文件应该是这样的

图5-2 训练模型格式参考

关于模型名称,如果不是正确的名称,会报错,你可以在paddlex\inference\models的__init__文件这个函数添加以下代码,来查看具体哪些是正确的名称。

print(official_models)

图5-3 查看合法模型名称

在PaddleX文件夹里面,创建一个test.py文件,参考代码:

注意替换pipeline的文件和input就可以了

这样你就利用了自己训练的模型完成了任务。

from paddlex import create_pipeline

pipeline = create_pipeline(pipeline="my_path/OCR.yaml")

output = pipeline.predict(
    input="japan_1.jpg",
    use_doc_orientation_classify=False,
    use_doc_unwarping=False,
    use_textline_orientation=False,
)
for res in output:
    res.print()
    res.save_to_img(save_path="./output/")
    res.save_to_json(save_path="./output/")

六、总结

        整个操作,比较难的是虚拟环境搭建、数据集标签制作、路径问题,其他的都比较简单。如果存在错误,欢迎纠正。如果需要帮助,可以私信哟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值