學習android的目的是想在手機上實現計算機視覺的算法。一般算法的研究都是在Matlab上進行,但是手機平臺沒有那麼多的計算資源,用matlab顯然是不太現實的。而OpenCV是基於C++語言編寫的,可用於開發實時的圖像處理、計算機視覺以及模式識別程序。
一:需要的工具
在前面的章節中,我們已經搭建好android,現在我們需要android支持OpenCV,需要哪些工具呢?首先android是基於java開發的,而Opencv是基於C++,所以這兩者之間需要工具來相互支持。這一工具是android NDK,而我們需要把一些OpenCV庫編譯成.so動態庫(linux下的動態鏈接庫),需要Cygwin,而在eclipse下開發C++需要安裝CDT。另外最重要的是需要計算機視覺算法的一些API,這就需要安裝OpenCV4Android。
1.Android NDK
1.1. 基本介紹
Android NDK(Native Development Kit )是一套工具集合,允許你用像C/C++語言那樣實現應用程序的一部分。Google僅在極少數情況下建議使用NDK,有如下使用場景:
- 必須提高性能(例如,對大量數據進行排序)。
- 使用第三方庫。舉例說明:許多第三方庫由C/C++語言編寫,而Android應用程序需要使用現有的第三方庫,如Ffmpeg、OpenCV這樣的庫。
1.2 安裝
下載地址:https://developer.android.com/tools/sdk/ndk/index.html
下載的版本是android-ndk-r10c-windows-x86_64.exe。
環境變量:將下載的文件解壓,比如我的目錄是D:\android-ndk-r10c,將這一目錄放在系統變量的Path裏頭。
測試:在cmd下輸入NDK-build,如果出現下面的界面表示安裝成功
2.Cygwin (可以不用安裝,官方教程上面不需要)
用途:在windows上運行類Unix系統。
3.CDT
一般安裝eclipse時都會安裝好CDT
4.OpenCV4Android
下載地址:http://sourceforge.net/projects/opencvlibrary/files/opencv-android/
教程:http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/O4A_SDK.html#
官方教程上的工具
-
JDK
-
Android SDK and NDK
-
Eclipse IDE
-
ADT and CDT plugins for Eclipse
二、OpenCV4Android
下載完,解壓,
2.1 目錄結構如圖
OpenCV-2.4.9-android-sdk |_ apk | |_ OpenCV_2.4.9_binary_pack_armv7a.apk | |_ OpenCV_2.4.9_Manager_2.18_XXX.apk | |_ doc |_ samples |_ sdk | |_ etc | |_ java | |_ native | |_ 3rdparty | |_ jni | |_ libs | |_ armeabi | |_ armeabi-v7a | |_ x86 | |_ LICENSE |_ README.android
-
sdk folder: 針對andriod的OpenCV API和庫:
-
sdk/java folder: 一個包含 Android 庫 的Eclipse 項目,能夠 提供OpenCV java API,可以導入eclipse工作空間;
-
sdk/native folder: 包含 OpenCV C++ headers (for JNI code) 和 native Android libraries (*.so and *.a) 可用於 ARM-v5, ARM-v7a and x86 架構;
-
sdk/etc folder :contains Haar and LBP cascades distributed with OpenCV.
-
apk folder :包含用於各個手機架構的OpenCV Manager API,要在手機上跑OpenCV的程序必須安裝,這個API能夠使程序調用OpenCV庫.
-
samples :包括可安裝在手機上的一些android應用程序包括源碼,可導入Eclipse。
-
doc:不用說啦,就是OpenCV的幫助文檔了。
2.2 OpenCV Manager API
基於android服務的解決方案,能夠提供爲OpenCV開發者提供各種好處包括使得開發的APK更加緊湊,因爲所有的應用都是使用相同的binaries,所以沒必要每個程序都保存一份等等。
2.3 導入OpenCV庫和例子到worksapce
file import 選擇目錄,一定要選擇OpenCV-2.4.9-android-sdk 這個根目錄,或者加上sdk--java這個目錄。一定要記得導入OpenCV library,否則會出現OpenCV函數各種紅線。
2.3 選擇C/C++的編譯器
在這些samples中,有些是基於OpenCV java API如image-manipulations,OpenCV C++ API如face-detection。選擇face-detection,選擇project-properties,C/C++ Build ,首先設置Environment,NDKROOT,value爲NDK解壓的目錄,然後設置Build command爲${NDKROOT}/ndk-build.cmd .
2.4 運行OpenCV例子
1.在手機上運行
選擇合適的OpenCV Manager,插上手機,在cmd上輸入命令adb shell getprop ro.product.cpu.abi,就可以看到手機的架構瞭如圖
在手機上裝好OpenCV Manager和OpenCV binary pack(在apk目錄下可以找到)。然後像之前一樣運行,就可以在手機上看到效果了。
2.在模擬器上運行
開好模擬器
在cmd下使用命令adb install <OpenCV4Android SDK path>/apk/OpenCV_2.4.9_Manager_2.18_armv7a-neon.apk安裝OpenCV Manager。
運行samples,由於沒有攝像頭,運行效果如圖。
參考資料:http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/O4A_SDK.html