# 目标检测 C++ API Demo 使用指南
在 Android 上实现实时的目标检测功能,此 Demo 有很好的的易用性和开放性,如在 Demo 中跑自己训练好的模型等。
本文主要介绍目标检测 Demo 运行方法和如何在更新模型/输入/输出处理下,保证目标检测 demo 仍可继续运行。
## 如何运行目标检测 Demo
### 环境准备
1. 在本地环境安装好 Android Studio 工具,详细安装方法请见[Android Stuido 官网](https://developer.android.com/studio)。
2. 准备一部 Android 手机,并开启 USB 调试模式。开启方法: `手机设置 -> 查找开发者选项 -> 打开开发者选项和 USB 调试模式`
**注意**:如果您的 Android Studio 尚未配置 NDK ,请根据 Android Studio 用户指南中的[安装及配置 NDK 和 CMake ](https://developer.android.com/studio/projects/install-ndk)内容,预先配置好 NDK 。您可以选择最新的 NDK 版本,或者使用
Paddle Lite 预测库版本一样的 NDK
### 部署步骤
1. 目标检测 Demo 位于 `Paddle-Lite-Demo/object_detection/android/app/cxx/yolov5n_detection_demo` 目录
2. 用 Android Studio 打开 yolov5n_detection_demo 工程
3. 手机连接电脑,打开 USB 调试和文件传输模式,并在 Android Studio 上连接自己的手机设备(手机需要开启允许从 USB 安装软件权限)
<p align="center">
<img src="https://paddlelite-demo.bj.bcebos.com/demo/object_detection/docs_img/android/run_app2.jpg"/>
</p>
> **注意:**
>> 如果您在导入项目、编译或者运行过程中遇到 NDK 配置错误的提示,请打开 ` File > Project Structure > SDK Location`,修改 `Andriod NDK location` 为您本机配置的 NDK 所在路径。
>> 如果您是通过 Andriod Studio 的 SDK Tools 下载的 NDK (见本章节"环境准备"),可以直接点击下拉框选择默认路径。
>> 还有一种 NDK 配置方法,你可以在 `yolov5n_detection_demo/local.properties` 文件中手动完成 NDK 路径配置,如下图所示
>> 如果以上步骤仍旧无法解决 NDK 配置错误,请尝试根据 Andriod Studio 官方文档中的[更新 Android Gradle 插件](https://developer.android.com/studio/releases/gradle-plugin?hl=zh-cn#updating-plugin)章节,尝试更新Android Gradle plugin版本。
4. 点击 Run 按钮,自动编译 APP 并安装到手机。(该过程会自动下载 Paddle Lite 预测库和模型,需要联网)
成功后效果如下,图一:APP 安装到手机 图二: APP 打开后的效果,会自动识别图片中的物体并标记
| APP 图标 | APP 效果 |
| --- | --- |
| ![app_pic](https://paddlelite-demo.bj.bcebos.com/demo/object_detection/docs_img/android/app_pic4.jpg) | ![app_res](https://paddlelite-demo.bj.bcebos.com/demo/object_detection/docs_img/android/app_run_res3.jpg) |
## 更新预测库
本项目基于Paddle-Lite的分支release/v2.11进行开发。
* Paddle Lite 项目:https://github.com/PaddlePaddle/Paddle-Lite
* 参考 [Paddle Lite 源码编译文档](https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html),编译 Android 预测库
* 编译最终产物位于 `build.lite.xxx.xxx.xxx` 下的 `inference_lite_lib.xxx.xxx`
* 替换 java 库
* jar 包
将生成的 `build.lite.android.xxx.gcc/inference_lite_lib.android.xxx/java/jar/PaddlePredictor.jar` 替换 Demo 中的 `Paddle-Lite-Demo/object_detection/andrdoid/app/cxx/yolov5n_detection_demo/app/PaddleLite/java/PaddlePredictor.jar`
* Java so
* armeabi-v7a
将生成的 `build.lite.android.armv7.gcc/inference_lite_lib.android.armv7/java/so/libpaddle_lite_jni.so` 库替换 Demo 中的 `Paddle-Lite-Demo/object_detection/andrdoid/app/cxx/yolov5n_detection_demo/app/PaddleLite/java/libs/armeabi-v7a/libpaddle_lite_jni.so`
* arm64-v8a
将生成的 `build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/java/so/libpaddle_lite_jni.so` 库替换 Demo 中的 `Paddle-Lite-Demo/object_detection/andrdoid/app/cxx/yolov5n_detection_demo/app/PaddleLite/java/libs/arm64-v8a/libpaddle_lite_jni.so`
* 替换 c++ 库
* 头文件
将生成的 `build.lite.android.xxx.gcc/inference_lite_lib.android.xxx/cxx/include` 文件夹替换 Demo 中的 `Paddle-Lite-Demo/object_detection/andrdoid/app/cxx/yolov5n_detection_demo/app/PaddleLite/cxx/include`
* armeabi-v7a
将生成的 `build.lite.android.armv7.gcc/inference_lite_lib.android.armv7/cxx/libs/libpaddle_lite_api_shared.so` 库替换 Demo 中的 `Paddle-Lite-Demo/object_detection/andrdoid/app/cxx/yolov5n_detection_demo/app/PaddleLite/cxx/libs/armeabi-v7a/libpaddle_lite_api_shared.so`
* arm64-v8a
将生成的 `build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/cxx/libs/libpaddle_lite_api_shared.so` 库替换 Demo 中的 `Paddle-Lite-Demo/object_detection/andrdoid/app/cxx/yolov5n_detection_demo/app/PaddleLite/cxx/libs/arm64-v8a/libpaddle_lite_api_shared.so`
## Demo 内容介绍
先整体介绍下目标检测 Demo 的代码结构,然后再从 Java 和 C++ 两部分简要的介绍 Demo 每部分功能.
<p align="center"><img src="https://paddlelite-demo.bj.bcebos.com/demo/object_detection/docs_img/android/predict3.jpg"/></p>
1. `Native.java`: Java 预测代码
```shell
# 位置:
yolov5n_detection_demo/app/src/main/java/com/baidu/paddle/lite/demo/object_detection/Native.java
```
2. `Native.cc`: Jni 预测代码用于 Java 与 C++ 语言传递信息
```shell
# 位置:
yolov5n_detection_demo/app/src/main/cpp/Native.cc
```
3. `Pipeline.cc`: C++ 预测代码
```shell
# 位置:
yolov5n_detection_demo/app/src/main/cpp/Pipeline.cc
```
4. `model.nb` : 模型文件 (opt 工具转化后 Paddle Lite 模型), `coco_label_list.txt`:训练模型时的 `labels` 文件
```shell
# 位置:
yolov5n_detection_demo/app/src/main/assets/models/yolov5n_coco_for_gpu/model.nb
yolov5n_detection_demo/app/src/main/assets/models/yolov5n_coco_for_cpu/model.nb
yolov5n_detection_demo/app/src/main/assets/labels/coco_label_list.txt
```
5. `libpaddle_lite_api_shared.so`:Paddle Lite C++ 预测库
```shell
# 位置
yolov5n_detection_demo/app/PaddleLite/cxx/libs/arm64-v8a/libpaddle_lite_api_shared.so
# 如果要替换动态库 so,则将新的动态库 so 更新到此目录下
```
6. `build.gradle` : 定义编译过程的 gradle 脚本。(不用改动,定义了自动下载 Paddle Lite 预测和模型的过程)
```shell
# 位置
yolov5n_detection_demo/app/build.gradle
# 如果需要手动更新模型和预测库,则可将 gradle 脚本中的 `download*` 接口注释即可
```
7. `CMakeLists.txt` : C++ 预测库代码的编译脚本,用于生成 jni 的动态库 `lib_Native.so`
```shell
# 位置
yolov5n_detection_demo/app/cpp/CMakeLists.txt
# 如果有cmake 编译选项更新,可以在 CMakeLists.txt 进行修改即可
```
### Java 端
* 模型存放,将下载好的模型解压存放在 `app/src/assets/models` 目录下
* common Java 包
在 `app/src/java/com/baidu/paddle/lite/demo/common` 目录下,实现摄像头和框架的公共处理,一般不用修改。其中,Utils.java 用于存放一些公用的且与 Java 基类无关的功能,例如模型拷贝、字符串类型转换等
* object_detection Java 包
在 `app/src/java/com/baidu/paddle/lite/demo/object_detection` 目录下,实现 APP 界面消息事件和 Java/C++ 端代码互传的桥梁功能
* MainActivity
实现 APP 的创建、运行、释放功能
重点关注 `checkAndUpdateSettings`和 `onTextureChanged` 函数,实现 APP 界面值向 C++ 端值互传及预测处理流程
```java
public void checkAndUpdateSettings() {
if (SettingsActivity.checkAndUpdateSettings(this)) {
String realModelDir = getCac
没有合适的资源?快使用搜索试试~ 我知道了~
PaddleLite for yolov5 部署android源码.zip
共529个文件
hpp:169个
xml:73个
h:65个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 103 浏览量
2024-05-01
17:01:52
上传
评论
收藏 166.62MB ZIP 举报
温馨提示
使用 yolov5 和 paddlelite 部署,解决了官方不匹配最新 pytorch yolov5 的问题
资源推荐
资源详情
资源评论
收起资源包目录
PaddleLite for yolov5 部署android源码.zip (529个子文件)
liblibprotobuf.a 67.03MB
liblibprotobuf.a 44.59MB
libIlmImf.a 38.05MB
libIlmImf.a 29.08MB
libopencv_dnn.a 10.56MB
libopencv_dnn.a 8.8MB
liblibwebp.a 6.11MB
libopencv_core.a 5.8MB
libopencv_core.a 5.78MB
libopencv_imgproc.a 5.41MB
libopencv_imgproc.a 5.03MB
libtbb.a 4.39MB
libopencv_calib3d.a 3.36MB
libtbb.a 3.18MB
liblibwebp.a 2.96MB
liblibtiff.a 2.93MB
liblibjpeg-turbo.a 2.82MB
libopencv_calib3d.a 2.54MB
liblibjasper.a 2.13MB
liblibjpeg-turbo.a 2.03MB
liblibtiff.a 1.93MB
liblibpng.a 1.78MB
libopencv_ml.a 1.51MB
libopencv_stitching.a 1.5MB
libopencv_ml.a 1.49MB
libopencv_features2d.a 1.37MB
libopencv_stitching.a 1.3MB
libopencv_photo.a 1.29MB
liblibjasper.a 1.25MB
libopencv_features2d.a 1.22MB
libopencv_imgcodecs.a 1.21MB
libopencv_photo.a 1.15MB
libopencv_imgcodecs.a 1.13MB
libopencv_flann.a 1.1MB
liblibpng.a 1.09MB
libopencv_flann.a 1.02MB
libtegra_hal.a 890KB
libtegra_hal.a 874KB
libopencv_videoio.a 871KB
libopencv_videoio.a 815KB
libopencv_objdetect.a 783KB
libopencv_objdetect.a 619KB
libopencv_video.a 611KB
libopencv_video.a 579KB
libittnotify.a 148KB
libittnotify.a 123KB
libopencv_highgui.a 95KB
libopencv_highgui.a 94KB
libcpufeatures.a 36KB
libcpufeatures.a 28KB
libquirc.a 25KB
libquirc.a 20KB
README.android 41B
gradlew.bat 2KB
executionHistory.bin 986KB
fileHashes.bin 158KB
classAnalysis.bin 88KB
feature_tests.bin 83KB
CMakeDetermineCompilerABI_CXX.bin 80KB
CMakeDetermineCompilerABI_C.bin 80KB
jarAnalysis.bin 77KB
taskHistory.bin 44KB
outputFiles.bin 25KB
resourceHashesCache.bin 18KB
feature_tests.bin 14KB
CMakeDetermineCompilerABI_CXX.bin 10KB
CMakeDetermineCompilerABI_C.bin 10KB
last-build.bin 1B
feature_tests.c 762B
feature_tests.c 762B
Pipeline.cc 15KB
Native.cc 5KB
Utils.cc 2KB
cmake.check_cache 86B
cmake.check_cache 86B
android.toolchain.cmake 86KB
OpenCVConfig.cmake 14KB
OpenCVConfig.cmake 14KB
OpenCVModules-release.cmake 14KB
OpenCVModules-release.cmake 14KB
OpenCVModules.cmake 11KB
OpenCVModules.cmake 11KB
CMakeCXXCompiler.cmake 6KB
CMakeCXXCompiler.cmake 6KB
CMakeCCompiler.cmake 4KB
CMakeCCompiler.cmake 3KB
OpenCVConfig.cmake 2KB
cmake_install.cmake 2KB
cmake_install.cmake 2KB
CMakeSystem.cmake 490B
CMakeSystem.cmake 490B
OpenCVConfig-version.cmake 433B
OpenCVConfig-version.cmake 433B
OpenCVConfig-version.cmake 433B
feature_tests.cxx 9KB
feature_tests.cxx 9KB
.gitignore 50B
.gitignore 8B
build.gradle 5KB
build.gradle 3KB
共 529 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
FL1768317420
- 粉丝: 4286
- 资源: 4728
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功