自学内容网 自学内容网

【YOLOv8】安卓端部署-2-项目实战


1 准备Android项目文件

1.1 解压文件

下载项目文件ncnn-android-yolov8-seg.zip,并解压。

在这里插入图片描述

1.2 放置ncnn模型文件

ncnn-android-yolov8-seg\app\src\main\assets中放入ncnn文件(即模型 的param和bin文件)

修改param和bin文件名为yolov8n-seg.param,yolov8-seg.bin, yolov8sseg.param, yolov8s-seg.bin

在这里插入图片描述

1.3 放置ncnn和opencv的android文件

(1) 放置ncnn的安卓文件

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

下载ncnn-YYYYMMDD-android-vulkan.zip

我们使用ncnn-20230223-android-vulkan.zip

解压ncnn-YYYYMMDD-android-vulkan.zip后

放置到app/src/main/jni 并修改app/src/main/jni/CMakeLists.txt中的ncnn_DIR

(2) 放置opencv的安卓文件

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

下载opencv-mobile-XYZ-android.zip

我们使用opencv-mobile-4.6.0-android.zip

解压opencv-mobile-XYZ-android.zip后放置到app/src/main/jni并修改 app/src/main/jni/CMakeLists.txt中的 OpenCV_DIR

在这里插入图片描述

1.4 修改CMakeLists.txt文件

ncnn-android-yolov8-seg\app\src\main\jni下面

project(yolov8ncnn)

cmake_minimum_required(VERSION 3.10)

set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/opencv-mobile-4.6.0-android/sdk/native/jni)
find_package(OpenCV REQUIRED core imgproc)

set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20230223-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn)
find_package(ncnn REQUIRED)

add_library(yolov8ncnn SHARED yolov8ncnn.cpp yolo.cpp ndkcamera.cpp)

target_link_libraries(yolov8ncnn ncnn ${OpenCV_LIBS} camera2ndk mediandk)

2 手机连接电脑并编译软件

任意投屏软件即可

在这里插入图片描述
在这里插入图片描述

以小米10手机为例

(1)设置开发者模式 设置->我的设备->全部参数 点击MIUI版本三次

(2)设置USB调试和安装 设置->更多设置->开发者选项 打开USB调试;USB安装

(3)手机通过USB数据线(或WiFi)连接电脑

(4)编译和调试 打开已经存在的项目,选择build.gradle

(5)导出签名apk Build->Generate Signed APK

2.1 编译软件

build,gradle(project)

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        mavenCentral() // 替换 jcenter
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.2.2' // 更新到兼容版本
    }
}

allprojects {
    repositories {
        google()
        mavenCentral() // 替换 jcenter
    }
}

build,gradle(app)

apply plugin: 'com.android.application'

android {
    // 使用较新的编译版本
    compileSdkVersion 33 // 更新到最新的 SDK 版本
    // buildToolsVersion 可省略,Gradle 会自动选择

    defaultConfig {
        applicationId "com.tencent.yolov8ncnn"
        archivesBaseName = "$applicationId"
        minSdkVersion 24 // 保持最低支持 SDK 版本
        targetSdkVersion 33 // 确保与最新规范兼容
    }

    externalNativeBuild {
        cmake {
            version "3.10.2" // 保持当前的 CMake 版本
            path file('src/main/jni/CMakeLists.txt') // 指定 CMake 文件路径
        }
    }

    // 使用较新的 AndroidX 库
    dependencies {
        implementation 'androidx.core:core:1.9.0'
        implementation 'androidx.appcompat:appcompat:1.5.1'
    }

    // 指定 NDK 版本
    ndkVersion '24.0.8215888'
}

gradle.properties

## For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Tue Nov 19 12:54:21 CST 2024
systemProp.http.proxyHost=
systemProp.http.proxyPort=80
android.useAndroidX=true
android.enableJetifier=true

gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

local.properties

## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Tue Nov 19 11:53:56 CST 2024
sdk.dir=D\:\\software_code\\android\\sdk
cmake.dir=D\:\\software_code\\android\\sdk\\cmake\\3.10.2.4988404

settings.gradle

include ':app'

2.2 更新配置及布局

升级gradle

在这里插入图片描述

修改AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tencent.yolov8ncnn"
    android:versionCode="1"
    android:versionName="1.1">

    <!-- 权限声明 -->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera2.full" />

    <!-- 应用声明 -->
    <application android:label="@string/app_name">
        <!-- 活动声明 -->
        <activity
            android:name="MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:exported="true">
            <!-- 意图过滤器 -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

在com.tencent.yolov8ncnn.MainActivity重新import

import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

2.3 编译

在这里插入图片描述

2.4 连接手机

我当前使用usb进行连接

在这里插入图片描述

点击run,在手机安装后,并获取权限

在这里插入图片描述

结果如图

3 自己数据集训练模型的部署

1)使用YOLOv8模型训练自己的数据集

2)ncnn模型文件的替换

3)修改yolo.cpp文件中的class_names yolo.cpp文件generate_proposals函数中

const int num_class = 80;

改为自己数据集中的类别数

4 参考

https://github.com/Tencent/ncnn

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

https://github.com/FeiGeChuanShu/ncnn-android-yolov8


原文地址:https://blog.csdn.net/qq_45400167/article/details/143883030

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!