• Stars
    star
    130
  • Rank 277,575 (Top 6 %)
  • Language
    C
  • Created over 6 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

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端复现.