当前位置:网站首页 > 云计算与后端部署 > 正文

onnx模型部署到手机(onnx安卓部署)



由于网上的车牌模型已经有很多,但是对于某些自己特定的场景的图片,可能没有很好的数据集,所以可以将这些模型拿自己的数据集再次进行训练,但是训练后的部署又是一个问题

本文章用于记录yolov5模型进行一系列的转换最后部署安卓的学习笔记

目录

一.yolo转onnx

        二.onnx转ncnn

三.安卓的部署

四.在一个新项目中配置该模型

相关报错的解决方法:


配置ONNX模型到Android平台 onnx安卓部署_配置ONNX模型到Android平台

配置ONNX模型到Android平台 onnx安卓部署_java_02

问题:在采用网上别人的模型的时候,发现特定的场景,识别率低

识别效果就不太理想,所以我们可以多采集我们需求的特定场景数据,然后对模型进行训练;

一般使用项目的export文件就可以对模型进行转换,教程过多不再赘述

配置ONNX模型到Android平台 onnx安卓部署_java_03

我们得到best.onnx后,就可以对其转为ncnn

这里就采用转换工具对模型进行转换

一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine (convertmodel.com)

配置ONNX模型到Android平台 onnx安卓部署_配置ONNX模型到Android平台_04

获取到ncnn模型后,就可以开始进行安卓的部署了

首先先下载示例的安卓案例,将我们新的模型放置在assets中

配置ONNX模型到Android平台 onnx安卓部署_android-studio_05

接下来要修改cpp文件

配置ONNX模型到Android平台 onnx安卓部署_android-studio_06

在文件中找到模型的名称填写位置,有两处

修改前:

配置ONNX模型到Android平台 onnx安卓部署_安卓_07

修改后:

配置ONNX模型到Android平台 onnx安卓部署_配置ONNX模型到Android平台_08

然后直接点击plateNcnn.param,进行参数的修改

ctrl+f,搜索关键词Reshape,然后改为图中圈中的部分,全部改为-1,防止出现很多框的情况

配置ONNX模型到Android平台 onnx安卓部署_安卓_09

然后记录下三个Rermute圈中的值

配置ONNX模型到Android平台 onnx安卓部署_YOLO_10

分别为output,1202,1219

记录input的值

配置ONNX模型到Android平台 onnx安卓部署_java_11

为images

接下来进入cpp文件中,修改对应的参数

ctrl+f : ex.input(

会有四个需要修改的地方,分别对应的改为我们刚刚记录的值,结果如下

配置ONNX模型到Android平台 onnx安卓部署_安卓_12

配置ONNX模型到Android平台 onnx安卓部署_安卓_13

修改好这四个位置后,就算部署成功了

创建项目

对项目进行基础的配置,写定让用户选择本地的图片,调用函数识别

decodeUri这个函数可以参考安卓项目中的

将原项目的YoloV5Ncnn和PlateRecognizer两个类直接拿过来

配置ONNX模型到Android平台 onnx安卓部署_java_14

然后将示例案例的jni,assets文件夹复制过来,注意位置

配置ONNX模型到Android平台 onnx安卓部署_YOLO_15

由于包名的不同,在cpp中,我们还需要对应函数的方法签名(不想改签名的也能自己创建一个与原项目一致的包名,然后将这两个类放置进去)

如:

配置ONNX模型到Android平台 onnx安卓部署_YOLO_16

例如我的包名是:com.yang.modelTest

配置ONNX模型到Android平台 onnx安卓部署_android-studio_17

配置ONNX模型到Android平台 onnx安卓部署_java_18

配置ONNX模型到Android平台 onnx安卓部署_java_19

然后给app的清单文件中加入获取手机文件的权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

操作好后就可以运行app了

结果如下

配置ONNX模型到Android平台 onnx安卓部署_java_20

1.若出现如图报错

配置ONNX模型到Android平台 onnx安卓部署_安卓_21

则是四个需要修改的参数填写错误

2.若出现车牌检测到,但是文字识别很奇怪

配置ONNX模型到Android平台 onnx安卓部署_配置ONNX模型到Android平台_22

那就是车牌四角的坐标矫正出现问题,在cpp文件中的该位置,将四角的坐标进行更换即可

配置ONNX模型到Android平台 onnx安卓部署_java_23

配置ONNX模型到Android平台 onnx安卓部署_java_24

3. java.lang.UnsatisfiedLinkError: dlopen failed: library "libyolov5ncnn.so" not found

这是表示cmake生成的库找不到,理论上按照操作后,是应该会生成一个对应的库的,检查在app的gradle中是否添加以下的内容

然后看看

在 Android 项目中,CMake 生成的库通常位于以下位置

<project_dir>/app/build/intermediates/cmake/debug/obj/<abi>/lib<library_name>.so

该路径下,是否存在该库,若是不存在,则证明生成失败

配置ONNX模型到Android平台 onnx安卓部署_安卓_25

4.No implementation found for com...

对应的方法,包名必须对应上,如

则必须在包名com.yang.modeltest下面的YoloV5Ncnn类中的一个方法Detect

在可以修改源代码的情况下,可以根据自己的包名修改,若是拿不到源代码的情况下,就需要根据源代码添加包名,将该类放置进行(自己总结的解决方法,若是有其他的方法麻烦告知一下谢谢)

到此这篇onnx模型部署到手机(onnx安卓部署)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • windows nfs客户端(windows2012 nfs客户端)2025-02-21 10:54:10
  • 达梦客户端安装 linux(linux安装达梦创建实例)2025-02-21 10:54:10
  • 服务器部署操作系统(服务器的部署原则)2025-02-21 10:54:10
  • rediscli连接集群(redis集群客户端连接ip配置)2025-02-21 10:54:10
  • 发送验证码太频繁请稍后再试(验证码发送频繁了会限制多久)2025-02-21 10:54:10
  • 服务器的部署(服务器的部署和搭建)2025-02-21 10:54:10
  • 苹果软件后缀名是啥(苹果手机软件的后缀名是什么)2025-02-21 10:54:10
  • onnx模型部署(onnx模型部署到手机)2025-02-21 10:54:10
  • 电视软件后缀大全(电视软件后缀名)2025-02-21 10:54:10
  • 服务器部署springboot项目(部署springboot项目到服务器上)2025-02-21 10:54:10
  • 全屏图片