yolov5模型在安卓android平台上部署(一)demo运行

2023-10-27

一、下载 & 配置

1.1 下载源文件

下载该版本是因为自带vulkan加速

接着Appearance & Behavior----->System Settings---->Android SDK
(1)SDK Tools
请添加图片描述
(2)SDK Platforms
我个人选择的是Android 11.0

进入到license Agreement直接accept
【参考文档】Android studio安装

1.2 配置AS

Step1:解压并移动文件

解压文件夹之后,打开ncnn-xxxxx-android-vulkan-shared全选复制到ncnn-android-yolov5-master\app\src\main\jni

Step2:打开文件 并 开始构建

在 Android studio选择ncnn-android-yolov5-master\build.gradle打开该项目

报错1:cmake版本问题
CMake '3.10.2' was not found in PATH or by cmake.dir property.
- CMake '3.22.1' found in SDK did not match requested version '3.10.2'.
- CMake '3.24.1' found in PATH did not match requested version '3.10.2'.

解决办法:下载对应版本
请添加图片描述

报错2:文件路径问题
By not providing "Findncnn.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "ncnn", but
CMake did not find one.

修改cmake中的路径
请添加图片描述

报错3:应该是版本问题

在这里插入图片描述

解决方法:
1.访问 https://services.gradle.org/distributions/,并查看最新版的gradle。
2.修改项目中”gradle/wrapper/gradle-wrapper.properties”里下面属性值

(这篇博客是11.1写的,时间比较靠近的话可以直接抄作业)
在这里插入图片描述

同时build.gradle中classpath和gradle文件夹下gradle-wrapper.properties文件里的distributionUrl配置需要匹配
在这里插入图片描述

各个 Android Gradle 插件版本所需的 Gradle 版本
在这里插入图片描述

最后模型就构建好了
在这里插入图片描述

Step3:连接安卓手机

以oppo findx2为例

  1. 在设置中搜索版本号,多次点击进入开发者模式
  2. 系统设置—>开发者选项
    开发者选项USB调试 都打开
  3. 手机连接上后会弹出 密钥之类的东西 全部确认。
  4. 选择传输文件/Android Auto
    请添加图片描述

最终在Android studio右上角就会出现手机的型号
在这里插入图片描述

报错:INSTALL_FAILED_TEST_ONLY
Caused by: org.gradle.api.internal.provider.AbstractProperty$PropertyQueryException: Failed to calculate the value of task ':app:compileDebugJavaWithJavac' property 'options.generatedSourceOutputDirectory'.

【参考方案】编译安装App报错INSTALL_FAILED_TEST_ONLY终极解决方案
我的源文件是没有gradle.properties的,直接创建之后拖到文件夹下就可以了

android.useAndroidX=true
android.enableJetifier=true
android.injected.testOnly=false

包含着这三行就可以正常下载了,结果如下图
请添加图片描述

可能是手机原因。cpu居然比gpu快
请添加图片描述

二. 使用自己的权重

2.0 环境

我的环境是
在这里插入图片描述
可以直接

pip install 名称== 版本号

2.1 导出onnx模型

在yolov5文件夹中

python export.py --weights 权重路径 --include onnx

简化onnx文件

 python -m onnxsim 上一步导出的onnx文件路径 yolov5s-sim.onnx

2.2 将权重文件转化为bin文件和paras文件

建议直接参考该文档,我就不重复造轮子了

cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=G:\model_compression_quantization\protobuf-3.4.0\build_vs2019\install\include -DProtobuf_LIBRARIES=G:\model_compression_quantization\protobuf-3.4.0\build_vs2019\install\lib\libprotobuf.lib -DProtobuf_PROTOC_EXECUTABLE=G:\model_compression_quantization\protobuf-3.4.0\build_vs2019\install\bin\protoc.exe -DNCNN_VULKAN=OFF ..

【参考文档】ONNX2NCNN
路径上一定不要有中文不然会出错

2.3 AS

三.其他操作

3.1连接手机摄像头:

python detect.py --source http://admin:admin@10.xxx.xxx.xxx:xxxx

【参考文件】yolov5通过ncnn在安卓平台部署

【参考文件】Windows环境下yolov5移植到Android手机上的详细步骤

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

yolov5模型在安卓android平台上部署(一)demo运行 的相关文章

随机推荐

  • RocksDB之Column Families(列族)与 LSM Tree

    1 Column Families 列族 Column Families 是rocksdb3 0提出的一个机制 用于对同一个数据库的记录 键值对 进行逻辑划分 默认情况下所有的记录都会存储在一个默认列族里 ROCKSDB NAMESPACE
  • STM 8 学习笔记 6:GPIO

    1 概述 GPIO 是通用输入输出端口的简称 CPU 通过 GPIO 与外部设备连接起来 从而实现与外部通讯 控制以及数据采集的功能 GPIO 功能框图如下所示 2 相关寄存器 Px ODR 端口数据输出寄存器 配置输出到引脚的高低电平 P
  • 有关easyDL的浅析(资料集合)

    在EasyDL的服务端 有下面几种核心技术 AI Workflow分布式引擎 百度自创PaddlePaddle深度学习框架 迁移学习 Auto Model Search机制 early stoopping机制 模型效果评估机制 下面来一一了
  • vue--配置 请求/响应拦截器

    配置响应拦截器 在案例中后端传输给我的数据包括 响应码 code 响应信息 message 对象 由于我们前端在发送一个请求时 服务端的响应也许会各不相同 我们前端所做出的处理也会不一样 可是如果在每个事件里都单独将对于这些不同响应的处理都
  • elasticsearch基本入门学习笔记

    Elasticsearch学习笔记 一 ElasticSearch概述 历史 谁在使用 ES和Solr 二 ElasticSearch安装 1 安装 2 熟悉目录 3 启动 三 elasticsearch head 可视化界面 四 kiba
  • 深度学习基础--finetune

    finetune 就是用别人训练好的模型 加上我们自己的数据 来训练新的模型 finetune相当于使用别人的模型的前几层 来提取浅层特征 然后在最后再落入我们自己的分类中 finetune的好处在于不用完全重新训练模型 从而提高效率 因为
  • leetcode:1812. 判断国际象棋棋盘中一个格子的颜色(python3解法)

    难度 简单 给你一个坐标 coordinates 它是一个字符串 表示国际象棋棋盘中一个格子的坐标 下图是国际象棋棋盘示意图 如果所给格子的颜色是白色 请你返回 true 如果是黑色 请返回 false 给定坐标一定代表国际象棋棋盘上一个存
  • 你知道 1 + 1 等于几吗?

    阅读本文需要 4 分钟 前言 当有人问你1 1等于几的时候 你会觉着这是对你的一种侮辱 这种弱智问题 居然拿来问我 听起来好像你说的没错 1 1是挺简单的 可是如果让你证明的话 可能你这一辈子都证明不出来 稍微知道一点的人 可能会联想到我国
  • 蓝桥杯习题-砝码称重(动态规划)Python实现

    问题描述 你有一架天平和 N 个砝码 这 N 个砝码重量依次是 W1 W2 WN 请你计算一共可以称出多少种不同的重量 注意砝码可以放在天平两边 输入的第一行包含一个整数 N 第二行包含 N 个整数 W1 W2 W3 WN输出一个整数代表答
  • Android实现倒计时跳转和延时操作

    App启动页倒计时3秒跳转到App的首页 这种操作在很多App中都很常见 如果需要做一个延时操作呢 写一个子线程停留3秒然后执行操作 这样的话需要特别的注意的是UI操作必须放在主线程里 那么还需要转化成主线程 NO 使用Handler轻松实
  • 运维的最终目标是什么?

    序言 闲来无事 聊聊运维的终极目标 反正是瞎扯 毕竟么有风 天气还这么寒冷 思维不能灵动 不能起一丝波澜 歌曲不错 偶尔也可以听听 毕竟也是南征北战 风言风语 运维 从来都不能登上大雅之堂 WHY 纵观整个软件的开发周期 需求 设计 编码
  • 模板类重载>>(输入)和<<(输出)运算符

    在模板类中输入运算符 gt gt 和输出运算符 lt lt 的重载 使用友元在类内声明 在类外实现 include
  • C++模板与模板的重载

    include
  • Restful 多参数请求,包含中文解决办法-postman

    首先 要知道postman restful多参数请求的写法 http ip port user 参数值1 参数值2 参数值3 例如 http localhost 6666 user 如果爱 部 0000121 postman当遇到上述 ur
  • ANSIBLE大全

    运维自动化之ANSIBLE 本章内容 运维自动化发展历程及技术应用 Ansible命令使用 Ansible常用模块详解 YAML语法简介 Ansible playbook基础 Playbook变量 tags handlers使用 Playb
  • 查看 jvm 参数

    文章目录 VM 参数 jdk 提供的命令行参数 查看堆概要信息 VM 参数 XX PrintCommandLineFlags 可以打印出传递给虚拟机的显示和隐式参数 隐式参数未必是通过命令行直接给出的 它可能是由虚拟机启动时自行设置的 XX
  • 用递归法求n!(函数定义)

    用递归法求n 函数定义 include
  • C++中mutimap简单用法

    mutimap和map基本用法都是一样的 map中键值对中的键是唯一的 而mutimap中的键可以重复 mutimap在现实中也是很常用的 比如部门和员工的关系 mutimap和map的头文件都是 都是关联容器 都是需要通过迭代器来访问元素
  • P1018 [NOIP2000 提高组] 乘积最大

    题目 题目链接 题解 状态定义 dp i j 表示前i个数分成j段 即需要j 1个 的最大乘积 状态转移 dp i j max dp k 1 j 1 a k i dp i j 表示在第k 1和第k个数之间加上一个 得到的最大值 其中前k 1
  • yolov5模型在安卓android平台上部署(一)demo运行

    一 下载 配置 1 1 下载源文件 ncnn android yolov5下载传送门 Tencent ncnn下载传送门 下拉 下载该版本是因为自带vulkan加速 Android studio安装 Android studio下载传送门