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

发布于:2025-09-11 ⋅ 阅读:(17) ⋅ 点赞:(0)

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、测试效果

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到