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

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

文章目录

  • 1 准备Android项目文件
    • 1.1 解压文件
    • 1.2 放置ncnn模型文件
    • 1.3 放置ncnn和opencv的android文件
    • 1.4 修改CMakeLists.txt文件
  • 2 手机连接电脑并编译软件
    • 2.1 编译软件
    • 2.2 更新配置及布局
    • 2.3 编译
    • 2.4 连接手机
  • 3 自己数据集训练模型的部署
  • 4 参考


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"><!-- 活动声明 --><activityandroid: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

http://www.lryc.cn/news/488683.html

相关文章:

  • 第二十四章 Spring之源码阅读——AOP篇
  • Linux配置MySQL自动备份
  • qt 之 QDockWidget设置不可拖动
  • 【Java知识】Java性能测试工具JMeter
  • Git 安装
  • 【Python】FastAPI:Token认证
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —ArkUI
  • ubuntu没有了有线网络如何修复
  • 渗透学习之windows基础
  • 【Swift】运算符
  • minikube start --driver=docker 指定国内镜像
  • Quality minus junk论文阅读
  • Apache和HTTPS证书的生成与安装
  • 前端—Cursor编辑器
  • 【数据结构】【线性表】【练习】删除链表倒数第n个结点
  • MySQL高级(四):索引
  • hhdb数据库介绍(9-21)
  • React中组件通信的几种方式
  • python脚本实现csv中百度经纬度转84经纬度
  • syslog udp配置笔记
  • Linux环境开启MongoDB的安全认证
  • django基于Python的农产品销售系统的设计与实现
  • linux复习5:C prog
  • Go语言24小时极速学习教程(三)常见标准库用法
  • 大数据环境下的高效数据清洗策略
  • 基于SpringBoot3+mybatis搭建的历史上的今天API接口服务 及 Mybatis 应该有个更好的方法来隐藏 Pojo 类中的字段
  • Python 3 字符串
  • Android集成FCM(Firebace Cloud Messaging )
  • 基于 RBF 神经网络辨识的单神经元 PID 模型参考自适应控制
  • 2024年 Web3开发学习路线全指南