我采取的android studio版本为2022.1.1,跟版本可能关系不大(猜测,没有实际切换过)
但是跟NDK版本21和Cmake3.10版本有很大关系,我们稍后会说到。
备注:采用设备
瑞芯微rk3588
需要准备
yolov5 rknn模型 需要自己用过cmake生成,cmake版本3.10
以及对应C++代码,在此链接中获取
https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolov5
开发板需要与显示器连接
1 、
下载android studio
https://developer.android.google.cn/studio/archive
2、下载好android studio之后,我们需要下载一个安卓yolov5案例
https://pan.baidu.com/disk/main?at=1723774719041#/index?category=all&path=%2Fandroid%2Fyolov5%2Fyolov5%E6%A1%88%E4%BE%8B%E9%A1%B9%E7%9B%AE
3、新建项目
选择空项目
不要选择C++工程,网上许多案例,是创建C++工程,这是不符合实际情况的。如果说,我们在一个旧的项目中,因为业务因素,需要添加C++代码来实现某种功能,总不能新创建一个项目吧。
现在我们得到一个空的安卓工程。
4、配置android studio环境
yolov5对NDK和CMake有特定版本要求
NDK 21版本
Cmake 3.10版本
选择顶部菜单栏Tools
进入SDK Tools
勾选show Package Details,选择NDK21版本
选择Cmake3.10版本
点击Apply,再点击OK。
这是我们NDK的版本
ndkVersion ‘21.4.7075529’
填写在android目录下。
5、切换到项Project窗口,右击main目录,选择 add C++to Module
点击ok
main目录下出现cpp目录
Gradle中出现
后续我们会对Gradle进行一些配置。
6、现在打开我们刚刚下载的yolov5Demo
发现demo中多了一些文件,我们刚刚add C++ Module后,会出现CMakeLists.text文件,demo中使用Adnroid.mk,我们采用Android.mk方法
从demo中复制需要的文件到我们自己的项目中
我们打开Android.mk文件,发现有Local_Module 后面的值为rknn_yolov5,引入的C++部分,相当于一个本地库,调用本地库需要名称,代码中的名称为:rknn_yolov5。
因此我们需要在Gradle中,添加这个rknn_yolov5。
我们使用Android.mk
添加完成后,需要点击同步Synv Now。
现在我们配置好了Gradle。
7、我们现在在avtivity中调用本地库。
下面3个方法报红,是因为在我们的jni文件中,存在错误
点开jni文件,发现对应的方法灰色,不生效,观察后发现,方法名int前面的东西,com_herohan_rknn_1yolov5_YoloV5Detect,与我们自己创建的项目不匹配,修改它。
我们选择acvitity中报红的init方法,
alt+回车,会出现创建jni方法的选项
在jni方法中,生成了一个新的方法。我们复制这段
Java_com_example_roadmapv5_MainActivity_
到上面灰色方法替换
在我们avtivity中,对应的几个方法爆红解决
然后我们调用它们。
8、我们把demo中的对应代码复制到自己项目中
发现一些地方报红。
创建assets文件,把对应的文件和rknn模型放进去
复制模型名字替换
下面的爆红是页面UI,我们可以把demo中 activity中xml的代码复制过来,也可以自己编写UI。
报错消失。现在运行程序。
运行结果如下