手把手教你OPENCV FOR ANDROID 之二_ android开发环境搭建

原文地址:http://blog.csdn.net/tu_tustudio/article/details/8463119


参考:

http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/O4A_SDK.html

这片文章是介绍如何安装和配置 OpenCV4Android SDK 的,这下总算到正题了。

 

环境:win7 家庭版(32位)

 

在文章开始之前,假定你已经看过第一篇文章,已经安装和配置好了以下内容:

Ø  JDK

Ø  Android SDK and NDK

Ø  Eclipse IDE

Ø  ADT and CDT plugins for Eclipse

 

番外篇:

如果你看第一篇的时候,直接安装的Tegra Android Development Pack,那你可以直接去看例子了:

http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/O4A_SDK.html#running-opencv-samples

不送了哈,慢走。

 

 

 

基本信息:

 

OpenCV4Android SDK package的目录结构如下

 

OpenCV-2.4.3-android-sdk

|_ apk

|   |_ OpenCV_2.4.3_binary_pack_armv7a.apk

|   |_ OpenCV_2.4.3_Manager_2.0_XXX.apk

|

|_ doc

|_ samples

|_ sdk

|    |_ etc

|    |_ java

|    |_ native

|          |_ 3rdparty

|          |_ jni

|          |_ libs

|               |_ armeabi

|               |_ armeabi-v7a

|               |_ x86

|

|_ license.txt

|_ README.android

 

 

sdk目录: 包含了OpenCV forandroid开发的API 和库文件

 

sdk/java: 目录包含了一个android库项目,用以导入eclipse工作空间,以便调用opencv的java api;

 

sdk/native: 包括opencv c++的头文件(为jni代码提供的), 本地android库文件(*.so和*.a),库文件有ARM-v5,ARM-v7a 和 x86 三种架构;

 

sdk/etc: 包含Haar和LBP,Haar:Haar-LinkFeatures/哈尔特征;LBP: Local Bin Patterns/基于兴趣点多特征融合;简单的说,这是两类物体识别算法,更详细的求您别问我,我答不上来了;

 

apk: 使用了opencv库的android程序管理包,这个需要按照你手机的实际芯片情况来选择相应版本手工安装,除非你可以连接上google play自动安装;

 

samples:没啥,就是存放的例子

 

doc:OpenCV的各式文档,pdf格式的,当然你也可以看在线的:http://docs.opencv.org.

 

从OpenCV4Android SDK v2.4.3开始使用 OpenCV ManagerAPI 进行库的初始化。OpenCV Manager是一个android服务,有以下的用处:

a. 压缩apk大小,所有程序使用同样的二进制代码,而不是各自使用各自的本地库;

b. 所有支持平台上自动进行特定的硬件优化;

c. 自动更新和bug修复;

d. opencv库已被信任,所有调用opencv库的包apk可以直接发布到googleplay上;

 

想看看OpenCV Manager的其他信息,可以看看:

Slides:
https://docs.google.com/a/itseez.com/presentation/d/1EO_1kijgBg_BsjNp2ymk-aarg-0K279_1VZRcPplSuk/present#slide=id.p

参考手册:http://docs.opencv.org/android/refman.html

 

 

人工安装 OpenCV4Android SDK

 

说了半天,终于到正题了:

 

下载地址,我是找的差不多是最新的版本:

http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.3/

 

这一页上有三个版本:

2012-12-25的v2.4.3.2;

2012-11-30的v2.4.3.1;

2012-11-02的v2.4.3

 

想想,保守一点,下载一个v2.4.3吧,为啥?因为我看到官方文档中举例用的这个版本,safety first。

 

OpenCV-2.4.3-android-sdk.zip下载下来后,解压,示例:

C:\ANDROID\opencv\OpenCV-2.4.3-android-sdk

 

注意:目录中不要包含空格,否则后续会有麻烦

评:什么空格,我连汉字都避免了,恨不得直接放到根目录下面,免得有问题。唉,真是胆小如鼠呀。

 

 

导入opencv库和例子到eclipse

 

启动eclipse选择workspace位置,如果已经设置过工作空间的,设置一下,重新启动eclipse,重新设置工作空间:

004.jpg

 

重新打开eclipse,出现了对话框,要求设置workspace目录,我直接设置为了刚才opencv的解压目录,这真是一个彪悍的做法:

005.jpg

 

 

将opencv库和例子导入工作空间

 

OpenCV库打包后做为android库项目,提供给android项目使用,引用一下就行了。

 

每个例子都是引用了opencv库的普通的android项目,所以要打开例子别忘记了先导入库项目。

 

步骤:

Eclipse—file—import:

General--Existing Projects intoWorkspace--next按钮

 

006.jpg

 

 

点击了finish以后,加载了所有选择项目到工作空间,开始了疯狂编译,你需要等等。

 

看了看我的情况,遭遇编译错误:

Console窗口:

007.jpg

 

Problems窗口:

008.jpg

 

我的天,我得罪谁了,28个错误,7个告警。

 

再看看官方文档:

注意:有时会出现编译错误,那你需要:

a. 右键opencv库项目--androidtools--fix project properties;然后project--clean--clean all;

b. 右键有报错的android项目--properties--android,确认编译目标是android3.0及以上;

c. 在problems视图里面检查编译错误,试试自己搞定(这有点推卸责任哈)

 

完成a后,仍然一堆的错误,少掉了3个,看看gen上面有个红叉,点进去一看:

 

OpenCVEngineInterface.java 代码里面都是一类错误,类似:

 

The method getLibraryList(String) of typeOpenCVEngineInterface.Stub.Proxy must override a superclass method

 

处理方法都是,要不你就在父类里面定义一个同名函数,要不你就去掉@Override,我也懒得细看,通通去掉就是了,点击保存,发现提示:

 

[2012-12-30 14:44:38 - OpenCV Library - 2.4.3] OpenCVEngineInterface.java was modified manually! Reverting to generated version!

 

这意思他看着我人工修改了jva,立刻给恢复回去了。

 

仔细看看编译错误,大致都是因为库项目没有编译成功,其他的例子都要使用编译结果库文件,所以都跟着瞎起哄,报了一堆的错误出来,只要解决掉库项目的编译就搞定了关键一步,仔细核了一下库项目的报错,一共六个,都是类似的,大概就是下面的样子:

The method asBinder() of type OpenCVEngineInterface.Stub must override a superclass method
OpenCVEngineInterface.java
/OpenCV Library - 2.4.3/gen/org/opencv/engine   line 35      Java Problem

 

仔细琢磨了一下,估计是jdk的缘故,查了一下compile的jdk是1.5版本的,改成1.6的,果然顺利搞定了。

操作:右键项目—属性—java compiler—配置为1.6

009.jpg

 

顺带检查一下自己的eclise—windows---preference—java—compiler版本,之前改的是项目的编译器版本。

 

因为勾选了自动编译的,这一下子错误减少到了3个,看看最后三个长啥样,都类似的:

Android NDK: WARNING: APP_PLATFORM android-9 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml

 

把AndroidManifest.xml中的

<uses-sdk android:minSdkVersion="8"/>

改为了

<uses-sdkandroid:minSdkVersion="9" />

 

重新整理了一遍,所有的项目的compiler统统改为1.6,所有的AndroidManifest.xml的minSdkVersion全部从8改为9。Project—clean—all,重新编译后,只有7个告警了,OK,DONE!

 

 

出来混终归是要还的

 

在第一篇中,想着cmd下敲命令行编译android应用中的c++代码是多么的惬意,不用配置那么大一堆的eclipse环境,现在有闲情雅致,得,补上吧。

 

仔细看下来,其实很简单,以tutorial-3-native为例,为啥要以它为例?看看代码目录你会发现它有jni目录,下面有两个mk文件和一个cpp文件,还不明白?cpp文件是调用了opencv的库,这个c++代码文件需要c++来编译,所以我得以它为例。

 

1. New -> Other -> C/C++ ->Convert to a C/C++ Project

 

2. 选择 tutorial-3-native 转换

“Project type” = Makefile project

“Toolchains” = Other Toolchain

 

3. Project Properties -> C/C++ Build

${NDKROOT}/ndk-build.cmd

 

当然要先创建环境变量:NDKROOT

 

4. Behaviour tab and change “Workbenchbuild type”

 

点击OK就开始编译这个c++文件了

 

5. 为了避免c++文件中提示代码错误

 

Project Properties -> C/C++ General-> Paths and Symbols

添加:

# for NDK r8b and later:

${NDKROOT}/platforms/android-9/arch-arm/usr/include

${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include

${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include

${ProjDirPath}/../../sdk/native/jni/include

 

你看着文字费劲不?要是觉得费劲,刚才我不是导入编译了例子了吗,你右键看看例子tutorial-3-native 的配置就行了,学这个干啥?你如果需要编写c++本地代码来调用opencv库,新建项目可是没现成配置可拣的,这部分东西你就能用上了。

 

 

运行例子

 

以tutorial-2-opencvcamera为例,为啥捏,当然是拣软柿子捏啦,人官方网站上就是用这个例子演示的。

 

face-detection, Tutorial 3和Tutorial 4三个例子包括了本地代码(c++),所以需要ndk和cdt。

 

注意:最好用真机。

 

运行android程序,会吧?不会?自己上网查吧。

我的手机是三星的I699

 

执行的情况如下:

[2012-12-30 18:58:41 - OpenCV Tutorial 2 - Use OpenCV Camera] ------------------------------

[2012-12-30 18:58:41 - OpenCV Tutorial 2 - Use OpenCV Camera] Android Launch!

[2012-12-30 18:58:41 - OpenCV Tutorial 2 - Use OpenCV Camera] adb is running normally.

[2012-12-30 18:58:41 - OpenCV Tutorial 2 - Use OpenCV Camera] Performing org.opencv.samples.tutorial2.Sample2NativeCamera activity launch

[2012-12-30 18:58:46 - OpenCV Tutorial 2 - Use OpenCV Camera] Uploading OpenCV Tutorial 2 - Use OpenCV Camera.apk onto device 'I69949030899'

[2012-12-30 18:58:46 - OpenCV Tutorial 2 - Use OpenCV Camera] Installing OpenCV Tutorial 2 - Use OpenCV Camera.apk...

[2012-12-30 18:58:48 - OpenCV Tutorial 2 - Use OpenCV Camera] Success!

[2012-12-30 18:58:48 - OpenCV Tutorial 2 - Use OpenCV Camera] Starting activity org.opencv.samples.tutorial2.Sample2NativeCamera on device I69949030899

[2012-12-30 18:58:48 - OpenCV Tutorial 2 - Use OpenCV Camera] ActivityManager: Starting: Intent { act=android.intent.action.MAIN }

 

看看手机,这个样子:

010.jpg

 

 

如果你安装了google play market,点击yes,自动安装opencv manager和相应的opencv二进制包,如果没有安装的话,就跟我一样,手工安装吧。

 

注意:

armeabi, armv7a-neon, arm7a-neon-android8,mips 和 x86 平台:

armeabi : ARM v5 和 ARM v6 架构,适用于Android API 8+

armv7a-neon : NEON-optimized ARM v7 架构,适用于Android API 9+,

arm7a-neon-android8 : NEON-optimized ARM v7架构,适用于 Android API 8,

mips : MIPS 架构,适用于 Android API9+,

x86 : Intel x86 CPUs 架构,适用于AndroidAPI 9+.

 

查看手机的CPU架构类型方法:

C:\Users\xxx>adb shell getprop ro.product.cpu.abi

armeabi-v7a

要是你的adb找不到,就加上adb的全路径吧,在android-sdk\platform-tools下

 

我的系统是android2.3.3,也就是android api 9+(准确的说是api10)了,打开opencv的目录,在apk下找找opencvmanager的相应包:

C:\LHANDROID\opencv\OpenCV-2.4.3-android-sdk\apk 的目录

 

2012/11/02  21:50    <DIR>          .

2012/11/02  21:50    <DIR>          ..

2012/11/02  20:07         4,393,235 OpenCV_2.4.3_binary_pack_armv7a.apk

2012/11/02  21:49         4,920,487 OpenCV_2.4.3_Manager_2.0_armeabi-v7a.apk

2012/11/02  19:56         4,694,322 OpenCV_2.4.3_Manager_2.0_armeabi.apk

2012/11/02  19:52         5,714,504 OpenCV_2.4.3_Manager_2.0_mips.apk

2012/11/02  19:46         5,206,052 OpenCV_2.4.3_Manager_2.0_x86.apk

               5 个文件     24,928,600 字节

               2 个目录 311,142,825,984 可用字节

 

最接近就是OpenCV_2.4.3_Manager_2.0_armeabi-v7a.apk了,不管了,安装吧。

adb install C:\opencv\OpenCV-2.4.3-android-sdk\apk \OpenCV_2.4.3_Manager_armv7a-neon.apk

安装情况:

C:\opencv\OpenCV-2.4.3-android-sdk\apk>adb install C:\LHANDROID\opencv\OpenCV-2.4.3-android-sdk\apk\OpenCV_2.4.3_Manager_2.0_armeabi-v7a.apk

3980 KB/s (4920487 bytes in 1.207s)

        pkg: /data/local/tmp/OpenCV_2.4.3_Manager_2.0_armeabi-v7a.apk

Success

 

好了,再来一次,搞定了,结果嘛,就是这个样子的。

011.jpg

 

就是在拍照的预览上面加了几个字:OpenCV+ Android,然后可以实现灰度和线条的显示效果,灰度的见过啦,不过那种线条的视频效果倒是第一次见。

 

迫不急待的试了下人面识别,效果不好,识别结果不对,不知道是什么原因,回头再琢磨吧。

 

好了,告一段落吧,dismissed!88

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值