README.md 2.9 KB
Newer Older
H
Huihuang Zheng 已提交
1 2 3 4 5 6 7
# Java Android Demo

要编译和跑起 ./android 文件夹下的 Android demo 程序 PaddlePredictor,你需要准备:

1. 一台能运行安卓程序的安卓手机
2. 一台带有AndroidStudio的开发机

8
## 手动编译
H
Huihuang Zheng 已提交
9

H
Huihuang Zheng 已提交
10
### 编译:
H
Huihuang Zheng 已提交
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
首先在PaddleLite的开发Docker镜像中,拉取最新PaddleLite代码,编译对应你手机架构的预测库,
下面我们以arm8 架构举例。进入paddlelite 目录,运行以下cmake 和make 命令:

```
mkdir -p build.lite.android.arm8.gcc
cd build.lite.android.arm8.gcc

cmake .. \
-DWITH_GPU=OFF \
-DWITH_MKL=OFF \
-DWITH_LITE=ON \
-DLITE_WITH_JAVA=ON \
-DLITE_WITH_CUDA=OFF \
-DLITE_WITH_X86=OFF \
-DLITE_WITH_ARM=ON \
-DLITE_WITH_LIGHT_WEIGHT_FRAMEWORK=ON \
-DWITH_TESTING=ON \
-DARM_TARGET_OS=android -DARM_TARGET_ARCH_ABI=armv8 -DARM_TARGET_LANG=gcc

30
make publish_inference_lite -j 4
H
Huihuang Zheng 已提交
31 32 33 34 35 36 37 38 39 40
```

Make完成后查看要存在`build.lite.android.arm8.gcc/paddle/fluid/lite/api/android/jni/libpaddle_lite_jni.so`
这个文件。该文件为PaddleLite c++ 动态链接库。接下来Android Java 代码会load 这个库来跑c++ 代码

### 把.so动态库拷贝进安卓demo程序:
把本文件夹下 demo/PaddlePredictor 载入到AndroidStudio。把上一步提到的`libpaddle_lite_jni.so`
拷贝进 `PaddlePredictor/app/src/main/jinLibs/所有架构文件夹下` 比如文件夹arm8里要包含该 .so文件:

### 把demo使用到的模型文件拷贝进安卓程序:
41 42 43 44 45 46 47 48 49 50
下载我们的5个模型文件,并复制到 `PaddlePredictor/app/src/main/assets` 这个文件夹中
需要拷贝的模型文件和下载地址:

    inception_v4_simple http://paddle-inference-dist.bj.bcebos.com/inception_v4_simple.tar.gz
    lite_naive_model    http://paddle-inference-dist.bj.bcebos.com/lite_naive_model.tar.gz
    mobilenet_v1        http://paddle-inference-dist.bj.bcebos.com/mobilenet_v1.tar.gz
    mobilenet_v2_relu   http://paddle-inference-dist.bj.bcebos.com/mobilenet_v2_relu.tar.gz
    resnet50            http://paddle-inference-dist.bj.bcebos.com/resnet50.tar.gz

下载完后,assets文件夹里要包含上面五个模型文件夹。
H
Huihuang Zheng 已提交
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

## 运行 Android 程序结果
以上准备工作完成,就可以开始Build ,安装,和跑安卓demo程序。当你运行PaddlePredictor 程序时,大概会等10秒,
然后看到类似以下字样:

    lite_naive_model output: 50.213173, -28.872887
    expected: 50.2132, -28.8729

    inception_v4_simple test:true
    time: 2078 ms

    resnet50 test:true
    time: 2078 ms

    mobilenet_v1 test:true
    time: 2078 ms

    mobilenet_v2 test:true
    time: 2078 ms

该 demo 程序跑我们的 5 个模型,第一个模型结果将真正的头两个数字输出,并在第二行附上期望的正确值。你应该要
看到他们的误差小于0.001。后面四个模型如果你看到 test:true 字样,说明模型输出通过了我们在 demo 程序里对其输出
的测试。time 代表该测试花费的时间。