這兩天在踩OpenCV的坑戒洼,需求:在不安裝OpenCV Manager apk的情況下跑通opencv下的人臉檢測demo。寫下此文記錄下丸卷;
注:本文采用opencv下的原始人臉檢測的demo进每,所以里面的c代碼都是原始包名的弟翘,如果你想修改包名則需要自己會jni的知識;如果不太會請看:像小白一樣學習android jni編程 莽红;后面我自己會修改包名重新生成新的so妥畏,如果這部分大家有問題的話,歡迎留言安吁;
openCV—SDK源碼
openCV—SDK下載地址
現(xiàn)在最高版本3.2醉蚁,現(xiàn)在網(wǎng)上部分資料都是采用2.4的sdk,本人親測3.2的版本要比2.4的版本流暢的不要太多鬼店。
下載下來的目錄結(jié)構(gòu)
- apk:OpenCV Manager apk的存放目錄(根據(jù)不同cpu型號有不同的apk請根據(jù)自己的機器cpu型號來對應网棍,一般v7a的就好了)。
- samples:opencv代碼案例里面包括了人臉檢測和其他薪韩。
- sdk:包括了sdk和lib包确沸。
用AS直接導入人臉檢測demo
注:
1:demo是eclipse的,導入的時候可能會有問題俘陷,但是應該是很容易解決的罗捎;
2:一定要導入import moudule opencv java庫。
導入的最后結(jié)果如下圖所示:
在此過程中可能會出現(xiàn)ndk的配置問題:
- ndk的配置拉盾。
1:在gradle.properties中添加
android.useDeprecatedNdk=true
2:在local.properties中添加ndk路徑(是你的ndk安裝路徑)
ndk.dir=D\:\\android\\ndk\\android-ndk32-r10-windows-x86_64\\android-ndk-r10
如果不知道如何配置ndk請自行百度桨菜;
3:在app的build.pradle中添加
sourceSets.main {
jni.srcDirs = ['libs']
}
至此所有的準備工作都已OK了,下面開始實干了捉偏。
實干步驟
-
修改jni下的Android.mk
1:注意前面的“#”號倒得,那特么是注釋的意思,請干掉夭禽。
2:注意這里有2個if else的判斷(我直接去掉判斷了)霞掺,里面include的是opencvsdk中的OpenCV.mk文件,這個修改成你自己的opencv—sdk路徑讹躯;如果mk路徑錯誤在jni編譯的時候會報錯的菩彬;仔細看下錯誤會說明是OpenCV.mk路徑找不到缠劝。
修改之后成
- 導入opencv下的libs
這個時候我們需要將opencvSDK下的libs導入到我們項目中去,這樣我們的項目就不需要安裝OpenCV Manager apk了骗灶。
這里可以只導入你cpu對應的版本即可能減小項目的大小惨恭,但我全部導入了;
- 根據(jù)jni生成so
我們看到j(luò)ni目錄下有h和cpp文件耙旦,這里面就實現(xiàn)了檢測的相關(guān)代碼脱羡,這里我們并不需要動他。
然后我們在jni下ndk_build一下來生成so文件免都。(如果不知道ndk_build的請看我上篇文章或百度)锉罐。
如果這樣就生成了so了,我們可以在項目中看到生成了一個obj的目錄绕娘,
然后我們在將生成的libdetection_based_tracker.so放到j(luò)niLibs下的armeabi-v7a目錄下氓鄙。
至此已經(jīng)完成所有工作。
運行項目
總結(jié)
雖然這個demo簡單业舍,但是在沒使用過opencv的人可能在配置中會出現(xiàn)各種問題抖拦;
1:導入opencv——sdk項目需修改版本號,保持跟app版本一致舷暮;
2:配置ndk(上面有寫到出現(xiàn)的問題)态罪;
3:引用opencv下的libs;在app下直接導入即可下面,不需要再opencvLibrary下導入复颈。
4:生成so;
5:將生成的so放入到j(luò)niLibs下的armeabi-v7a目錄下。
github下載地址
附上github下載地址沥割,此項目是完整項目導入了opencv的sdk,所有有點小大耗啦。
openCV人臉檢測demo下載地址