当前位置: 首页 > 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

相关文章:

【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…...

第二十四章 Spring之源码阅读——AOP篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...

Linux配置MySQL自动备份

Linux配置MySQL自动备份 配置MySQL的自动备份首先要编辑一个备份脚本然后配置开启Linux定时任务即可&#xff0c;下面是具体配置 1、配置备份脚本并测试执行 1.1 编写备份脚本 #这里创建脚本名为mysql_backups.sh mkdir ~/mysqlmulu touch ~/mysqlmulu/mysql_backups.sh#!/…...

qt 之 QDockWidget设置不可拖动

在Qt中&#xff0c;可以通过设置QDockWidget的属性来禁止它被拖动。你可以使用QDockWidget::setFeatures方法并传递QDockWidget::DockWidgetMovable作为参数来禁用拖动功能。 以下是一个简单的示例代码&#xff0c;展示了如何设置QDockWidget为不可拖动&#xff1a; #include …...

【Java知识】Java性能测试工具JMeter

一文带你了解什么是JMeter 概述JMeter的主要功能&#xff1a;JMeter的工作原理&#xff1a;JMeter的应用场景&#xff1a;JMeter的组件介绍&#xff1a; 实践说明JMeter实践基本步骤&#xff1a;JMeter实践关键点&#xff1a; JMeter支持哪些参数化技术&#xff1f;常见插件及其…...

Git 安装

一、下载安装包 Git官网 https://git-scm.com/ Git 阿里镜像 二、安装 点击安装包运行&#xff0c;基本上一路 next 就行。 使用许可声明 选择安装目录 选择组件&#xff0c;默认勾选就行 选择开始菜单文件夹&#xff0c;默认就行 选择 Git 的默认编译器&#xff0c;默认 V…...

【Python】FastAPI:Token认证

FastAPI&#xff1a;Token认证 本教程通过 FastAPI 实现用户登录和基于 JWT&#xff08;JSON Web Token&#xff09; 的认证与授权&#xff0c;适合初学者到进阶用户。教程特别关注 Depends、OAuth2PasswordBearer 等非基础操作的详细讲解&#xff0c;帮助你全面掌握相关技术。…...

【FAQ】HarmonyOS SDK 闭源开放能力 —ArkUI

1.问题描述&#xff1a; App启动的时候会有个弹框&#xff0c;询问用户是否需要进去隐私模式&#xff0c;在该隐私模式下&#xff0c;App不能获取任何用户信息。当前鸿蒙App级别是否有隐私模式&#xff1f; 解决方案&#xff1a; 当前实现隐私模式都是三方应用自己实现&…...

ubuntu没有了有线网络如何修复

今天打开ubuntu之后发现有线网络连接没有了&#xff0c;如下图&#xff0c;此时是修复好之后的&#xff0c;“有线”部分存在&#xff0c;出现问题时是不存在的 此时只需要修改NetworkManager.conf配置文件&#xff0c;将managedfalse更改为managedtrue,保存退出就可以了 sudo…...

渗透学习之windows基础

引路Windows基础之病毒编写&#xff08;完结&#xff09;_哔哩哔哩_bilibili windows基础&#xff08;2&#xff09; 21 ftp 23 tenlet 80 web 80-89 可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 msspl 1521 oracle 2082/2083 cpanel 主机管理系…...

【Swift】运算符

文章目录 术语赋值运算符算数运算符基本四则算术运算符求余运算符一元负号运算符一元正号运算符 比较运算符三元运算符空合运算符区间运算符闭区间运算符半开区间运算符单侧区间运算符 逻辑运算符逻辑非运算符逻辑与运算符逻辑或运算符逻辑运算符组合计算 位运算符运算符优先级…...

minikube start --driver=docker 指定国内镜像

要在Ubuntu 22上使用Minikube并指定国内镜像&#xff0c;你可以根据以下步骤操作&#xff1a; 安装Minikube&#xff1a; 你可以通过阿里云提供的国内源来安装Minikube&#xff0c;这样可以避免访问国外源的问题。使用以下命令安装Minikube&#xff1a; curl -Lo minikube http…...

Quality minus junk论文阅读

Quality minus junk论文阅读 文章目录 Quality minus junk论文阅读 AbstractTheoretical FrameworkEmpirical AnalysisDataQuality scorePortfoliosEx ante quality forecasts fundamentals Results and DiscussionThe price of qualityUnderstanding the price of quality: th…...

Apache和HTTPS证书的生成与安装

摘要 介绍linux系统下使用openssl生成https证书&#xff0c;并将证书安装在apache服务器上&#xff0c;最终实现通过https访问服务器。这个过程涉及到openssl生成自签名证书&#xff08;适用于测试环境&#xff09;&#xff0c;修改apache配置&#xff0c;开放防火墙https端口…...

前端—Cursor编辑器

在当今快速发展的软件开发领域&#xff0c;效率和质量是衡量一个工具是否优秀的两个关键指标。今天&#xff0c;我要向大家推荐一款革命性的代码编辑器——Cursor&#xff0c;它集成了强大的AI功能&#xff0c;旨在提高开发者的编程效率。以下是Cursor编辑器的详细介绍和推荐理…...

【数据结构】【线性表】【练习】删除链表倒数第n个结点

目录 申明 题目 分析题目信息 解题思路 代码解析 技巧解析&#xff1a;创建虚拟头结点 时间复杂度分析 思考&#xff1a;能否只用一趟扫描实现&#xff1f; 双指针 双指针解题思路 代码解析 申明 该题源自力扣题库19&#xff0c;文章内容&#xff08;代码&#xff0c…...

MySQL高级(四):索引

基础概念 什么是索引&#xff1f; 索引是一种数据结构&#xff0c;用于加速查询的过程。它类似于书本的目录&#xff0c;可以快速定位数据行。MySQL 索引主要是基于 B 树&#xff08;也有其他类型如哈希索引、全文索引等&#xff09;来实现的。 为什么使用索引&#xff1f; …...

hhdb数据库介绍(9-21)

计算节点参数说明 checkClusterBeforeDnSwitch 参数说明&#xff1a; PropertyValue参数值checkClusterBeforeDnSwitch是否可见否参数说明集群模式下触发数据节点高可用切换时&#xff0c;是否先判断集群所有成员正常再进行数据节点切换默认值falseReload是否生效是 参数设…...

React中组件通信的几种方式

在构建复杂的React应用时&#xff0c;组件之间的通信是至关重要的。从简单的父子组件通信到跨组件状态同步&#xff0c;不同组件之间的通信方式多种多样。 1. 父子组件通信 父子组件通信是 React 中最基本的通信方式之一。在这种模式下&#xff0c;数据是从父组件通过 props …...

python脚本实现csv中百度经纬度转84经纬度

数据准备 csv文件,带百度经纬度字段:bd09_x,bd09_y 目的 将百度经纬度转换为84经纬度,并在csv文件中添加两个字段:84_x,84_y python脚本 from ChangeCoordinate import ChangeCoordimport pandas as pd import numpy as npcoord = ChangeCoord()def bd09_to_wgs84...

汽车智能制造时代,哪些服务商助力智慧供应链?

一辆汽车的诞生&#xff0c;背后是一场精密到分钟的大合唱。当生产线以每小时数十台的速度流转时&#xff0c;任何一个零部件的迟到&#xff0c;都可能导致整条线停摆。一个汽车工厂里&#xff0c;单一产线同时生产多种车型&#xff0c;涉及数以万计的SKU零部件。这些物料必须从…...

告别Linux卡顿!用RK3562的M0核跑RT-Thread,实现实时控制与Linux并行运行

RK3562多核异构开发实战&#xff1a;用M0核实现Linux与RT-Thread的完美协同 在智能家居控制器项目中&#xff0c;我们遇到了一个典型难题——当Linux系统处理图形界面和网络通信时&#xff0c;电机的实时控制会出现明显延迟。传统解决方案需要两套独立硬件&#xff0c;直到我们…...

大三大学生挖洞收入十万背后:网安圈的“天才少年”,普通人能复制吗?

大三学生挖洞收入十万背后&#xff1a;网安圈的 “天才少年” &#xff0c;普通人能复制吗&#xff1f; SRC首期学员战绩疯传&#xff1a;大四小白45天回本6K&#xff1f;大三在读2个月挖洞收获六位数&#xff1f; 当朋友圈被"零基础挖洞暴富"的捷报疯狂刷屏时&…...

Llama-3.2V-11B-cot部署详解:自动修复视觉权重加载致命Bug全过程

Llama-3.2V-11B-cot部署详解&#xff1a;自动修复视觉权重加载致命Bug全过程 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具&#xff0c;专为双卡RTX 4090环境深度优化。本工具通过自动修复视觉权重加载等核心Bug&#…...

阿里云域名动态解析避坑指南:从AccessKey到API调用的完整流程

阿里云域名动态解析实战手册&#xff1a;从权限配置到高可用方案设计 对于拥有个人博客、家庭NAS或远程开发环境的技术爱好者而言&#xff0c;动态公网IP始终是个令人头疼的问题。每当ISP重新分配IP地址时&#xff0c;原本稳定的服务连接就会突然中断。本文将分享如何利用阿里云…...

C++ 无原生 JSON 支持?一文实现通用序列化与反序列化封装方案

前言 在现代软件开发中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;因其轻量级和易读性成为数据交换的主流格式。C虽无原生JSON支持&#xff0c;但通过封装第三方库&#xff08;如nlohmann/json&#xff09;&#xff0c;可高效实现序列化&#xff08;…...

别只盯着显卡!CES上英伟达那个能装进口袋的AI超算,普通人怎么玩?

口袋里的AI革命&#xff1a;如何用英伟达Project DIGITS打造个人智能工作站 当大多数人还在讨论RTX 50系列显卡的游戏性能时&#xff0c;英伟达在CES 2025上悄悄展示了一个可能改变未来的小玩意——Project DIGITS。这个能装进口袋的AI超算&#xff0c;搭载GB10芯片&#xff0c…...

Spring Boot新手必看:从零搭建Web项目的5个关键步骤(附常见报错解决方案)

Spring Boot新手实战指南&#xff1a;从零构建Web应用的完整路线图 为什么选择Spring Boot作为你的第一个Java Web框架&#xff1f; 当你第一次接触Java Web开发时&#xff0c;面对众多框架的选择可能会感到迷茫。Spring Boot之所以成为大多数开发者的首选&#xff0c;是因为…...

汉字拼音转换工具选型与实战指南:用pinyinjs解决多场景字符处理难题

汉字拼音转换工具选型与实战指南&#xff1a;用pinyinjs解决多场景字符处理难题 【免费下载链接】pinyinjs 一个实现汉字与拼音互转的小巧web工具库&#xff0c;演示地址&#xff1a; 项目地址: https://gitcode.com/gh_mirrors/pi/pinyinjs 在数字化产品开发中&#xf…...

文科生被AI大厂疯抢,月薪3万起,这条热搜,你真的看懂了吗?

最近有个话题悄悄冲上热搜&#xff0c;看得不少人心里一热——#AI大厂月薪3万疯抢文科生#。 事情起因是360创始人周鸿祎在一次采访里说了个挺颠覆的观点&#xff1a;“随着AI技术的发展&#xff0c;文科生将比理科生更吃香。”截图来源微博&#xff08;如侵删&#xff09; 他给…...