首页 > 编程知识 正文

boa移植到android,安卓应用移植

时间:2023-05-03 05:58:31 阅读:11610 作者:703

前言

最近刚写完论文,终于能做自己喜欢的东西了。 希望。 我以前学过一段时间安卓,觉得移动端的APP开发和电脑上的软件,比如Qt,有很大的区别,APP开发更开心,实用价值也更大。

Yolov3是一种非常好的深度学习目标检测算法,一旦Yolov3与安卓相遇,Yolov3不仅可以开发实验室,还可以开发很多有趣的App:

例如使用Yolov3识别游戏中的角色,或者辅助游戏

行人检测识别

食物检测识别

.

本文主要内容:基于NCNN库实现安卓端Yolov3深度学习目标检测

说明一下,本文并不是将darknet yolov3直接移植到安卓中,而是在性能的基础上采用ncnn库

NNN库编译

人工智能建设

安卓端opencv配置

传递JNI Java C参数

开发环境

Ubuntu 18.04

安卓studio 3.2,with安卓ndk r16b

ncnn

“APP效果图”

1.png

需要APP主页、动态申请权限

2.png

在APP主页,大Darknet徽标,背景是纯黑的,帅吗

3.png

第二个接口选择图像,目标检测经典图像

4.png

5.png

6.png

您可以在此设定多线程、线程数

7.png

这是检测结果,检测识别了汽车Car

8.png

各项可以点击查看详细内容

9.png

绘制的检查结果

安卓端Yolov3的实现

NNN库编译

NCNN库是面向移动平台加速发展的开源深度神经网络计算库。

https://github.com/Tencent/ncnn

开源工程已经编译了安卓平台的静态库,可以直接使用。 但是,考虑到实际开发编译环境的差异,最好自己编译一次。

image.png

编译详细步骤:

image.png

image.png

image.png

具体步骤请参照官方网站。 现在,我想谈谈我踩过的洞:

安卓ndk版本

ndk版本不是很新,容易出现错误!

安装Android SDK时,默认情况下ndk安装在sdk/ndk-bundle目录中。 您可以在androidstudiosdkmanager/SDK工具中找到具体的版本号。

安卓SDK目录

安卓ndk目录

除了使用Android SDK附带的ndk外,还可以手动下载Android ndk并将其解压缩到一个目录中。

image.png

image.png

在Ubuntu中,可以通过配置Android ndk来编译nccn库,如图所示。

image.png

image.png

image.png

目前,安卓手机支持64位,因此通常会编译两个版本的lib

版本

平台平台

armeabi-v7a

arm 32位库

arm64-v8a

arm 64位库

opencv部署

需要下载oepncv for android sdk

image.png

image.png

lign="center">

image.png

在opencv sdk目录中包含 java以及native

类型

作用

java

opencv java类,接口

native

C++ 链接库

image.png

opencv中包含诸多编译好的链接库:

类型

描述

arm64-v8a

ARM 64bit

armeabi

ARM 早期的二进制接口ABI

armeabi-v7a

ARM 32bit

mips

others

x86

Intel x86 cpu架构

x86_x64

Intel x86 64bit CPU

一般的Android手机,大多数使用这两足以:

armeabi-v7a

arm64-v8a

动态链接库

image.png

本工程中,在Java层以及C++层同时导入opencv库

Java层: 导入opencv-android-sdk/sdk/java 模块

C++层: 在CMakeList.txt中引入

Java层引入opencv

File->New->Import Module

image.png

image.png

image.png

导入之后,修改sdk版本,与 Module:app的版本保持一致。然后在Project Structure中导入Module

image.png

image.png

image.png

image.png

image.png

C++层导入opencv

通过配置CMakeList.txt即可

image.png

image.png

image.png

最后,将so复制到android工程:

image.png

image.png

image.png

Android工程搭建

进行android开发采用的工具Android Studio, AS比较卡,吃内存, 编译时间巨慢。Ubuntu系统还好些,比windows快很多。

image.png

因为NCNN库是C++实现的,因此在创建Android工程时候务必选择 include C++, C++版本一般选C++14, C++11即可。这是已经完工之后的Android工程。

工程包含3个Module:

app

openCVLibrary343

yolov3

其中app是创建工程自带的,一些启动界面包含于此;openCVLibrary343是在opencv官网下载的, opencv for android sdk, 里面包含大量Java opencv 类实现,以及编译好的动态链接库 opencv_java3.so; yolov3模块是自己新建的,包含yolo目标检测算法的实现以及Java接口的封装, 创建一个yolo模块的目的是可以往不同工程中直接导入,方便移植。

image.png

模块的导入

image.png

NCNN库引入

引入ncnn库的目的是加载yolov3网络,网络模型,进行forword计算。

ncnn库的导入比较简单:

将include复制到cpp目录

将libncnn.a复制到armeabi-v7a, arm64-v8a

在CMakeList.txt中引入

image.png

image.png

image.png

image.png

image.png

此CMakeList.txt文件根据配置将生成libyolo.so动态链接库。

此篇主要是工程配置,后续再写代码实现...

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。