Java 完整示例
本章节展示的所有Java 示例代码位于 demo/java 。
要编译和运行Android Java 示例程序,你需要准备:
一台armv7或armv8架构的安卓手机
预测库下载界面位于,可根据您的手机型号选择合适版本。
以Android-ARMv8架构为例,可以下载以下版本:
解压后内容结构如下:
自动化脚本方法
在Java Andriod Demo文件夹下,我们准备了一个脚本,输入手机架构参数例如arm64-v8a
,即可自动打包所有预测部署所需文件。
cd inference_lite_lib.android.armv8/demo/java/android
bash prepare_demo.bash arm8
以上命令自动进行了以下三步操作:
拷贝JAR包
PaddlePredictor.jar
到PaddlePredictor/app/libs/
自动下载并解压所有模型文件,拷贝到
PaddlePredictor/app/src/main/assets/
注意: 目前脚本输入手机架构参数仅支持 。
手动拷贝方法
(1) 把Java JNI动态链接库和Java JAR包拷贝进安卓demo程序文件夹下:
cd inference_lite_lib.android.armv8/demo/java/android
# 请替换<架构文件夹>为手机架构名称,例如 arm64-v8a
cp ../../../java/so/libpaddle_lite_jni.so PaddlePredictor/app/src/main/jniLibs/<架构文件夹>
cp ../../../java/jar/PaddlePredictor.jar PaddlePredictor/app/libs/
(2) 下载模型文件
下载以下5个模型,并解压缩到 PaddlePredictor/app/src/main/assets
文件夹中。解压之后,assets文件夹里要包含解压后的五个以.nb
结尾的模型文件,但不需要保存原压缩.tar.gz
文件。
模型 | 下载地址 |
---|---|
inception_v4_simple_opt.nb | http://paddle-inference-dist.bj.bcebos.com/inception_v4_simple_opt.nb.tar.gz |
lite_naive_model_opt.nb | |
mobilenet_v1_opt.nb | http://paddle-inference-dist.bj.bcebos.com/mobilenet_v1_opt.nb.tar.gz |
mobilenet_v2_relu_opt.nb | |
resnet50_opt.nb | http://paddle-inference-dist.bj.bcebos.com/resnet50_opt.nb.tar.gz |
注意:模型要求为naive buffer格式,您可以通过 将Paddle模型转为naive buffer存储格式。
设置手机:手机USB连接电脑,打开,并确认AndroidStudio可以识别接入的手机设备。
该 demo 程序跑我们的 5 个模型,第一个模型结果将真正的头两个数字输出,并在第二行附上期望的正确值。你应该要看到他们的误差小于0.001。后面四个模型如果你看到 test:true
字样,说明模型输出通过了我们在 demo 程序里对其输出的测试。time 代表该测试花费的时间。
注意: 在这一步中,如果遇到Andriod Studio编译/安装失败等问题,请参考Andriod示例中部署方法章节的详细步骤和注意事项。
Java 应用开发说明
Java代码调用Paddle-Lite执行预测库仅需以下五步:
(1) 设置config信息
MobileConfig config = new MobileConfig();
config.setModelDir(modelPath);
config.setPowerMode(PowerMode.LITE_POWER_HIGH);
config.setThreads(1);
(2) 创建predictor
PaddlePredictor predictor = PaddlePredictor.createPaddlePredictor(config);
(3) 设置模型输入 (下面以全一输入为例)
(4) 执行预测
predictor.run();
(5) 获得预测结果
Tensor output = predictor.getOutput(0);
详细的Java API说明文档位于Java API。更多Java应用预测开发可以参考位于位于的工程示例代码。