Android的调用中,我们采用NDK调用C++的接口的代码。NDK的使用可以参照NDK官网或其他博客的教程,这里我们主要展示如何将我们的LAC模型集成到Android应用中
- 我们编译了一个APK安装包
lac_demo.apk
,可在release界面下载文件、安装到Android手机中进行测试,目前该demo仅集成了armeabi-v7a或arm64-v8a的库。
- 下载代码后,可直接使用Android Studio打开testlac这个文件夹的项目,编译运行该项目即可直接生成一个Android手机的apk文件(支持armeabi-v7a或arm64-v8a)。
- 项目依赖于NDK和CMake进行编译,如果编译过程中提示NDK配置有误,可参照此处进行安装配置:
- 安装:依次打开Tools>SDK Manager>SDK Tools,勾选LLDB、CMake和NDK进行下载
- 配置:打开File > Project Structure > SDK Location,选择默认NDK的路径
LAC模型是使用Paddle训练所得的模型,若要在移动端的调用自己训练的Paddle模型,需要进行以下两项工作
- 集成依赖库PaddleLite,该库Paddle为移动端调用模型所定制的轻量库,并集成模型压缩和优化等相关功能
- 为了适配移动端设备,还需要使用PaddleLite的工具对模型进行优化
testlac
项目仅支持armeabi-v7a和arm64-v8a是因为在该项目中仅集成了armeabi-v7a和arm64-v8a的PaddleLite依赖库,即testlac项目中jniLibs中的文件。如需更多平台依赖库的支持,需要集成对应的libs文件:
- 直接下载:https://paddle-lite.readthedocs.io/zh/latest/user_guides/release_lib.html
- 自行编译:https://paddle-lite.readthedocs.io/zh/latest/user_guides/source_compile.html
下载或编译完成后,参照示例将其放于testlac项目的jniLibs文件夹,同时修改build.gradle中ndk的abiFilters选项,即可完成其他框架的支持。
注:PaddleLite预测库的Libs链接需要在CMakeLists.txt文件中声明,如需在自己项目中进行集成,可参考testlac项目中CMakeLists.txt文件的写法。
为了适配于移动端设备,我们需要通过PaddleLite的工具对模型进行优化。具体模型优化可以参考PaddleLite官网的介绍:模型优化工具 opt,在此我们给出一个简单的使用示例:
-
到官网中下载优化工具opt
-
执行下列命令生成优化后的模型
# valid_targets可选(arm|opencl|x86|npu|xpu) ./opt --model_dir=./lac_model/model \ --valid_targets=arm \ --optimize_out_type=naive_buffer \ --optimize_out=lac_model_opt
经过转换后的模型,对应于testlac项目assets目录下的lac_model/model.nb文件。
-
我们在release界面提供了经过优化转换的LAC模型
models_android.zip
,以供大家下载使用,解压后其中包含三个不同的模型:seg_model
:仅实现分词的模型,体积小lac_model
:实现分词、词性标注、实体识别于一体的词法分析模型laclite_model
:lac_model
的轻量化版本,效果会稍差于lac_model
- 目前PaddleLite已支持直接使用Java接口调用模型,而不用通过jni的形式调用c++接口,具体可参照官网提供的Android Demo进行修改
- PaddleLite官网也提供了iOS Demo,有需要的同学可参照iOS Demo实现在iOS上的应用