【1】安卓上部署深度学习模型【MNN,NCNN】

前言:本文适合想要把深度学习模型部署到安卓手机上,但又不想学习java的开发者;复刻别人的整个项目,换成自己的模型,魔改他们的项目。

ps: 吐槽一下,当小厂的算法开发太苦啦,py/c++/java都要会,从爬虫收集数据->查文献->复现文献->各种边缘设备部署都要会,简直要全能啊。

先看成品,左边nanodet,右边直线检测结果

【1】安卓上部署深度学习模型【MNN,NCNN】_第1张图片------------------ 【1】安卓上部署深度学习模型【MNN,NCNN】_第2张图片

本文用到的模型

  1. 请跑通lanedetect,其中一个是原版C++实现的直线检测,另外一个是给安卓使用的C++代码。
  2. 本文的安卓项目

正文

  • 下文统称nanodet为老项目,我们建立的项目为新项目
  1. 读者首先需要正确安装android studio(AS),并已经成功把别人的项目安卓到手机上;本文以nanodet项目为例。假设读者已经把他的nanodet部署到手机上了,接下来进行下一步。
  2. 打开AS创建一个新的native C++项目,工程名为tfjtest,直接下一步下一步,finish等待项目构建完成。
  3. 修改新项目下的gradle scripts:
  • 复制老项目中的build.gradle(project)内的所有内容替换新项目中的build.gradle(projects).
  • 复制老项目中的build.gradle(module)内的所有内容替换新项目中的build.gradle(module);
  • gradle-wrapper.properties全部替换。
  • setting.gradle全部替换。
  • local.properties全部替换。
  1. 进入src/main中,把lanedetect提供的mlsd_with_max_sigmoid.mnn放入assets中,没有这文件夹就创建,下同;
  2. 进入src/main/cpp中,把nanodet它里面对应的mnn和opencv文件夹拷贝过来;进入mnn文件夹,用自己编译出来的 build_64/libMNN.so替换掉arm64-v8a/libMNN.so. build_32/libMNN.so替换掉armeabi-v7a/libMNN.so,用自己编译出来的MNN头文件替换掉原来的mnn/include。
  3. 编写自己的cmakelists.txt(按照我给的稍微修改)。
  4. 把我提供的lanedetect_mnn_android中的lane.cpp和lane.hpp放到当前文件下。
  5. 把旧项目中的jni_interface.cpp拷贝过来,这是java调用C++的接口文件,这里面主要修改的有:Java_com_wzt_mnn_model_NanoDet_init 改为 Java_com_example_tfjtest_model_LaneDetect_init 这个意思是java/com/example/tfjtest/model/LaneDetect中有个init函数;同理修改Java_com_wzt_mnn_model_NanoDet_detect改为Java_com_example_tfjtest_model_LaneDetect_detectNanoDet改为LaneDetectauto box_cls = env->FindClass("com/wzt/mnn/model/BoxInfo") 改为 auto line_cls = env->FindClass("com/example/tfjtest/model/LaneInfo");; 以及auto cid = env->GetMethodID(box_cls, "", "(FFFFIF)V");改为auto cid = env->GetMethodID(line_cls, "", "(FFFFFF)V");(FFFFFF)这个表示LaneInfo中的成员变脸的类型。还有这个jobject obj = env->NewObject(box_cls, cid, box.x1, box.y1, box.x2, box.y2, box.label, box.score);改为jobject obj = env->NewObject(line_cls, cid, line.x1, line.y1, line.x2, line.y2, line.lens, line.conf); 这是直线的类型。读者可自行对照修改。
  6. 在com.example.tfjtest创建activity和model文件夹,把旧项目这里面的四个文件拖过来。MainActivity里主要修改阈值/调整阈值的那个bar/画直线图这些,读者可根据我的安卓项目做对应做修改。
  7. welcome activity里修改个模型名称。
  8. model下的两个文件修改为我安卓工程中的文件。
  9. 构建工程!!!!

若有问题,你可以单独构建两个本文提供的两个安卓项目直线检测和nanodet,相信你一定可以的 : >

最后,祝读者一次成功~!

更新

完成直线检测ncnn安卓部署:

  • 参考的目标检测ncnn安卓项目: https://github.com/nihui/ncnn-android-nanodet
  • 我魔改的直线检测安卓项目:https://github.com/TnoobT/lanedetect_android_ncnn
  • 直线检测ncnn C++版本:https://github.com/TnoobT/lanedetect_ncnn
    ( 在我的天玑8100手机上,ncnn fps 11左右,mnn fps 5左右)
    有用的话点个赞,GitHub上给个star吧,谢谢啦 : >

你可能感兴趣的:(深度学习模型手机部署,android,深度学习,部署,mnn,ncnn)