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

一、下载 & 配置

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手机上的详细步骤

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
将训练好的 YOLOv5 模型部署到 Qt 上,可以分为两个步骤: 1. 将 YOLOv5 模型转换成 Qt 支持的格式。Qt 支持的模型格式包括 TensorFlow Lite、ONNX 和 Caffe。如果你的模型是 PyTorch 的,可以先将其转换为 ONNX 格式,再使用 ONNX 转换器将其转换为 Qt 支持的格式。 2. 在 Qt 中加载模型并进行推理。Qt 提供了一个名为 QML 的框架,可以在其中加载模型并进行推理。使用 QML,你可以轻松地将模型集成到 Qt 应用程序中,并将其与其他 Qt 控件(如按钮、文本框等)一起使用。 以下是一个简单的示例代码,演示了如何在 Qt 中加载 YOLOv5 模型并进行推理: ```qml import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.12 import QtQuick.Window 2.15 import QtQuick.Dialogs 1.3 import QtQuick.Controls.Material 2.15 import Qt.labs.platform 1.0 import TensorFlowLite 1.0 Page { id: page title: "YOLOv5 Demo" ColumnLayout { id: layout Text { text: "选择要识别的图像:" } FileDialog { id: fileDialog title: "选择图像" nameFilters: ["Images (*.png *.jpg *.bmp)"] selectMultiple: false onAccepted: { image.source = fileUrl.toString() predict(fileUrl.toString()) } } Image { id: image width: 512 height: 512 fillMode: Image.PreserveAspectFit source: "" MouseArea { anchors.fill: parent onClicked: { fileDialog.open() } } } Text { id: prediction text: "" } } TensorFlowLiteModel { id: model modelFilePath: "yolov5.tflite" } function predict(imagePath) { var inputTensor = model.inputTensor(0) var outputTensor = model.outputTensor(0) // Load image into a tensor var imageData = loadImage(imagePath) inputTensor.data = imageData // Run inference model.invoke() // Parse output var predictions = parseOutput(outputTensor) // Display predictions var predictionText = "Predictions:" for (var i = 0; i < predictions.length; ++i) { predictionText += "\n" + predictions[i].class + ": " + predictions[i].confidence } prediction.text = predictionText } function loadImage(imagePath) { // Load image into a tensor var image = Qt.labs.platform.resourceUrl(imagePath).toLocalFile() var imageObject = new Image() imageObject.source = image var canvas = document.createElement("canvas") canvas.width = imageObject.width canvas.height = imageObject.height var ctx = canvas.getContext("2d") ctx.drawImage(imageObject, 0, 0) var imageData = ctx.getImageData(0, 0, imageObject.width, imageObject.height) var imageTensor = new Float32Array(imageData.data.length) for (var i = 0; i < imageData.data.length; i += 4) { imageTensor[i + 0] = imageData.data[i + 0] / 255 imageTensor[i + 1] = imageData.data[i + 1] / 255 imageTensor[i + 2] = imageData.data[i + 2] / 255 } return imageTensor } function parseOutput(outputTensor) { // Parse output tensor var output = outputTensor.data() var numPredictions = output[0] var predictions = [] for (var i = 0; i < numPredictions; ++i) { var classIndex = output[i * 6 + 1] var confidence = output[i * 6 + 2] var x = output[i * 6 + 3] var y = output[i * 6 + 4] var w = output[i * 6 + 5] var h = output[i * 6 + 6] predictions.push({class: classIndex, confidence: confidence, x: x, y: y, w: w, h: h}) } return predictions } } ``` 上述代码中,我们使用 TensorFlowLiteModel 组件加载并运行 YOLOv5 模型。在 predict 函数中,我们将图像加载到输入张量中,并在模型运行推理。然后,我们解析输出张量,并将预测结果显示在 UI 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值