README.md 2.8 KB
Newer Older
H
Huihuang Zheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# Java Android Demo

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

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

## 如果你使用我们的 cmake 生成 demo 程序,

可以直接把 `${INFER_LITE_PUBLISH_ROOT}/demo/java/android/PaddlePredictor`  载入你的AndroidStudio,
运行,查看本文末尾的程序运行显示结果。

## 手动编译(给测试人员需要更新 demo 模型或 .so 库可阅读)

H
Huihuang Zheng 已提交
15
### 编译:
H
Huihuang Zheng 已提交
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
首先在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

make -j 4
```

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使用到的模型文件拷贝进安卓程序:
`build.lite.android.arm8.gcc/third_party/install` 文件夹下,把以下我们的模型文件夹拷贝进
`PaddlePredictor/app/src/main/assets` 这个文件夹
需要拷贝的模型文件:

    inception_v4_simple
    lite_naive_model
    mobilenet_v1
    mobilenet_v2_relu
    resnet50

## 运行 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 代表该测试花费的时间。