Skip to content

Commit 62fc737

Browse files
[doc] java_demo and python_demo to v2.10 (#7246)
* test=develop, test=document_fix
1 parent cbaee4d commit 62fc737

File tree

2 files changed

+225
-165
lines changed

2 files changed

+225
-165
lines changed

docs/quick_start/java_demo.md

Lines changed: 97 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,88 @@
11
# Java 完整示例
22

3-
本章节包含2部分内容:(1) [Java 示例程序](java_demo.html#id1);(2) [Java 应用开发说明](java_demo.html#id8)
3+
## 概述
44

5-
## Java 示例程序
5+
本教程提供了 Paddle Lite 执行推理的示例程序,通过输入、执行推理、打印推理结果的方式,演示了基于 Java API 接口的推理基本流程,用户能够快速了解 Paddle Lite 执行推理相关 API 的使用。
6+
本教程以 Android Studio 工程为案例,介绍 Java API 推理流程,工程文件夹为[lite/demo/java/android](https://github.com/PaddlePaddle/Paddle-Lite/blob/develop/lite/demo/java/android)。其中和 Java API 相关的代码在[lite/demo/java/android/PaddlePredictor/app/src/main/java/com/baidu/paddle/lite/MainActivity.java](https://github.com/PaddlePaddle/Paddle-Lite/blob/develop/lite/demo/java/android/PaddlePredictor/app/src/main/java/com/baidu/paddle/lite/MainActivity.java)文件中。
67

7-
本章节展示的所有Java 示例代码位于 [demo/java](https://github.com/PaddlePaddle/Paddle-Lite/tree/develop/lite/demo/java)
8+
9+
使用 Paddle Lite 执行推理主要包括以下步骤:
10+
11+
- 配置 config 信息:创建 MobileConfig ,用于配置模型路径、运行设备环境等相关信息
12+
13+
- 模型加载:通过 `setModelFromFile` 接口配置模型路径。
14+
15+
- 创建 predictor 对象:通过 `PaddlePredictor.createPaddlePredictor` 接口创建 PaddlePredictor 对象,完成模型解析和环境初始化。
16+
17+
- 输入数据:推理之前需要向输入 Tensor 中填充数据。即通过 `predictor.getInput(num)` 接口获取第 `num` 个输入 Tensor ,先做 `resize` 处理,给 Tensor 分配相应的空间;然后通过 `setData` 接口对 Tensor 进行赋值处理。(如果输入数据是图片,则需要进行预处理,再将预处理后的数据赋值给输入 tensor )
18+
19+
- 执行推理:使用 predictor 对象的成员函数 `run` 进行模型推理
20+
21+
- 输出数据:推理执行结束后,通过 `predictor.getOutput(num)` 接口获取第 `num` 个输出 Tensor。
22+
23+
其流程图如下:
24+
25+
26+
<p align=center> <img src = "http://bos.bj.bce-internal.sdns.baidu.com/agroup-bos-bj/bj-2e0a5c97eb8068c5d1254f475962a45462335d39"/></p>
27+
28+
29+
## Java 应用开发说明
30+
31+
Java 代码调用 Paddle-Lite 执行预测仅需五步:
32+
33+
(1) 设置 MobileConfig 信息
34+
35+
```java
36+
MobileConfig config = new MobileConfig();
37+
config.setModelDir(modelPath);
38+
config.setPowerMode(PowerMode.LITE_POWER_HIGH);
39+
config.setThreads(1);
40+
```
41+
42+
(2) 指定模型文件,创建 PaddlePredictor
43+
44+
```java
45+
PaddlePredictor predictor = PaddlePredictor.createPaddlePredictor(config);
46+
```
47+
48+
(3) 设置模型输入 (下面以第 i 个输入为 i 为例)
49+
50+
```java
51+
float[] inputBuffer = new float[10000];
52+
for (int i = 0; i < 10000; ++i) {
53+
inputBuffer[i] = i;
54+
}
55+
Tensor input = predictor.getInput(0);
56+
input.resize({100, 100});
57+
input.setData(inputBuffer);
58+
```
59+
60+
如果模型有多个输入,每一个模型输入都需要准确设置 shape 和 data。
61+
62+
(4) 执行预测
63+
64+
```java
65+
predictor.run();
66+
```
67+
68+
(5) 获得预测结果
69+
70+
```java
71+
Tensor output = predictor.getOutput(0);
72+
```
73+
详细的 Java API 说明文档位于[Java API](../api_reference/java_api_doc)。更多 Java 应用预测开发可以参考位于位于[Paddle-Lite-Demo](https://github.com/PaddlePaddle/Paddle-Lite-Demo)的工程示例代码。
74+
75+
76+
## Android Studio 工程 Java 示例程序
77+
78+
本章节展示的所有 Android Studio 工程代码位于 [demo/java](https://github.com/PaddlePaddle/Paddle-Lite/tree/develop/lite/demo/java) 。下面将要下载的预测库也已经包含了上述 Android Studio 工程。
879

980
### 1. 环境准备
1081

11-
要编译和运行Android Java 示例程序,你需要准备
82+
要编译和运行 Android Java 示例程序,你需准备
1283

13-
1. 一台armv7或armv8架构的安卓手机
14-
2. 一台装有AndroidStudio的开发机
84+
1. 一台 armv7 或 armv8 架构的安卓手机
85+
2. 一台装有 Android Studio 的开发机
1586

1687
### 2. 下载预编译的预测库
1788

@@ -21,12 +92,12 @@
2192

2293
| Arch |with_extra|arm_stl|with_cv|下载|
2394
|:-------:|:-----:|:-----:|:-----:|:-------:|
24-
|armv8|OFF|c++_static|OFF|[v2.8](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.8/inference_lite_lib.android.armv8.gcc.c++_static.tar.gz)|
95+
|armv8|OFF|c++_static|OFF|[v2.9](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.9/inference_lite_lib.android.armv8.gcc.c++_static.tar.gz)|
2596

2697
**解压后内容结构如下:**
2798

2899
```shell
29-
inference_lite_lib.android.armv8 Paddle-Lite 预测库
100+
inference_lite_lib.android.armv8.gcc.c++_static Paddle-Lite 预测库
30101
├── cxx C++ 预测库
31102
│   ├── include C++ 预测库头文件
32103
│   └── lib C++ 预测库文件
@@ -47,35 +118,37 @@ inference_lite_lib.android.armv8 Paddle-Lite 预测库
47118

48119
#### 自动化脚本方法
49120

50-
在Java Andriod Demo文件夹下,我们准备了一个脚本`prepare_demo.bash`,输入手机架构参数例如`arm64-v8a`即可自动打包所有预测部署所需文件
121+
在下载下来的预测库的`demo/java/android`文件夹下,为了让您更快上手,我们准备了一个脚本`prepare_demo.bash`,输入手机架构参数例如`arm64-v8a`即可自动准备好所有预测部署所需的文件
51122

52-
```
53-
cd inference_lite_lib.android.armv8/demo/java/android
123+
```shell
124+
cd inference_lite_lib.android.armv8.gcc.c++_static/demo/java/android
54125
bash prepare_demo.bash arm8
55126
```
56127

57-
以上命令自动进行了以下三步操作
128+
以上命令自动进行以下三步操作
58129

59-
1. 拷贝JNI动态链接库`libpaddle_lite_jni.so``PaddlePredictor/app/src/main/jniLibs/arm64-v8a/`
60-
2. 拷贝JAR包`PaddlePredictor.jar``PaddlePredictor/app/libs/`
130+
1. 拷贝 JNI 动态链接库`libpaddle_lite_jni.so``PaddlePredictor/app/src/main/jniLibs/arm64-v8a/`
131+
2. 拷贝 JAR 包`PaddlePredictor.jar``PaddlePredictor/app/libs/`
61132
3. 自动下载并解压所有模型文件,拷贝到`PaddlePredictor/app/src/main/assets/`
62133

63134
**注意:** 目前脚本输入手机架构参数仅支持 `arm7 | arm8 | armeabi-v7a | arm64-v8a`
64135

65136
#### 手动拷贝方法
66137

67-
(1) 把Java JNI动态链接库和Java JAR包拷贝进安卓demo程序文件夹下:
138+
如果你不想运行上面的脚本,你可以手动进行下面操作。
139+
140+
(1) 把 Java JNI 动态链接库和 Java JAR 包拷贝进安卓 demo 程序文件夹下:
68141

69142
```shell
70-
cd inference_lite_lib.android.armv8/demo/java/android
143+
cd inference_lite_lib.android.armv8.gcc.c++_static/demo/java/android
71144
# 请替换<架构文件夹>为手机架构名称,例如 arm64-v8a
72145
cp ../../../java/so/libpaddle_lite_jni.so PaddlePredictor/app/src/main/jniLibs/<架构文件夹>
73146
cp ../../../java/jar/PaddlePredictor.jar PaddlePredictor/app/libs/
74147
```
75148

76149
(2) 下载模型文件
77150

78-
下载以下5个模型,并解压缩到 `PaddlePredictor/app/src/main/assets` 文件夹中。解压之后,assets文件夹里要包含解压后的五个以`.nb`结尾的模型文件,但不需要保存原压缩`.tar.gz`文件。
151+
下载以下 5 个模型,并解压缩到 `PaddlePredictor/app/src/main/assets` 文件夹中。解压之后,assets文件夹里要包含解压后的五个以`.nb`结尾的模型文件,但不需要保存原压缩`.tar.gz`文件。
79152

80153
| 模型| 下载地址|
81154
| :-- | :-- |
@@ -85,15 +158,15 @@ cp ../../../java/jar/PaddlePredictor.jar PaddlePredictor/app/libs/
85158
| mobilenet_v2_relu_opt.nb| http://paddle-inference-dist.bj.bcebos.com/mobilenet_v2_relu_opt.nb.tar.gz |
86159
| resnet50_opt.nb| http://paddle-inference-dist.bj.bcebos.com/resnet50_opt.nb.tar.gz |
87160

88-
注意:模型要求为naive buffer格式,您可以通过 [opt工具](../user_guides/model_optimize_tool) 将Paddle模型转为naive buffer存储格式。
161+
注意:模型要求为 naive buffer 格式,您可以通过 [opt工具](../user_guides/model_optimize_tool) 将 Paddle 模型转为naive buffer存储格式。
89162

90163
### 4. 运行预测示例程序
91164

92-
1. 用AndroidStudio打开`inference_lite_lib.android.armv8/demo/java/android/PaddlePredictor`文件夹(需要联网),打开后工程会自动build完成
93-
2. 设置手机:手机USB连接电脑,打开`设置 -> 开发者模式 -> USB调试 -> 允许(授权)当前电脑调试手机`并确认AndroidStudio可以识别接入的手机设备
94-
3. 按下AndroidStudio的Run按钮,AndroidStudio会自动编译APP并安装到手机。在手机上打开安装成功的APP,大概会等10秒,然后看到类似以下输出:
165+
1. 用 Android Studio 打开`inference_lite_lib.android.armv8.gcc.c++_static/demo/java/android/PaddlePredictor`文件夹(需联网),打开后工程会自动 build 完成
166+
2. 设置手机:手机 USB 连接电脑,打开`设置 -> 开发者模式 -> USB调试 -> 允许(授权)当前电脑调试手机`并确认 Android Studio 可识别接入的手机设备
167+
3. 按下 Android Studio 的 Run 按钮,Android Studio 会自动编译 APP 并安装到手机。在手机上打开安装成功的 APP ,大概会等 10 秒,然后看到类似以下输出:
95168

96-
```
169+
```shell
97170
lite_naive_model output: 50.213173, -28.872887
98171
expected: 50.2132, -28.8729
99172

@@ -110,51 +183,6 @@ mobilenet_v2 test:true
110183
time: xxx ms
111184
```
112185

113-
该 demo 程序跑我们的 5 个模型,第一个模型结果将真正的头两个数字输出,并在第二行附上期望的正确值。你应该要看到他们的误差小于0.001。后面四个模型如果你看到 `test:true` 字样,说明模型输出通过了我们在 demo 程序里对其输出的测试。time 代表该测试花费的时间。
114-
115-
**注意:** 在这一步中,如果遇到Andriod Studio编译/安装失败等问题,请参考[Andriod示例](../demo_guides/android_app_demo.html#android-demo)中部署方法章节的详细步骤和注意事项。
116-
117-
## Java 应用开发说明
118-
119-
Java代码调用Paddle-Lite执行预测库仅需以下五步:
120-
121-
(1) 设置config信息
122-
123-
```java
124-
MobileConfig config = new MobileConfig();
125-
config.setModelDir(modelPath);
126-
config.setPowerMode(PowerMode.LITE_POWER_HIGH);
127-
config.setThreads(1);
128-
```
129-
130-
(2) 创建predictor
131-
132-
```java
133-
PaddlePredictor predictor = PaddlePredictor.createPaddlePredictor(config);
134-
```
135-
136-
(3) 设置模型输入 (下面以全一输入为例)
137-
138-
```java
139-
float[] inputBuffer = new float[10000];
140-
for (int i = 0; i < 10000; ++i) {
141-
inputBuffer[i] = i;
142-
}
143-
Tensor input = predictor.getInput(0);
144-
input.resize({100, 100});
145-
input.setData(inputBuffer);
146-
```
147-
148-
(4) 执行预测
149-
150-
```java
151-
predictor.run();
152-
```
153-
154-
(5) 获得预测结果
155-
156-
```java
157-
Tensor output = predictor.getOutput(0);
158-
```
186+
该 demo 程序跑 5 个模型,第一个模型结果将真正的头两个数字输出,并在第二行附上期望的正确值。你应该要看到他们的误差小于 0.001 。后面四个模型如果你看到 `test:true` 字样,说明模型输出通过了我们在 demo 程序里对其输出的测试。time 代表该测试花费的时间。
159187

160-
详细的Java API说明文档位于[Java API](../api_reference/java_api_doc)。更多Java应用预测开发可以参考位于位于[Paddle-Lite-Demo](https://github.com/PaddlePaddle/Paddle-Lite-Demo)的工程示例代码
188+
**注意:** 在这一步中,如果遇到 Andriod Studio 编译/安装失败等问题,请参考[Andriod示例](../demo_guides/android_app_demo.html#android-demo)中部署方法章节的详细步骤和注意事项

0 commit comments

Comments
 (0)