PaddleDetection学习1——使用Paddle-Lite在 Android 上实现实时的目标检测功能

在 Android 上使用Paddle-Lite实现实时的目标检测功能

  • [1 环境准备](#1 环境准备)
    • [1.1 安装Android Studio](#1.1 安装Android Studio)
      • [1.1.1 安装JAVA JDK](#1.1.1 安装JAVA JDK)
      • [1.1.2 Android Studio 安装步骤](#1.1.2 Android Studio 安装步骤)
      • [1.1.3 Android Studio 配置NDK](#1.1.3 Android Studio 配置NDK)
    • [1.2 Android 手机](#1.2 Android 手机)
  • [2 部署步骤](#2 部署步骤)
    • [2.1 下载Paddle-Lite-Demo](#2.1 下载Paddle-Lite-Demo)
    • [2.2 打开 yolo_detection_demo项目](#2.2 打开 yolo_detection_demo项目)
      • [2.2.1 修改build.gradle,配置国内镜像仓库](#2.2.1 修改build.gradle,配置国内镜像仓库)
      • [2.2.2 NDK 配置错误问题](#2.2.2 NDK 配置错误问题)
      • [2.2.3 gradle.properties文件配置](#2.2.3 gradle.properties文件配置)
      • [2.2.4 NDK版本选择](#2.2.4 NDK版本选择)
    • [2.3 部署模型到移动端](#2.3 部署模型到移动端)

1 环境准备

1.1 安装Android Studio

参考安装教程创建目录:

GAndroidFile:程序安装文件存放位置

GAndroidProject:项目文件存放位置

jdk:JAVA JDK安装包文件存放位置

sdk:Android SDK文件存放位置

1.1.1 安装JAVA JDK

根据电脑的操作系统下载对应的JDK,下载地址:JAVA JDK

双击进行安装,安装地址修改为前文所创建的jdk目录。

1.1.2 Android Studio 安装步骤

(1)下载地址:Android Studio

(2)双击下载的android-studio-2023.1.1.27-windows.exe。

(3)勾选上Android virtual Device(虚拟机安装文件,建议勾选)。

(4)选择安装路径GAndroidFile。

(5)安装完成后,提示找不到Android sdk列表,选择Cancel(退出)

(6)选择之前创建好的sdk路径安装Android sdk。

1.1.3 Android Studio 配置NDK

据 Android Studio 用户指南中的安装及配置 NDK 和 CMake 内容,预先配置好 NDK。选择最新的 NDK 版本,或者使用 Paddle Lite 预测库版本一样的 NDK。

1.2 Android 手机

准备一部 Android 手机,并开启 USB 调试模式。开启方法: 手机设置 -> 查找开发者选项 -> 打开开发者选项和 USB 调试模式

2 部署步骤

参考目标检测 C++ API Demo 使用指南

2.1 下载Paddle-Lite-Demo

下载链接

目标检测 Demo 位于 Paddle-Lite-Demo/object_detection/android/app/cxx/yolo_detection_demo 目录

2.2 打开 yolo_detection_demo项目

2.2.1 修改build.gradle,配置国内镜像仓库

将原工程build.gradle文件中的

bash 复制代码
repositories {
    google()
    jcenter()
}

全部替换成对应的国内镜像加速仓库,修改后文件如下

bash 复制代码
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/google/' }
        maven { url 'https://maven.aliyun.com/repository/jcenter/'}
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/google/' }
        maven { url 'https://maven.aliyun.com/repository/jcenter/'}
        
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

2.2.2 NDK 配置错误问题

在导入项目、编译或者运行过程中遇到 NDK 配置错误的提示,请打开 File > Project Structure > SDK Location,修改 Andriod NDK location 为本机配置的 NDK 所在路径。

(如是是通过 Andriod Studio 的 SDK Tools 下载的 NDK,可以直接点击下拉框选择默认路径。 还有一种 NDK 配置方法,可以在 yolo_detection_demo/local.properties 文件中手动完成 NDK 路径配置,如下图所示。如果以上步骤仍旧无法解决 NDK 配置错误,请尝试根据 Andriod Studio 官方文档中的更新 Android Gradle 插件章节,尝试更新Android Gradle plugin版本。)

2.2.3 gradle.properties文件配置

问题:Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module

在项目的gradle.properties文件,在org.gradle.jvmargs配置进行修改:

bash 复制代码
-add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
  --add-opens=java.base/java.lang=ALL-UNNAMED \
  --add-opens=java.base/java.lang.reflect=ALL-UNNAMED -\
  -add-opens=java.base/java.io=ALL-UNNAMED \
  --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED

2.2.4 NDK版本选择

问题:invalid local symbol '__bss_start__' in global part of symbol table

NDK版本不同导致的,我这里用的是NDK版本是26.1.10909125,改为21.1.6352462后就能编译通过了。用第三方编译好了的库文件还有版本匹配的风险。

2.3 部署模型到移动端

手机连接电脑,打开 USB 调试和文件传输模式,并在 Android Studio 上连接自己的手机设备(手机需要开启允许从 USB 安装软件权限)

点击 Run 按钮,自动编译 APP 并安装到手机。(该过程会自动下载 Paddle Lite 预测库和模型,需要联网) 成功后效果如下,图一:APP 安装到手机 图二: APP 打开后的效果,会自动识别图片中的物体并标记。

相关推荐
半夏知半秋1 天前
docker常用指令整理
运维·笔记·后端·学习·docker·容器
程序员码歌1 天前
短思考第263天,每天复盘10分钟,胜过盲目努力一整年
android·前端·后端
安卓兼职framework应用工程师1 天前
Android 10.0 按键智能机按键连续响两次的异常处理
android·audio·audioservice·按键音·按键声音
蒸蒸yyyyzwd1 天前
网络编程——threadpool.h学习笔记
笔记·学习
浪子不回头4151 天前
SGLang学习笔记
人工智能·笔记·学习
studyForMokey1 天前
【Android 项目】个人学习demo随笔
android
吃喝不愁霸王餐APP开发者1 天前
利用责任链模式解耦多平台(美团/饿了么)霸王餐接口的适配逻辑
android·责任链模式
百***78751 天前
Step-Audio-2 轻量化接入全流程详解
android·java·gpt·php·llama
deng-c-f1 天前
Linux C/C++ 学习日记(53):原子操作(二):实现shared_ptr
开发语言·c++·学习