PaddleOCR模型移植安卓
一、PaddleOCR 简介
PaddleOCR 是一套丰富、领先、且实用的OCR工具库, 助力开发者训练出更好的模型, 并应用落地.
基于 PaddleOCR 训练出的模型具有良好的文本识别性.
二、移植过程
1. 编译环境准备
我们需要编译用于移动端的 Paddle Lite 以及 C++ demo.
C++ 环境
gcc、g++ == 7.5.0
CMake == 3.10.3
Android NDK == r17c
Java 环境
OpenJDK == 11.0.6
2. 环境安装(以 Ubuntu 18.04 为例)
1 |
|
3. 编译步骤
运行编译脚本之前, 请先检查系统环境变量 NDK_ROOT 指向正确的 Android NDK 安装路径. 之后可以下载并构建 Paddle Lite 编译包.
1 |
|
1 |
|
1 |
|
这步需要花费很久的时间, 建议使用虚拟机或者 WSL 来编译. 编译完成后我们就可以得到预测动态库 libpaddle_light_api_shared.so.
4. 模型转换
在 PC 端训练的模型是以 .pdmodel 后缀结尾的文件. 如果要在移动端使用训练的模型就需要把 .pdmodel 的文件转换成 .nb 的文件.
步骤一 : 安装 paddlelite 用于转换 paddle inference model 为 paddlelite 运行所需的 nb 模型.
1
pip install paddlelite==2.10 # paddlelite版本要与预测库版本一致
安装完后, 如下指令可以查看帮助信息
1
paddle_lite_opt
如果出现找不到命令, 那么就试着重启一下.
步骤二 : 使用 paddle_lite_opt 将推论模型转换成移动端模型格式.
以 PaddleOCR 的超轻量英文模型为例, 使用 paddle_lite_opt 完成推论模型到 Paddle-Lite 优化模型的转换.
1
2
3
4
5
6
7
8
9
10
11# 下载 PP-OCRv3 版本的中文推论模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_slim_infer.tar && tar xf ch_PP-OCRv3_det_slim_infer.tar
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_slim_infer.tar && tar xf ch_PP-OCRv3_rec_slim_infer.tar
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/slim/ch_ppocr_mobile_v2.0_cls_slim_infer.tar && tar xf ch_ppocr_mobile_v2.0_cls_slim_infer.tar
# 转换检测模型
paddle_lite_opt --model_file=./ch_PP-OCRv3_det_slim_infer/inference.pdmodel --param_file=./ch_PP-OCRv3_det_slim_infer/inference.pdiparams --optimize_out=./ch_PP-OCRv3_det_slim_opt --valid_targets=arm --optimize_out_type=naive_buffer
# 转换识别模型
paddle_lite_opt --model_file=./ch_PP-OCRv3_rec_slim_infer/inference.pdmodel --param_file=./ch_PP-OCRv3_rec_slim_infer/inference.pdiparams --optimize_out=./ch_PP-OCRv3_rec_slim_opt --valid_targets=arm --optimize_out_type=naive_buffer
# 转换方向分类器模型
paddle_lite_opt --model_file=./ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdmodel --param_file=./ch_ppocr_mobile_v2.0_cls_slim_infer/inference.pdiparams --optimize_out=./ch_ppocr_mobile_v2.0_cls_slim_opt --valid_targets=arm --optimize_out_type=naive_buffer
5. 与移动设备联调
在 windows 端安装 adb 并在终端输入下面指令
1 |
|
如果有device输出, 则表示安装成功.
准备优化后的模型、预测库文件、测试图像和使用的字典文件.
1 |
|
移动三个模型到 ./debug/ 文件夹下, 其中的 11.jpg 是测试图像.
1 |
|
启动调试
1 |
|
这里会出现一个 BUG, 显示头文件的缺失.
想必这单纯是夹带私货了, 这里就需要下载 AutoLog 这个库并编译
1 |
|
1 |
|
! ! ! 这里需要注意 ocr_db_crnn 还不是可执行文件, 需要给其可执行属性.
1 |
|
1 |
|
原图片 :
文本检测后的图片 :
识别情况 :
模型信息和运行速度 :
三、总结
PaddleOCR 的兼容性很差, 一个小版本都可能导致无法编译. 尤其需要注意高版本的 Android NDK, 它修改了各种库的位置, 很容易造成编译时出现头文件缺失的情况.
clone 项目尽量从 Github 进行 clone, Gitee 上虽然有相同项目文件, 但可能会出现识别文字乱码或者编译出的 ocr_db_crnn 找不到动态链接库.