Files
rapidocr/models

Download models

  • from baiduNetDisk:

链接:https://pan.baidu.com/s/1UhDrC7iOMWiYaQiHk3acdw 提取码:yjgv

onnx模型转换说明

一、如何获得模型

  • 您可以通过使用paddle全家桶,通过其完善的说明,事无巨细的指引,手把手地让您从零开始,训练自己的模型。
  • 或者,您也可以直接去paddle官网下载预先训练好的模型。
  • 这个预先训练好的模型叫作train模型,server模型体积较大(准确度高速度慢些),mobile模型体积较小(准确度相对低速度快)。
  • det和rec有server和mobile两种模型,cls只有mobile模型。
  • 预训练模型下载地址:
模型名称 模型简介 配置文件 下载地址
mobile cls train 文本方向分类 rec_chinese_lite_train_v2.0.yml 训练模型
ch_ppocr_mobile_v2.0_det 超轻量模型,多语种文本检测 ch_det_mv3_db_v2.0.yml 训练模型
ch_ppocr_server_v2.0_det 通用模型,多语种文本检测 ch_det_res18_db_v2.0.yml 训练模型
ch_ppocr_mobile_v2.0_rec 超轻量模型,简体中英文数字 rec_chinese_lite_train_v2.0.yml 训练模型
ch_ppocr_server_v2.0_rec 通用模型,简体中英文数字 rec_chinese_common_train_v2.0.yml 训练模型
en_number_mobile_v2.0_rec 英文数字 rec_en_number_lite_train.yml 训练模型
french_mobile_v2.0_rec 法文 rec_french_lite_train.yml 训练模型
german_mobile_v2.0_rec 德文 rec_german_lite_train.yml 训练模型
korean_mobile_v2.0_rec 韩文 rec_korean_lite_train.yml 训练模型
japan_mobile_v2.0_rec 日文 rec_japan_lite_train.yml 训练模型
it_mobile_v2.0_rec 意大利文 rec_it_lite_train.yml 训练模型
xi_mobile_v2.0_rec 西班牙文 rec_xi_lite_train.yml 训练模型
pu_mobile_v2.0_rec 葡萄牙文 rec_pu_lite_train.yml 训练模型
ru_mobile_v2.0_rec 俄罗斯文 rec_ru_lite_train.yml 训练模型
ar_mobile_v2.0_rec 阿拉伯文 rec_ar_lite_train.yml 训练模型
hi_mobile_v2.0_rec 印地文 rec_hi_lite_train.yml 训练模型
chinese_cht_mobile_v2.0_rec 繁体中文 rec_chinese_cht_lite_train.yml 训练模型
ug_mobile_v2.0_rec 维吾尔文 rec_ug_lite_train.yml 训练模型
fa_mobile_v2.0_rec 波斯文 rec_fa_lite_train.yml 训练模型
ur_mobile_v2.0_rec 乌尔都文 rec_ur_lite_train.yml 训练模型
rs_mobile_v2.0_rec 塞尔维亚文(latin) rec_rs_lite_train.yml 训练模型
oc_mobile_v2.0_rec 欧西坦文 rec_oc_lite_train.yml 训练模型
mr_mobile_v2.0_rec 马拉地文 rec_mr_lite_train.yml 训练模型
ne_mobile_v2.0_rec 尼泊尔文 rec_ne_lite_train.yml 训练模型
rsc_mobile_v2.0_rec 塞尔维亚文(cyrillic) rec_rsc_lite_train.yml 训练模型
bg_mobile_v2.0_rec 保加利亚文 rec_bg_lite_train.yml 训练模型
uk_mobile_v2.0_rec 乌克兰文 rec_uk_lite_train.yml 训练模型
be_mobile_v2.0_rec 白俄罗斯文 rec_be_lite_train.yml 训练模型
te_mobile_v2.0_rec 泰卢固文 rec_te_lite_train.yml 训练模型
ka_mobile_v2.0_rec 卡纳达文 rec_ka_lite_train.yml 训练模型
ta_mobile_v2.0_rec 泰米尔文 rec_ta_lite_train.yml 训练模型
  • 先把这些模型通过训练或者下载的方式准备好备用。

二、准备环境和工具

  • 开始之前,需要先准备好Linux,paddle的pip包不支持macOS,而windows部署起来麻烦一些,以下说明以deepin20为范例。
  • 安装python3: sudo apt-get install python3
  • 安装pip3:
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
  • pip安装paddlepaddle( 2.0的模型需要2.0版): sudo pip3 install paddlepaddle==2.0.0rc1 -i https://mirror.baidu.com/pypi/simple

pip安装转换工具附加依赖: sudo pip3 install setuptools tqdm opencv-python imgaug pyclipper -i https://mirror.baidu.com/pypi/simple

  • 安装lmdb依赖: sudo apt-get install python3-yaml libxml2-dev libxslt1-dev python3-dev
  • pip安装lmdb: sudo pip3 install lmdb -i https://mirror.baidu.com/pypi/simple
  • pip安装onnx: sudo pip3 install onnx
  • 下载PaddleOCR(用于预训练模型转paddle推理模型):git clone https://github.com/PaddlePaddle/PaddleOCR.git
  • 安装转换工具库Paddle2ONNX(develop分支,用于paddle推理模型转onnx模型):
#官方仓库已修复fix_adative_pool
git clone https://github.com/PaddlePaddle/Paddle2ONNX.git
cd Paddle2ONNX
git checkout develop
sudo python3 setup.py install

#以下为修复mobile rec转换错误的开发版
#修复代码还未同步进官方仓库之前,先使用此版本
#git clone https://github.com/Channingss/paddle2onnx.git
#cd paddle2onnx
#git checkout fix_adative_pool
#sudo python3 setup.py install

三、开始转换

  • 接下来的操作都在PaddleOCR文件夹里进行
  • PaddleOCR切换到release/2.0分支(因为train训练模型也是v2.0格式的)
git clone https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
git checkout release/2.0
  • 生成多语言识别模型配置文件
#安装模块依赖
sudo pip3 install pyyaml
cd PaddleOCR/configs/rec/multi_language
#生成多语言配置文件
python3 generate_multi_language_configs.py -l it
python3 generate_multi_language_configs.py -l xi
python3 generate_multi_language_configs.py -l pu
python3 generate_multi_language_configs.py -l ru
python3 generate_multi_language_configs.py -l ar
python3 generate_multi_language_configs.py -l hi
python3 generate_multi_language_configs.py -l chinese_cht
python3 generate_multi_language_configs.py -l ug
python3 generate_multi_language_configs.py -l fa
python3 generate_multi_language_configs.py -l ur
python3 generate_multi_language_configs.py -l rs
python3 generate_multi_language_configs.py -l oc
python3 generate_multi_language_configs.py -l mr
python3 generate_multi_language_configs.py -l ne
python3 generate_multi_language_configs.py -l rsc
python3 generate_multi_language_configs.py -l bg
python3 generate_multi_language_configs.py -l uk
python3 generate_multi_language_configs.py -l be
python3 generate_multi_language_configs.py -l te
python3 generate_multi_language_configs.py -l ka
python3 generate_multi_language_configs.py -l ta
  • 新建文件夹PaddleOCR/inference
  • 把预训练模型解压到inference目录,严格按照如下目录结构和文件名放置
PaddleOCR/inference
├── ar_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── be_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── bg_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── ch_ppocr_mobile_v2.0_cls_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── ch_ppocr_mobile_v2.0_det_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── ch_ppocr_mobile_v2.0_rec_train
│    ├── best_accuracy.pdparams
│    └── train.log
├── ch_ppocr_server_v2.0_det_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── ch_ppocr_server_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── chinese_cht_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── en_number_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── fa_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── french_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── german_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── hi_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── it_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── japan_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── ka_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── korean_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── mr_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── ne_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── oc_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── pu_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── rs_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── rsc_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── ru_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── ta_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── te_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── ug_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── uk_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
├── ur_mobile_v2.0_rec_train
│    ├── best_accuracy.pdopt
│    ├── best_accuracy.pdparams
│    ├── best_accuracy.states
│    └── train.log
└── xi_mobile_v2.0_rec_train
     ├── best_accuracy.pdopt
     ├── best_accuracy.pdparams
     ├── best_accuracy.states
     └── train.log
  • 把本项目tools文件夹里的export_custom.py复制到PaddleOCR/tools里,把program.py覆盖到PaddleOCR/tools里
  • 把本项目tools文件夹里的gen-models.sh复制到PaddleOCR根目录
  • 开始转换
cd PaddleOCR
chmod a+x gen-models.sh
./gen-models.sh
  • 转换成功后,会在PaddleOCR/inference文件夹里生成31个onnx模型