Android—yolov3目標(biāo)檢測(cè)移植

前言

最近論文剛剛寫(xiě)完,終于可以做一些自己喜歡的東西了奠蹬,Happy朝聋。之前學(xué)過(guò)一段時(shí)間Android, 感覺(jué)移動(dòng)端App開(kāi)發(fā)和PC上的軟件,比如Qt, 存在很大的不同罩润,App開(kāi)發(fā)更好玩一些玖翅,而且實(shí)用價(jià)值也比較大。

Yolov3是一個(gè)非常棒的深度學(xué)習(xí)目標(biāo)檢測(cè)算法割以,如果Yolov3與Android相遇金度,那yolov3就可以發(fā)揮更大的價(jià)值,而不僅僅停留在實(shí)驗(yàn)室严沥, 在此基礎(chǔ)上可以開(kāi)發(fā)出許多有趣的App:

  • 比如采用Yolov3識(shí)別游戲中的角色,游戲輔助
  • 行人檢測(cè)識(shí)別
  • 食物檢測(cè)識(shí)別
    ......

本文主要內(nèi)容:基于NCNN庫(kù)實(shí)現(xiàn)Android端Yolov3深度學(xué)習(xí)目標(biāo)檢測(cè)

說(shuō)明一點(diǎn)猜极,本文不是直接將darknet yolov3移植到android上,考慮到性能采用ncnn庫(kù)

  • NCNN庫(kù)編譯
  • Android工程搭建
  • Android端 opencv配置
  • JNI Java C++參數(shù)傳遞

開(kāi)發(fā)環(huán)境

  • Ubuntu 18.04
  • Android Studio 3.2, with android ndk r16b
  • ncnn

App效果圖

1.png

App主頁(yè)面消玄, 需要?jiǎng)討B(tài)申請(qǐng)權(quán)限

2.png

App主頁(yè)面跟伏, 一個(gè)大大的darknet logo,背景純黑色翩瓜,是不是很酷

3.png

第二個(gè)界面受扳, 選擇圖像, 目標(biāo)檢測(cè)經(jīng)典圖片

4.png
5.png
6.png

這里可以設(shè)置多線程兔跌,線程數(shù)量

7.png

這是檢測(cè)結(jié)果勘高, 檢測(cè)識(shí)別到汽車Car

8.png

每一項(xiàng)可以點(diǎn)擊進(jìn)去,查看詳情

9.png

繪制的檢測(cè)結(jié)果


Android端Yolov3實(shí)現(xiàn)

NCNN庫(kù)編譯

NCNN庫(kù)是騰訊優(yōu)圖的一個(gè)開(kāi)源深度神經(jīng)網(wǎng)絡(luò)計(jì)算庫(kù)坟桅,專為移動(dòng)平臺(tái)加速华望。
https://github.com/Tencent/ncnn

開(kāi)源工程已經(jīng)編譯好了Android平臺(tái)的靜態(tài)庫(kù),可以直接用仅乓。但是考慮到實(shí)際開(kāi)發(fā)編譯環(huán)境的不同赖舟,因此最好自己編譯一次。


image.png

編譯的詳細(xì)步驟:


image.png
image.png

image.png

具體步驟見(jiàn)官網(wǎng)夸楣,這里我就說(shuō)一下踩過(guò)的坑:

  • Android NDK版本

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

在安裝Android SDK時(shí)候,ndk默認(rèn)安裝在sdk/ndk-bundle目錄豫喧, 具體的版本號(hào)在Android studio SDK Manager/SDK Tools中可以查看洞慎。

android sdk目錄
android ndk目錄

除了使用Android SDK自帶的ndk之外,還可以手動(dòng)下載Android ndk, 解壓在一個(gè)目錄嘿棘。

image.png

image.png

在Ubuntu上只要配置好Android ndk就可以編譯好nccn庫(kù)劲腿,如圖:


image.png
image.png
image.png

目前Android手機(jī)普遍支持64bit, 所以一般編譯出兩個(gè)版本的lib

版本 平臺(tái)
armeabi-v7a ARM 32bit庫(kù)
arm64-v8a ARM 64bit庫(kù)

opencv的導(dǎo)入

需要下載oepncv for android sdk


image.png

image.png
image.png

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

類型 作用
java opencv java類,接口
native C++ 鏈接庫(kù)
image.png

opencv中包含諸多編譯好的鏈接庫(kù):

類型 描述
arm64-v8a ARM 64bit
armeabi ARM 早期的二進(jìn)制接口ABI
armeabi-v7a ARM 32bit
mips others
x86 Intel x86 cpu架構(gòu)
x86_x64 Intel x86 64bit CPU

一般的Android手機(jī)鸟妙,大多數(shù)使用這兩足以:

  • armeabi-v7a
  • arm64-v8a

動(dòng)態(tài)鏈接庫(kù)


image.png

本工程中焦人,在Java層以及C++層同時(shí)導(dǎo)入opencv庫(kù)

  • Java層: 導(dǎo)入opencv-android-sdk/sdk/java 模塊
  • C++層: 在CMakeList.txt中引入

Java層引入opencv

File->New->Import Module

image.png
image.png

image.png

導(dǎo)入之后挥吵,修改sdk版本,與 Module:app的版本保持一致花椭。然后在Project Structure中導(dǎo)入Module


image.png

image.png

image.png

image.png

image.png

C++層導(dǎo)入opencv

通過(guò)配置CMakeList.txt即可

image.png
image.png

image.png

最后忽匈,將so復(fù)制到android工程:


image.png

image.png
image.png

Android工程搭建

進(jìn)行android開(kāi)發(fā)采用的工具Android Studio, AS比較卡,吃內(nèi)存矿辽, 編譯時(shí)間巨慢丹允。Ubuntu系統(tǒng)還好些,比windows快很多袋倔。

image.png

因?yàn)镹CNN庫(kù)是C++實(shí)現(xiàn)的雕蔽,因此在創(chuàng)建Android工程時(shí)候務(wù)必選擇 include C++, C++版本一般選C++14, C++11即可。這是已經(jīng)完工之后的Android工程宾娜。
工程包含3個(gè)Module:

  • app
  • openCVLibrary343
  • yolov3

其中app是創(chuàng)建工程自帶的批狐,一些啟動(dòng)界面包含于此;openCVLibrary343是在opencv官網(wǎng)下載的, opencv for android sdk, 里面包含大量Java opencv 類實(shí)現(xiàn)前塔,以及編譯好的動(dòng)態(tài)鏈接庫(kù) opencv_java3.so; yolov3模塊是自己新建的嚣艇,包含yolo目標(biāo)檢測(cè)算法的實(shí)現(xiàn)以及Java接口的封裝, 創(chuàng)建一個(gè)yolo模塊的目的是可以往不同工程中直接導(dǎo)入华弓,方便移植食零。

image.png

模塊的導(dǎo)入


image.png

NCNN庫(kù)引入

引入ncnn庫(kù)的目的是加載yolov3網(wǎng)絡(luò),網(wǎng)絡(luò)模型寂屏,進(jìn)行forword計(jì)算慌洪。

ncnn庫(kù)的導(dǎo)入比較簡(jiǎn)單:

  • 將include復(fù)制到cpp目錄
  • 將libncnn.a復(fù)制到armeabi-v7a, arm64-v8a
  • 在CMakeList.txt中引入
image.png
image.png
image.png
image.png
image.png

此CMakeList.txt文件根據(jù)配置將生成libyolo.so動(dòng)態(tài)鏈接庫(kù)。


此篇主要是工程配置凑保,后續(xù)再寫(xiě)代碼實(shí)現(xiàn)...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市涌攻,隨后出現(xiàn)的幾起案子欧引,更是在濱河造成了極大的恐慌,老刑警劉巖恳谎,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芝此,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡因痛,警方通過(guò)查閱死者的電腦和手機(jī)婚苹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸵膏,“玉大人膊升,你說(shuō)我怎么就攤上這事√菲螅” “怎么了廓译?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵评肆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我非区,道長(zhǎng)瓜挽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任征绸,我火速辦了婚禮久橙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘管怠。我一直安慰自己淆衷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布排惨。 她就那樣靜靜地躺著吭敢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪暮芭。 梳的紋絲不亂的頭發(fā)上鹿驼,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音辕宏,去河邊找鬼畜晰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瑞筐,可吹牛的內(nèi)容都是我干的凄鼻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼聚假,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼块蚌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起膘格,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤峭范,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瘪贱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纱控,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年菜秦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甜害。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡球昨,死狀恐怖尔店,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤闹获,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布期犬,位于F島的核電站,受9級(jí)特大地震影響避诽,放射性物質(zhì)發(fā)生泄漏龟虎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一沙庐、第九天 我趴在偏房一處隱蔽的房頂上張望鲤妥。 院中可真熱鬧,春花似錦拱雏、人聲如沸棉安。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贡耽。三九已至,卻和暖如春鹊汛,著一層夾襖步出監(jiān)牢的瞬間蒲赂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工刁憋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滥嘴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓至耻,卻偏偏與公主長(zhǎng)得像若皱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尘颓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容