PaddleOCR的官方Android demo使用的PaddleLite版本目前是2.10,使用的paddle_lite_opt优化后的模型是v2版本。目前最新的PaddleLite版本是2.13RC,最新的模型版本是v4,据说有比较大提升。那么如何在官方demo中体验最新版本的PaddleLite识别库和v4模型呢?
下载PaddleLite
可以直接下载官方编译好的:https://github.com/PaddlePaddle/Paddle-Lite/releases,我下载的是v2.13RC版本
下载后,解压,放到Android demo的app module根目录下,文件夹重命名为PaddleLite(与demo原编译脚本运行后自动生成的文件夹同名)。目录结构为:
如果你想使用低于2.13的版本的PaddleLite,那么需要注意的是,只支持python == 2.7\3.5\3.6\3.7。https://github.com/PaddlePaddle/Paddle-Lite/issues/10115
安装paddlelite工具
pip install paddlelite==2.13rc0
需要注意的是,这一步需要安装跟上述PaddleLite同版本的命令行工具,来优化模型。如果使用其他版本的paddlelite工具优化出来的模型,使用时会报错”Error: This model is not supported, because kernel for ‘io_copy’ is not supported by Paddle-Lite.“
由于我上述下载的PaddleLite推理库的版本是2.13RC,所以这里我就安装2.13rc0版本的paddlelite。
优化模型
从这里下载最新的模型:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md
需要下载三个模型,分别是文本检测模型(dec)、文本识别模型(rec)、文本方向分类模型(cls)。都各自下载最新的版本。注意下载的是”推理模型“,而不是“训练模型”或“nb模型”。
下载之后,使用上述通过pip安装的paddlelite工具进行优化:
paddle_lite_opt --model_file=./inference.pdmodel --param_file=./inference.pdiparams --optimize_out=./output --valid_targets=arm --optimize_out_type=naive_buffer
运行完成后,会得到一个nb文件。对上述下载的文本检测模型(dec)、文本识别模型(rec)、文本方向分类模型(cls)分别执行,得到三个nb文件。将这三个nb文件,放到Android demo的asserts文件夹中替换原始的三个模型文件。
修改CMakeLists.txt
查找文件中对${PaddleLite_DIR}的使用,注释掉新版PaddleLite中不再存在的文件对应的add_custom_command,再修改libpaddle_light_api_shared.so文件的路径。
收尾
修改Android demo中的MiniActivity.java/Predictor.java/string.xml中,对模型文件或者模型文件夹的定义,使其与新的模型文件相匹配
运行
完美运行
参考文献
https://github.com/PaddlePaddle/Paddle-Lite/releases
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/deploy/lite/readme.md
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/deploy/android_demo/app/build.gradle
https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.7/deploy/android_demo
https://github.com/PaddlePaddle/Paddle-Lite/issues/10115
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/deploy/lite/readme_ch.md