目的
PaddleOCR的github中有对端侧部署有详细教程,但是我觉得里面讲解的还是不够详细,在我部署我自己新训练的模型的时候,还是遇到了一些问题,
1、paddlelite应该选择什么版本对新模型编译?
2、如何替换android_demo中有关paddlelite的so文件?
3、如何修改android_demo的包名?
基于以上问题,我会在本片文章中详细讲解下Android端如何部署PaddleOCR训练的新模型。
准备工作
为了不占用过多篇幅,这里不讲解Android studio如何下载和SDK配置,请自行查找资料。
1、准备一个Linux系统并安装Python 3.7或3.8
2、Android Studio 配置 NDK ,请根据 Android Studio 用户指南中的安装及配置 NDK 和 CMake 内容,预先配置好 NDK 。您可以选择最新的 NDK 版本,或者使用 Paddle Lite 预测库版本一样的 NDK。
3、下载官方提供的android_demo并导入Android studio中,然后运行会自动下载OpenCV和PaddleLite包,如下图所示:
PaddleOCR/deploy/android_demo at release/2.5 · PaddlePaddle/PaddleOCR (github.com)
部署新模型
1、确定PaddleLite版本
在android_demo下载界面确认推荐的PaddleLite版本,这里推荐的是v2.10版本
2、使用PaddleLite转换新模型为nb模型
在Linux上下载上面推荐的PaddleLite版本的代码
git clone -b release/v2.10 https://github.com/PaddlePaddle/Paddle-Lite.git
然后切换Paddle-Lite目录编译PaddleLite
./lite/tools/build.sh build_optimize_tool
将新模型如下放置:
在Paddle-Lite目录下使用这个切换命令:
cd build.opt/lite/api/
开始转换新模型为nb模型
./opt --model_file=../../../ocr/ch_db_mv3_sfz/inference.pdmodel --param_file=../../../ocr/ch_db_mv3_sfz/inference.pdiparams --optimize_out=../../../ocr/ch_db_mv3_sfz/opt --valid_targets=arm --optimize_out_type=naive_buffer
在上图中就可以看到新的nb模型了。
3、替换android studio中的老模型
将图中的nb模型替换成我们新训练的nb模型,到这一步,我们的新模型部署就完成了。
开篇问题解答
1、上述步骤中已经解答了第一个问题
2、替换android项目中的PaddleLite代码,官方已经给我们编译好了,不需要我们再进行编译直接下载即可:https://github.com/PaddlePaddle/Paddle-Lite/releases/tag/v2.10
下载armv7和armv8两个版本的
除了红框中的文件,其他都替换成我们从图中下载的,PaddlePredictor.jar和include中的代码只用替换一次,armv7或者armv8中的一个即可
3、修改包名中,native.cpp中也需要同步修改,否则项目将启动不起来。
将官方的_com_baidu_paddle_lite_demo_ocr_替换成我们自己的包名,如_com_yangy_ocr_,如下截图:
总结
相当来讲,PaddleOCR新模型Android端部署还是比较简单的,官方提供的教程都有,只是需要大量时间来学习和总结,还有一篇文章是关于如何将官方提供的代码转换成aar包,欢迎大家阅读,共同进步,感谢支持。