README.md 2.8 KB
Newer Older
H
Huihuang Zheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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
# Java Android Demo

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

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

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

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

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

###编译:
首先在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 代表该测试花费的时间。