前言

最近论文刚刚写完,终于可以做一些自己喜欢的东西了,Happy。之前学过一段时间Android, 感觉移动端App开发和PC上的软件,比如Qt, 存在很大的不同,App开发更好玩一些,而且实用价值也比较大。

Yolov3是一个非常棒的深度学习目标检测算法,如果Yolov3与Android相遇,那yolov3就可以发挥更大的价值,而不仅仅停留在实验室, 在此基础上可以开发出许多有趣的App:

比如采用Yolov3识别游戏中的角色,游戏辅助

行人检测识别

食物检测识别

......

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

说明一点,本文不是直接将darknet yolov3移植到android上,考虑到性能采用ncnn库

NCNN库编译

Android工程搭建

Android端 opencv配置

JNI Java C++参数传递

开发环境

Ubuntu 18.04

Android Studio 3.2, with android ndk r16b

ncnn

App效果图

1.png

App主页面, 需要动态申请权限

2.png

App主页面, 一个大大的darknet logo,背景纯黑色,是不是很酷

3.png

第二个界面, 选择图像, 目标检测经典图片

4.png

5.png

6.png

这里可以设置多线程,线程数量

7.png

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

8.png

每一项可以点击进去,查看详情

9.png

绘制的检测结果

Android端Yolov3实现

NCNN库编译

NCNN库是腾讯优图的一个开源深度神经网络计算库,专为移动平台加速。

https://github.com/Tencent/ncnn

开源工程已经编译好了Android平台的静态库,可以直接用。但是考虑到实际开发编译环境的不同,因此最好自己编译一次。

image.png

编译的详细步骤:

image.png

image.png

image.png

具体步骤见官网,这里我就说一下踩过的坑:

Android NDK版本

ndk版本不要太新的,容易出BUG!!!

在安装Android SDK时候,ndk默认安装在sdk/ndk-bundle目录, 具体的版本号在Android studio SDK Manager/SDK Tools中可以查看。

android sdk目录

android ndk目录

除了使用Android SDK自带的ndk之外,还可以手动下载Android ndk, 解压在一个目录。

image.png

image.png

在Ubuntu上只要配置好Android ndk就可以编译好nccn库,如图:

image.png

image.png

image.png

目前Android手机普遍支持64bit, 所以一般编译出两个版本的lib

版本

平台

armeabi-v7a

ARM 32bit库

arm64-v8a

ARM 64bit库

opencv的导入

需要下载oepncv for android sdk

image.png

image.png

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动态链接库。

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

yolov3安卓实现_Android—yolov3目标检测移植相关推荐

  1. 文献3 基于改进型YOLOv3的SAR图像舰船目标检测

    基于改进型YOLOv3的SAR图像舰船目标检测 0.概述 本文主要介绍了新提出的一种改进型YOLOv3的SAR图像船舰目标检测方法,此方法依据船舰尺寸与形状自适应采样的可变形卷积.ResNet50变体 ...

  2. 改进YOLOv3 | IA-YOLO让恶劣天气的目标检测起飞了!!!

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨ChaucerG 来源丨 集智书童 虽然基于深度学习的目标检测方法在传统数据集上取得了良好的效果 ...

  3. 实用教程!使用YOLOv3训练自己数据的目标检测

    点击我爱计算机视觉标星,更快获取CVML新技术 YOLOv3是当前计算机视觉中最为流行的实时目标检测算法之一. 昨天LearnOpenCV网站博主又发福利,post了一个清晰明了的教程,一步一步示例, ...

  4. HISI3559A 使用yolov3 (VI-VPSS-VO)实时目标检测

    使用yolov3 模型进行实时目标检测 主芯片:Hisi3559A 摄像头:imx214 使用海思VI-VPSS-VO进行实时检测 程序修改,将识别图片修改成实时识别视频 ************** ...

  5. 量化版——使用TF Lite将Mobilenet SSD目标检测移植至安卓客户端

    使用TF Lite将Mobilenet SSD移植至安卓客户端 1. 配置 2. 准备工作 2.1 下载 2.1.1 下载models-1.12.0 2.1.2 下载模型 2.1.3 下载tensor ...

  6. 目标检测YOLOv3论文详解

    第二节 YOLOv3 2.1 YOLOv3简介 YOLO系列的目标检测算法可以说是目标检测史上的宏篇巨作,YOLOv3是YOLO (You Only Look Once)系列目标检测算法中的第三版,v ...

  7. Jetson Nano and VIM3硬件参数对比及目标检测性能对比

    文章目录: 1 Jetson Nano and VIM3硬件参数对比及目标检测性能对比 2 Jetson nano在yolov4目标检测性能 3 VIM在yolov3.yolov3-tiny.yolo ...

  8. 它来了,它来了,最强目标检测算法YOLO v4,它真的来了!!!

    YOLO 之父 Joseph Redmon 宣布退出计算机视觉领域,此事引发了极大的热议,其中一个悬念就是:我们还能等到 YOLO v4 吗? 现在,这一目标检测神器出现了新的接棒者!YOLO 的官方 ...

  9. YOLO目标检测算法

    YOLO算法 简介 本文主要介绍YOLO算法,包括YOLOv1.YOLOv2/YOLO9000和YOLOv3.YOLO算法作为one-stage目标检测算法最典型的代表,其基于深度神经网络进行对象的识 ...

  10. 同r做一个窗口_目标检测(Object Detection):R-CNN/SPPnet/R-FCN/Yolo/SSD

    这篇文章我是Survey目标检测(Object Detection)系列论文的一个总结. 包括R-CNN系列.SPP-net.R-FCN.YOLO系列.SSD.DenseBox等. 基本概念 目标识别 ...

最新文章

  1. AWS — AWS 上的 5G 专网部署模式
  2. python保存创建文件报错 with open(fileName,‘w‘) as fp: IOError: [Errno 22] invalid mode (‘w‘) or filename
  3. java外挂源码_2.7 万 Star!Github 项目源码辅助阅读神器
  4. [react-router] react的路由和普通路由有什么区别?
  5. python 元类 详解_Python 元类详解 __new__、__init__、__call__、__metacalss__
  6. Springboot应用中线程池配置教程(2021版)
  7. jdbc连接mysql数据库过程_jdbc连接数据库的步骤
  8. 笨办法学 Python · 续 练习 31:正则表达式
  9. directx和opengl 电子白板
  10. 电影院售票系统mysql表格_电影院售票数据库系统设计.doc
  11. ✨✨✨【C语言】带你用最短的时间刷题(附解题思路、具体代码)不断更新(三)✨✨✨
  12. vscode git提交步骤
  13. java resourcebundle_Java中使用ResourceBundle访问资源文件(properties文件) | 学步园
  14. PayPal注册绑卡使用教程
  15. 大物狭义相对论中的四维时空与闵氏时空图(上)
  16. keyshot手机渲染教程_keyshot渲染教程
  17. 留着以后慢慢做的计算几何(题表)
  18. win10系统c盘C:Users后面的用户名怎么更改
  19. 项目无法识别 ?. 语法,导致报错Module parse failed: Unexpected token
  20. AIC和BIC相关知识

热门文章

  1. C/C++编程笔记:C语言编程知识要点总结!大一C语言知识点(全)
  2. html表头和左侧固定js,固定表头jquery datatable的使用与定制
  3. 计算机考研408每日一题 day161
  4. python内置函数源码中啥都没有_如何查看python内置函数源码
  5. Springboot专利申请服务平台 毕业设计-附源码260839
  6. Tomcat的下载安装及静态部署
  7. 有什么软件可以测试汽车的噪音,汽车噪声测试,汽车通过噪声测试
  8. 金融数据类——外汇,CFD
  9. java转发_Java中Request请求转发详解
  10. 锂离子电池知多少——①正极材料