当前位置: 首页 > news >正文

模型部署:(三)安卓端部署Yolov8-v6.0目标检测项目全流程记录

模型部署:(三)安卓端部署Yolov8-v6.0目标检测项目全流程记录

  • 1、下载ncnn
  • 2、下载opencv-mobile
  • 4、依赖文件拷贝与配置
  • 5、修改相关配置文件
    • 1、修改yolo.cpp文件
    • 2、修改yolov8ncnn.cpp文件
    • 3、修改strings.xml文件
    • 3、设置程序默认打开后置/前置摄像头
  • 6、打包成APK包
  • 7、测试效果

1、下载ncnn

在这里插入图片描述

在这里插入图片描述

https://github.com/Tencent/ncnn/releases/tag/20240410

在这里插入图片描述

在这里插入图片描述
下载并解压
在这里插入图片描述

2、下载opencv-mobile

https://github.com/nihui/opencv-mobile

在这里插入图片描述

4、依赖文件拷贝与配置

文件拷贝:
将ncnn-20240410-android-vulkan解压后的四个文件复制到ncnn-android-yolov8\app\src\main\jni文件夹目录内

然后再将opencv-mobile-XYZ-android.zip解压后拷贝复制到ncnn-android-yolov8\app\src\main\jni文件夹目录内

文件拷贝完毕后如下所示:

在这里插入图片描述

配置文件修改:
修改后↓↓↓:
在这里插入图片描述

修改前↓↓↓
在这里插入图片描述

修改镜像源:
在这里插入图片描述
将build.gradle文件修改成如下内容:

// 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/gradle-plugin' }maven { url 'https://maven.aliyun.com/repository/public' }maven { url 'https://maven.aliyun.com/repository/central' }// 清华镜像(备用)maven { url 'https://mirrors.tuna.tsinghua.edu.cn/maven/google' }maven { url 'https://mirrors.tuna.tsinghua.edu.cn/maven/central' }mavenCentral()}dependencies {classpath 'com.android.tools.build:gradle:4.2.2'}
}allprojects {repositories {// 阿里云镜像maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/public' }maven { url 'https://maven.aliyun.com/repository/central' }// 清华镜像(备用)maven { url 'https://mirrors.tuna.tsinghua.edu.cn/maven/google' }maven { url 'https://mirrors.tuna.tsinghua.edu.cn/maven/central' }mavenCentral()}
}

完成如下配置:
在这里插入图片描述

在这里插入图片描述

在编译过程中出现如下提示:
在这里插入图片描述
然后点击

Change Gradle version in Gradle wrapper to 6.7.1 and re-import project

在这里插入图片描述

点击后会开始下载相关依赖,如果速度较慢可以

distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-6.7.1-bin.zip

如下所示,构建完毕:
在这里插入图片描述

5、修改相关配置文件

1、修改yolo.cpp文件

修改类别数量
在这里插入图片描述
修改模型名称
修改前:
在这里插入图片描述

修改后:
在这里插入图片描述
修改待检测类别标签:
在这里插入图片描述

2、修改yolov8ncnn.cpp文件

在相同位置下,有yolov8ncnn.cpp文件

修改前:
在这里插入图片描述
修改后:
在这里插入图片描述

3、修改strings.xml文件

在ncnn-android-yolov8\app\src\main\res\values目录下:

修改前:
在这里插入图片描述

修改后:

在这里插入图片描述

3、设置程序默认打开后置/前置摄像头

文件:ncnn-android-yolov8\app\src\main\java\com\tencent\yolov8ncnn\MainActivity.java
在这里插入图片描述

6、打包成APK包

异常报错处理:
在打包过程中会出现如下报错:

Build command failed.
Error while executing process D:\andeoidSDK\cmake\3.10.2.4988404\bin\ninja.exe with arguments {-C F:\Android_project\ncnn-android-yolov8-main\ncnn-android-yolov8\app\.cxx\cmake\debug\armeabi-v7a yolov8ncnn}
ninja: Entering directory `F:\Android_project\ncnn-android-yolov8-main\ncnn-android-yolov8\app\.cxx\cmake\debug\armeabi-v7a'
[1/4] Building CXX object CMakeFiles/yolov8ncnn.dir/yolov8ncnn.cpp.o
[2/4] Building CXX object CMakeFiles/yolov8ncnn.dir/ndkcamera.cpp.o
F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/ndkcamera.cpp:152:117: warning: format specifies type 'long' but the argument has type 'int64_t' (aka 'long long') [-Wformat]__android_log_print(ANDROID_LOG_WARN, "NdkCamera", "onCaptureSequenceCompleted %p %d %ld", session, sequenceId, frameNumber);~~~                        ^~~~~~~~~~~%lld
1 warning generated.
[3/4] Building CXX object CMakeFiles/yolov8ncnn.dir/yolo.cpp.o
[4/4] Linking CXX shared library F:\Android_project\ncnn-android-yolov8-main\ncnn-android-yolov8\app\build\intermediates\cmake\debug\obj\armeabi-v7a\libyolov8ncnn.so
FAILED: F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libyolov8ncnn.so 
cmd.exe /C "cd . && D:\andeoidSDK\ndk\21.4.7075529\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi24 --gcc-toolchain=D:/andeoidSDK/ndk/21.4.7075529/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=D:/andeoidSDK/ndk/21.4.7075529/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security   -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libyolov8ncnn.so -o F:\Android_project\ncnn-android-yolov8-main\ncnn-android-yolov8\app\build\intermediates\cmake\debug\obj\armeabi-v7a\libyolov8ncnn.so CMakeFiles/yolov8ncnn.dir/yolov8ncnn.cpp.o CMakeFiles/yolov8ncnn.dir/yolo.cpp.o CMakeFiles/yolov8ncnn.dir/ndkcamera.cpp.o  F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/armeabi-v7a/lib/libncnn.a F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/sdk/native/libs/armeabi-v7a/libopencv_core.a F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/sdk/native/libs/armeabi-v7a/libopencv_imgproc.a -lcamera2ndk -lmediandk -Wl,-wrap,__kmp_affinity_determine_capable F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/armeabi-v7a/lib/libglslang.a F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/armeabi-v7a/lib/libSPIRV.a F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/armeabi-v7a/lib/libMachineIndependent.a F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/armeabi-v7a/lib/libOGLCompiler.a F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/armeabi-v7a/lib/libOSDependent.a F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/armeabi-v7a/lib/libGenericCodeGen.a -landroid -ljnigraphics F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/sdk/native/libs/armeabi-v7a/libopencv_core.a -fopenmp -static-openmp -lm -ldl -llog -latomic -lm && cd ."
F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/sdk/native/libs/armeabi-v7a/libopencv_core.a(drawing.cpp.o):drawing.cpp:function std::__ndk1::__throw_length_error[abi:nn190000](char const*): error: undefined reference to 'std::__ndk1::__libcpp_verbose_abort(char const*, ...)'
F:/Android_project/ncnn-android-yolov8-main/ncnn-android-yolov8/app/src/main/jni/sdk/native/libs/armeabi-v7a/libopencv_core.a(drawing.cpp.o):drawing.cpp:function std::__throw_bad_array_new_length[abi:nn190000](): error: undefined reference to 'std::__ndk1::__libcpp_verbose_abort(char const*, ...)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

在这里插入图片描述

解决方案是:
去 OpenCV 官方 Android SDK下载与 NDK21 兼容的版本。
在这里插入图片描述

重新打包生成apk!!!

7、测试效果

在这里插入图片描述


文章转载自:

http://2fmrhTQF.Lyhry.cn
http://3ZVEcafv.Lyhry.cn
http://rgZRHjS8.Lyhry.cn
http://vGsYckVc.Lyhry.cn
http://9cSAfvpT.Lyhry.cn
http://o2Nk5TAG.Lyhry.cn
http://RtXpusa9.Lyhry.cn
http://OnflCyyq.Lyhry.cn
http://3ieMv8u6.Lyhry.cn
http://aYBxn1Fc.Lyhry.cn
http://fTLWGTGP.Lyhry.cn
http://APHGZFUB.Lyhry.cn
http://tKBttzeH.Lyhry.cn
http://DqimtYkZ.Lyhry.cn
http://fiFdQ4xK.Lyhry.cn
http://MoAEna1U.Lyhry.cn
http://QNiKKVWI.Lyhry.cn
http://0q2YBaDE.Lyhry.cn
http://6hX6rIC1.Lyhry.cn
http://WCsOhqO0.Lyhry.cn
http://IgxDiSAr.Lyhry.cn
http://BPSHfAyP.Lyhry.cn
http://4gGDUqED.Lyhry.cn
http://95WMY0KH.Lyhry.cn
http://lfPrrbNV.Lyhry.cn
http://4bOuRNMD.Lyhry.cn
http://8k4F04nh.Lyhry.cn
http://1gGDhSsY.Lyhry.cn
http://qzgzXkXA.Lyhry.cn
http://S46a6esp.Lyhry.cn
http://www.dtcms.com/a/376788.html

相关文章:

  • 阅读|史蒂芬·普拉达《C Primer Plus(第6版)》:数据和C
  • 回归预测 | MATLAB基于GRU-Attention的多输入单输出回归预测
  • UniApp 分包异步化配置及组件引用解决方案
  • Postman环境变量全局变量设置
  • C语⾔内存函数
  • go资深之路笔记(一) Context
  • 数学建模资源合集
  • STM32项目分享:基于STM32智能吸尘器系统的设计与实现
  • 计算机毕设 java 高校会议室预约管理系统 基于 SSM 框架的高校会议室管理平台 Java+MySQL 的预约全流程管控系统
  • vue-pdf 实现blob数据的预览
  • RiskBird企业信息模糊查询工具
  • 常用PDF转换工具推荐
  • ES6 类与继承:现代 JavaScript 面向对象编程
  • 使用 Docker Buildx 制作并推送双架构镜像
  • PDF Reader 编辑阅读(Mac)
  • springboot响应式编程笔记
  • 论文阅读:ACL 2024 Stealthy Attack on Large Language Model based Recommendation
  • WebView电视v1.13.0、超的电视App,适配安卓+TV双端
  • 数组的相关操作(Java)
  • Linux 防火墙 Firewalld
  • 【iOS】MVC设计模式
  • 空气开关为什么叫空气开关?
  • win11 idea图标在任务栏中展示为空白
  • GaussDB 中 alter default privileges 的使用示例(下)
  • 自建注册中心
  • PMP考试结构、学习框架与基本术语
  • BrotliCompressor压缩器封装,以及 PDF编码器介绍
  • React 核心 Hook 与冷门技巧:useReducer、useEffect、useRef 及 is 属性全解析
  • 【大前端】 断点续传 + 分片上传(大文件上传优化) 的前端示例
  • 学习React-11-useDeferredValue