YOLOV3 On Android Save

Build an Android App for deploying YOLO V3 source code on mobile phone directly.

Project README

I. 介绍

本项目将Yolo-v3的源代码在android studio进行开发编译并且部署到android手机上,实现利用手机硬件平台完成对Yolo-v3网络的调用.项目以Yolo-v3-tiny为例子进行开发,其他相关网络可以通过Darknet网站下载权重文件进行复现.

II. 开发环境

OS: Ubuntu 16.04

Android Studio: 3.1.3

Mobile Phone: Xiaomi MI 8

相关教程:

ubuntu下安装AndroidStudio方法

Andorid Studio官网安装教程

请自行查阅教程完成Android Studio安装以及NDK, SDK等相关开发环境的配置.

III. 项目构建

3.1 源码导入

在Andorid Studio构建一个支持C语言的项目,然后从Darknet下载源代码.

在项目工程的cpp文件夹下新建darknet文件夹,将下载的源码中的example, include, src三个文件夹复制到android工程中.

3.2 源码修改

3.2.1 include文件夹

include文件夹下放置的是darknet的头文件,在头文件开头添加log调试功能.

3.2.2 src文件夹

src文件夹放置darknet源码,首先删除其中的compare.c文件(compare.c无头文件,对整个库的编译不起作用.如果不删除,在编译时compare.c会出现指针问题,无法通过编译).然后修改image.c文件,将232行的load_alphabet()函数中的labels路径改为sdcard/yolo/data/labels(这是随后将在手机上放置文件的绝对路径,不做修改的话真机测试时将出现无法导入labels的问题,导致出现闪退现象).

3.2 Cmake文件配置

关于Cmake的格式和用法,请参考:

官方指南

CMake的基本使用

cmake 基本命令 & 交叉编译配置 & 模块的编写

cmake的使用笔记

本项目中Cmake配置信息请参考代码中CMakeLists.txt文件.

3.3 asserts文件夹配置

将darknet源码中的cfg,data文件放置在项目的assert文件夹下.

官网下载YOLOV3-tiny权重文件并放置在weights文件夹下.

3.4 JNI接口配置

关于在Android Studio 3中如何构建JNI项目,请参考Android Jni/NDK 开发入门详解.

本项目主要修改darknetlib.c文件,其中图片测试代码摘自darknet/examples/dector.c Line562~Line626的官方代码示例.详细信息请参考项目代码及注释.

其中datacfg_str和name_list = "/sdcard/yolo/data/coco.names",是因为项目所使用的预训练模型来自于官网,其中yolo-v3-tiny是用coco训练集训练出的80分类模型,因此name_list需要和预训练模型保持一致.

cfgfile_str和weightfile_str放置cfg文件和weight文件的地址,根据下载的文件位置保持一致即可.

3.5 Java配置

对java文件夹下Yolo.java进行修改,完成相关配置.

IV. 项目运行

在小米8上运行项目,在android studio 3的logcat中可以看到读入的文件信息,以及Yolo-v3-tiny网络的配置.

logcat会打印出预测出的物体名称,概率及处理时间.

在不同的图片上测试,使用手机cpu处理约为一张图耗时0.8s.

参考

项目参考Darknet yolo 在 android studio上的移植和实现,原博主实现的是Yolo-v2的移植,本项目进行修改后实现Yolo-v3版本代码的Android端复现.

Open Source Agenda is not affiliated with "YOLOV3 On Android" Project. README Source: huuuuusy/YOLOV3-on-Android
Stars
128
Open Issues
11
Last Commit
4 years ago

Open Source Agenda Badge

Open Source Agenda Rating