7
7
1 . 在本地环境安装好 Android Studio 工具,详细安装方法请见[ Android Stuido 官网] ( https://developer.android.com/studio ) 。
8
8
2 . 准备一部 Android 手机,并开启 USB 调试模式。开启方法: ` 手机设置 -> 查找开发者选项 -> 打开开发者选项和 USB 调试模式 `
9
9
10
- ** 注意** :如果您的 Android Studio 尚未配置 NDK ,请根据 Android Studio 用户指南中的[ 安装及配置 NDK 和 CMake ] ( https://developer.android.com/studio/projects/install-ndk ) 内容,预先配置好 NDK 。您可以选择最新的 NDK 版本,或者使用 FastDeploy Android 预测库版本一样的 NDK
11
-
12
10
## 部署步骤
13
11
14
12
1 . 目标检测 PicoDet Demo 位于 ` fastdeploy/examples/vision/detection/paddledetection/android ` 目录
15
13
2 . 用 Android Studio 打开 paddledetection/android 工程
16
14
3 . 手机连接电脑,打开 USB 调试和文件传输模式,并在 Android Studio 上连接自己的手机设备(手机需要开启允许从 USB 安装软件权限)
17
15
18
16
<p align =" center " >
19
- <img width =" 1280 " alt =" image " src =" https://user-images.githubusercontent.com/31974251/197168120-7f77fbb7-3850-44f0-b6fa-865a98951226 .png " >
17
+ <img width =" 1440 " alt =" image " src =" https://user-images.githubusercontent.com/31974251/203257262-71b908ab-bb2b-47d3-9efb-67631687b774 .png " >
20
18
</p >
21
19
22
20
> ** 注意:**
23
- >> 如果您在导入项目、编译或者运行过程中遇到 NDK 配置错误的提示,请打开 ` File > Project Structure > SDK Location ` ,修改 ` Andriod NDK location ` 为您本机配置的 NDK 所在路径。本工程默认使用的NDK版本为20.
24
- >> 如果您是通过 Andriod Studio 的 SDK Tools 下载的 NDK (见本章节"环境准备"),可以直接点击下拉框选择默认路径。
25
- >> 还有一种 NDK 配置方法,你可以在 ` paddledetection/android/local.properties ` 文件中手动完成 NDK 路径配置,如下图所示
26
- >> 如果以上步骤仍旧无法解决 NDK 配置错误,请尝试根据 Andriod Studio 官方文档中的[ 更新 Android Gradle 插件] ( https://developer.android.com/studio/releases/gradle-plugin?hl=zh-cn#updating-plugin ) 章节,尝试更新Android Gradle plugin版本。
21
+ >> 如果您在导入项目、编译或者运行过程中遇到 NDK 配置错误的提示,请打开 ` File > Project Structure > SDK Location ` ,修改 ` Andriod SDK location ` 为您本机配置的 SDK 所在路径。
27
22
28
- 4 . 点击 Run 按钮,自动编译 APP 并安装到手机。(该过程会自动下载预编译的 FastDeploy Android 库,需要联网)
23
+ 4 . 点击 Run 按钮,自动编译 APP 并安装到手机。(该过程会自动下载预编译的 FastDeploy Android 库 以及 模型文件 ,需要联网)
29
24
成功后效果如下,图一:APP 安装到手机;图二: APP 打开后的效果,会自动识别图片中的物体并标记;图三:APP设置选项,点击右上角的设置图片,可以设置不同选项进行体验。
30
25
31
- | APP 图标 | APP 效果 | APP设置项
26
+ | APP 图标 | APP 效果 | APP设置项
32
27
| --- | --- | --- |
33
- | ![ app_pic ] ( https://user-images.githubusercontent.com/31974251/197170082-a2bdd49d-60ea-4df0-af63-18ed898a746e .jpg ) | ![ app_res] ( https://user-images.githubusercontent.com/31974251/197169609-bb214af3-d6e7-4433-bb96-1225cddd441c.jpg ) | ![ app_setup] ( https://user-images.githubusercontent.com/31974251/197332983-afbfa6d5-4a3b-4c54-a528-4a3e58441be1.jpg ) |
28
+ | ![ app_pic] ( https://user-images.githubusercontent.com/31974251/203268599-c94018d8-3683-490a-a5c7-a8136a4fa284 .jpg ) | ![ app_res] ( https://user-images.githubusercontent.com/31974251/197169609-bb214af3-d6e7-4433-bb96-1225cddd441c.jpg ) | ![ app_setup] ( https://user-images.githubusercontent.com/31974251/197332983-afbfa6d5-4a3b-4c54-a528-4a3e58441be1.jpg ) |
34
29
35
- ## PicoDet Java API 说明
30
+ ### PicoDet Java API 说明
36
31
- 模型初始化 API: 模型初始化API包含两种方式,方式一是通过构造函数直接初始化;方式二是,通过调用init函数,在合适的程序节点进行初始化。PicoDet初始化参数说明如下:
37
32
- modelFile: String, paddle格式的模型文件路径,如 model.pdmodel
38
33
- paramFile: String, paddle格式的参数文件路径,如 model.pdiparams
@@ -56,30 +51,34 @@ public boolean init(String modelFile, String paramsFile, String configFile, Stri
56
51
// 直接预测:不保存图片以及不渲染结果到Bitmap上
57
52
public DetectionResult predict(Bitmap ARGB8888Bitmap );
58
53
// 预测并且可视化:预测结果以及可视化,并将可视化后的图片保存到指定的途径,以及将可视化结果渲染在Bitmap上
59
- public DetectionResult predict(Bitmap ARGB8888Bitmap , String savedImagePath, float scoreThreshold)
54
+ public DetectionResult predict(Bitmap ARGB8888Bitmap , String savedImagePath, float scoreThreshold);
55
+ public DetectionResult predict(Bitmap ARGB8888Bitmap , boolean rendering, float scoreThreshold); // 只渲染 不保存图片
60
56
```
61
57
- 模型资源释放 API:调用 release() API 可以释放模型资源,返回true表示释放成功,false表示失败;调用 initialized() 可以判断模型是否初始化成功,true表示初始化成功,false表示失败。
62
58
``` java
63
59
public boolean release(); // 释放native资源
64
60
public boolean initialized(); // 检查是否初始化成功
65
- ```
61
+ ```
62
+
66
63
- RuntimeOption设置说明
67
64
``` java
68
65
public void enableLiteFp16(); // 开启fp16精度推理
69
66
public void disableLiteFP16(); // 关闭fp16精度推理
70
67
public void setCpuThreadNum(int threadNum); // 设置线程数
71
68
public void setLitePowerMode(LitePowerMode mode); // 设置能耗模式
72
69
public void setLitePowerMode(String modeStr); // 通过字符串形式设置能耗模式
73
- public void enableRecordTimeOfRuntime(); // 是否打印模型运行耗时
74
70
```
75
71
76
72
- 模型结果DetectionResult说明
77
73
``` java
78
- public float [][] mBoxes; // [n,4] 检测框 (x1,y1,x2,y2)
79
- public float [] mScores; // [n] 得分
80
- public int [] mLabelIds; // [n] 分类ID
81
- public boolean initialized(); // 检测结果是否有效
74
+ public class DetectionResult {
75
+ public float [][] mBoxes; // [n,4] 检测框 (x1,y1,x2,y2)
76
+ public float [] mScores; // [n] 每个检测框得分(置信度,概率值)
77
+ public int [] mLabelIds; // [n] 分类ID
78
+ public boolean initialized (); // 检测结果是否有效
79
+ }
82
80
```
81
+ 其他参考:C++/Python对应的DetectionResult说明: [ api/vision_results/detection_result.md] ( https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/api/vision_results/detection_result.md )
83
82
84
83
- 模型调用示例1:使用构造函数以及默认的RuntimeOption
85
84
``` java
@@ -125,32 +124,28 @@ String configFile = "picodet_s_320_coco_lcnet/infer_cfg.yml";
125
124
RuntimeOption option = new RuntimeOption ();
126
125
option. setCpuThreadNum(2 );
127
126
option. setLitePowerMode(LitePowerMode . LITE_POWER_HIGH );
128
- option. enableRecordTimeOfRuntime();
129
127
option. enableLiteFp16();
130
128
// 使用init函数初始化
131
129
model. init(modelFile, paramFile, configFile, option);
132
130
// Bitmap读取、模型预测、资源释放 同上 ...
133
131
```
134
- 更详细的用法请参考 [ MainActivity] ( ./app/src/main/java/com/baidu/paddle/fastdeploy/examples/MainActivity.java#L207 ) 中的用法
135
-
136
- ## 替换 FastDeploy 预测库和模型
137
- 替换FastDeploy预测库和模型的步骤非常简单。预测库所在的位置为 ` app/libs/fastdeploy-android-xxx-shared ` ,其中 ` xxx ` 表示当前您使用的预测库版本号。模型所在的位置为,` app/src/main/assets/models/picodet_s_320_coco_lcnet ` 。
138
- - 替换FastDeploy预测库的步骤:
139
- - 下载或编译最新的FastDeploy Android预测库,解压缩后放在 ` app/libs ` 目录下;
140
- - 修改 ` app/src/main/cpp/CMakeLists.txt ` 中的预测库路径,指向您下载或编译的预测库路径。如:
141
- ``` cmake
142
- set(FastDeploy_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/fastdeploy-android-xxx-shared")
143
- ```
132
+ 更详细的用法请参考 [ DetectionMainActivity] ( ./app/src/main/java/com/baidu/paddle/fastdeploy/app/examples/detection/DetectionMainActivity.java ) 中的用法
133
+
134
+ ## 替换 FastDeploy SDK和模型
135
+ 替换FastDeploy预测库和模型的步骤非常简单。预测库所在的位置为 ` app/libs/fastdeploy-android-sdk-xxx.aar ` ,其中 ` xxx ` 表示当前您使用的预测库版本号。模型所在的位置为,` app/src/main/assets/models/picodet_s_320_coco_lcnet ` 。
136
+ - 替换FastDeploy Android SDK: 下载或编译最新的FastDeploy Android SDK,解压缩后放在 ` app/libs ` 目录下;详细配置文档可参考:
137
+ - [ 在 Android 中使用 FastDeploy Java SDK] ( ../../../../../java/android/ )
138
+
144
139
- 替换PicoDet模型的步骤:
145
140
- 将您的PicoDet模型放在 ` app/src/main/assets/models ` 目录下;
146
141
- 修改 ` app/src/main/res/values/strings.xml ` 中模型路径的默认值,如:
147
142
``` xml
148
143
<!-- 将这个路径指修改成您的模型,如 models/picodet_l_320_coco_lcnet -->
149
- <string name =" MODEL_DIR_DEFAULT " >models/picodet_s_320_coco_lcnet</string >
150
- <string name =" LABEL_PATH_DEFAULT " >labels/coco_label_list.txt</string >
144
+ <string name =" DETECTION_MODEL_DIR_DEFAULT " >models/picodet_s_320_coco_lcnet</string >
145
+ <string name =" DETECTION_LABEL_PATH_DEFAULT " >labels/coco_label_list.txt</string >
151
146
```
152
147
153
- ## 如何通过 JNI 在 Native 层接入 FastDeploy C++ API ?
154
- 如果您对如何通过JNI来接入FastDeploy C++ API感兴趣,可以参考以下内容:
155
- - [ app/src/main/cpp 代码实现 ] ( ./app/src/main/cpp / )
148
+ ## 更多参考文档
149
+ 如果您想知道更多的FastDeploy Java API文档以及如何通过JNI来接入FastDeploy C++ API感兴趣,可以参考以下内容:
150
+ - [ 在 Android 中使用 FastDeploy Java SDK ] ( ../../../../../java/android / )
156
151
- [ 在 Android 中使用 FastDeploy C++ SDK] ( ../../../../../docs/cn/faq/use_cpp_sdk_on_android.md )
0 commit comments