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

模型部署:(五)安卓端部署Yolov8关键点检测项目全流程记录

模型部署:(五)安卓端部署Yolov8关键点检测项目全流程记录

  • 0、先展示测试效果
  • 1、模型下载并测试
  • 2、使用pnnx对模型进行转换**
  • 3、构建安卓项目

0、先展示测试效果

n级别检测模型CPU检测:
在这里插入图片描述

n级别检测模型GPU检测:
在这里插入图片描述

S级别检测模型CPU检测:
在这里插入图片描述

S级别检测模型GPU检测:

在这里插入图片描述

1、模型下载并测试

创建虚拟环境:

conda create -n yolov8_pose  python=3.10

ncnn不支持scatterND算子。
解决思路:尝试先将模型解析为TorchScript(torchscript可以将深度学习中一些复杂的处理算子解析为由多个简单算子组合的复杂算子来完成计算),然后使用pnnx转为ncnn可以解析的模型。

pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install ultralytics  --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装的版本是:ultralytics==8.3.201

或者拉取github官方项目利用源码进行安装

https://github.com/ultralytics/ultralytics/tree/v8.3.201

在这里插入图片描述
下载到本地执行如下语句进行源码安装

pip install -e.  --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述

pip install ncnn==1.0.20250916  --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装的版本是:ncnn==1.0.20250916

执行如下脚本:
其会自动下载ultralytics对应版本的模型文件

from ultralytics import YOLOmodel_n = YOLO("yolov8n-pose.pt")  # 自动下载对应版本的预训练权重
model_s = YOLO("yolov8s-pose.pt")  # 自动下载对应版本的预训练权重
model_m = YOLO("yolov8m-pose.pt")  # 自动下载对应版本的预训练权重
model_l = YOLO("yolov8l-pose.pt")  # 自动下载对应版本的预训练权重
model_x = YOLO("yolov8x-pose.pt")  # 自动下载对应版本的预训练权重
# 模型测试
from ultralytics import YOLO# 加载模型
model = YOLO("yolov8n-pose.pt")  
# 对单张图片推理
results = model("test.jpg", imgsz=640)
# 显示结果
results[0].show()
# 保存检测后的图像
results[0].save("pose_result.jpg")"""
# 会下载ultralytics对应版本的模型文件
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-seg.pt
"""

在这里插入图片描述

2、使用pnnx对模型进行转换**

导出NCNN模型

使用 yolo CLI

yolo export model=yolov8s-pose.pt format=ncnn  # export official model

或者使用python脚本执行如下指令:

from ultralytics import YOLO# Load a model
model = YOLO('yolov8s-pose.pt')  # load an official model# Export the model
model.export(format='ncnn')from ultralytics import YOLO# Load a model
model = YOLO('yolov8n-pose.pt')  # load an official model# Export the model
model.export(format='ncnn')

注意:
上述指令执行后,其会先下载yolov8s-pose.pt模型,然后再下载所需的pnnx包文件需要访问外网,导致下载失败,我的解决方案是复制下载链接,科学上网下载,然后拷贝至根目录下,并在根目录下重新执行上述指令

在这里插入图片描述

https://github.com/pnnx/pnnx/releases/download/20250912/pnnx-20250912-linux.zip

在这里插入图片描述

得到经过转换的相关文件

在这里插入图片描述

3、构建安卓项目

我的android-studio版本如下所示:
android-studio-2022.2.1.19-windows

将上述转换得到的模型放置在目录D:\project\new-ncnn-android-yolov8-pose-main\app\src\main\assets目录下
在这里插入图片描述

按照如下步骤下载对应的ncnn与opencv-mobile相关文件,并拷贝至对应的目录下
在这里插入图片描述
如下所示:
在这里插入图片描述


并修改对应的CMakeLists.txt文件中,ncnn与opencv-mobile的文件路径,如下所示:
在这里插入图片描述

project(yolov8ncnn)cmake_minimum_required(VERSION 3.10)# opencv4 requires c++11
set(CMAKE_CXX_STANDARD 11)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 yolov8.cpp ndkcamera.cpp yolov8pose.cpp)target_link_libraries(yolov8ncnn ncnn ${OpenCV_LIBS} camera2ndk mediandk)

在这里插入图片描述

根据自己实际需求调整local.properties文件中cmake、ndk、sdk的本地路径

cmake.dir=D\:\\Android_SDK\\Sdk\\cmake\\3.10.2.4988404
ndk.dir=D\:\\Android_SDK\\Sdk\\ndk\\24.0.8215888
sdk.dir=D\:\\Android_SDK\\Sdk

在这里插入图片描述
重构项目,然后打成apk包
在打包成apk时会出现报错,信息如下:

Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @56faf93f

我的解决方案是更换较高版本的AGP,如下所示:
在这里插入图片描述
再次重构项目并打apk包
在这里插入图片描述

测试效果如下所示:


文章转载自:

http://zwVC3PKC.pypqf.cn
http://3BaC2WKZ.pypqf.cn
http://L7FAr1mW.pypqf.cn
http://aCSNsXbY.pypqf.cn
http://RCjtLAJE.pypqf.cn
http://LtrCZGYN.pypqf.cn
http://NhbZz61r.pypqf.cn
http://fmKKLX91.pypqf.cn
http://nBVvkviD.pypqf.cn
http://uOE9oTXc.pypqf.cn
http://qm5n8Rly.pypqf.cn
http://gGsfL1Aw.pypqf.cn
http://RXRhMMDd.pypqf.cn
http://Excs8TFy.pypqf.cn
http://t9MuTVFU.pypqf.cn
http://Owu6GKj8.pypqf.cn
http://KnSxqkzs.pypqf.cn
http://IoJjCJwi.pypqf.cn
http://ICuqqMWo.pypqf.cn
http://9R40fhyB.pypqf.cn
http://TTjYYw76.pypqf.cn
http://qU0IG81l.pypqf.cn
http://thpKQJtM.pypqf.cn
http://oxwwJKkU.pypqf.cn
http://8oQYH3Tg.pypqf.cn
http://nuSBGuzj.pypqf.cn
http://0IBRhs6u.pypqf.cn
http://RuBNsGSO.pypqf.cn
http://ZgQT0Z25.pypqf.cn
http://cIBOCAju.pypqf.cn
http://www.dtcms.com/a/387285.html

相关文章:

  • 在业务应用中集成 go-commons,实现应用+系统双指标监控
  • ESP32-C3四种工作模式
  • ReactNative中实现可拖拽的温度计组件
  • react snippets
  • 基于Matlab高低频混合建模的大气湍流相位屏生成算法
  • 2025年8月SCI-袋鼠逃生优化算法Kangaroo Escape Optimizer-附Matlab免费代码
  • Node.js 创建 TCP 服务
  • 关于鸿蒙配置HMRouter的问题,比如白屏等
  • 为什么 socket.io 客户端在浏览器能连接服务器但在 Node.js 中报错 transport close?
  • Express框架介绍(基于Node.js的轻量级、灵活的Web应用框架)
  • Lustre Ceph GlusterFS NAS 需要挂载在k8s容器上,数据量少,选择哪一个存储较好
  • Axios与Java Spring构建RESTful API服务集成指南
  • 贪心算法应用:集合覆盖问题详解
  • 分布式拜占庭容错算法——权益证明(PoS)算法详解
  • Maven 深入profiles和mirrors标签
  • SQL Server 运维实战指南:从问题排查到性能优化
  • FFmpeg的安装及简单使用
  • F019 vue+flask海外购商品推荐可视化分析系统一带一路【三种推荐算法】
  • R语言数据统计分析与ggplot2高级绘图实践应用
  • Java 设计模式——观察者模式进阶:分布式场景扩展与实战配置
  • ​​[硬件电路-238]:电阻、电容、电感对数字电路中的作用
  • IPD驱动下的电源技术革命:华为数字能源模块化复用与降本增效实践
  • 线性回归与 Softmax 回归:深度学习基础模型解析
  • 安全迎国庆|假日期间,企业如何做好网络安全防护?
  • Product Hunt 每日热榜 | 2025-09-16
  • 告别静态图谱!TextSSL如何用「稀疏学习」实现更智能的文档分类?
  • centos Apache服务器安装与配置全攻略
  • centos配置hadoop环境变量并可启动hadoop集群
  • 告别“扁平化”UI:我用Substance Painter+glTF,构建空间感交互界面工作流
  • 【2026计算机毕业设计】基于Django的选课系统的设计与实现