OpenCV4Android 之 OpenCV4Android SDK
本篇是 OpenCV4Android 三篇系列之二 —— OpenCV4Android SDK
教程旨在帮助大家安装和配置OpenCV4Android SDK。
这篇指南以Windows 7配置为基础,但是它也同样适用于GUN linux 和 Apple Mac系统。
教程假定你已经安装和配置了如下的软件:
- JDK
- Android SDK and NDK
- Eclipse IDE
- ADT and CDT plugins for Eclipse
如果你需要任何以上的帮助,可以参考我的译文Android 开发简介,或者访问官方文档教程Introduction into Android Development。
如果你在下面的步骤中不幸的遇到了问题,请通过OpenCV4Android 讨论组或者OpenCV 的Q&A forum联系我们,我们将尽我们最大努力帮你解决问题。
Tegra Android 开发包用户
你可能使用了由 NVIDIA 发布的Tegra Android Development Pack (TADP)Android开发包,除了Android开发工具外,TADP 2.0 还包括了OpenCV4Android SDK,所以它已经安装在你的系统上了,你完全可以忽略教程的运行OpenCV样例部分。
更多的关于TADP的细节请移步Introduction into Android Development 。
概述
OpenCV4Android SDK包能够让Android应用程序访问OpenCV库。
库的结构如下:
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 文件夹包含 Android 的 OpenCV API 和库:
- sdk/java 文件夹包含了一个 Android 的 Eclipse 工程库,该库通过 import 到用户的工作空间来提供了Java API接口。
- sdk/native 文件夹包含了 OpenCV C++ 头文件(为了JNI代码)和 Android 库(*.so 和 *.a) 为不同的 CPU 体系结构,如:ARM-v5, ARM-v7a 和x86 。
- sdk/etc 文件夹包含了 Haar 和 LBP 级联分类器。
- apk 文件夹包含了Android 的发布包,它应该被安装在目标Android 设备上以保证能够通过OpenCV Manager API 来访问 OpenCV 库。
当设备第一次使用 OpenCV Manager API 时,设备要求用户从Google Play Market上下载 Manager.apk 。没有网络或者在虚拟机上就需要手动的安装。详细访问:怎么选择合适版本的OpenCV Manager
- samples 文件夹包含了一些样例应用程序工程和它们的构建包(APK)。Import 它们到 Eclipse 工作空间然后可以浏览代码从而学习怎样在 Android上使用 OpenCV。
- doc 文件夹包含了不同的 OpenCV 文档,它们都是 PDF 格式的,同样可以访问官网。
自从OpenCV 2.4.3 开始,OpenCV4Android SDK 为库的初始化使用了OpenCV Manager API。OpenCV Manager一项 Android 服务,它为 OpenCV 应该程序的开发者提供了如下的好处:
- 压缩了apk的大小,因为所有的程序使用相同的来自Manager二进制库,所以它们各自不需要存储libs 从而减少体积。
- 软件特殊优化可以自动支持所有平台。
- 可信的 OpenCV 库资源,OpenCV 的所有包都发布在 Google Play上;额外的关于OpenCV Manager 请访问:
- Slides
- Reference Manual
手动配置 OpenCV4Android SDK
获取 OpenCV4Android SDK
1. 访问OpenCV的下载页面 SourceForge然后下载最新的版本。
2. 为OpenCV开发新建文件夹,教程中,我们解压 OpenCV SDK 到 C:\Work\OpenCV4Android\ directory。
3. 解压SDK包到选择的目录中。
导入 OpenCV 库到和样例到 Eclipse
1. 打开Eclipse,选择工作空间位置
建议大家新建一个新的工作空间,然后开始操练 OpenCV for Android。如下图所示:
2. 导入 OpenCV 库和样例程序到工作空间。
OpenCV 库已经被打包成了一个Android 库工程,以便被其它Android 程序调用。
SDK 中的每一个样例程序都已经引用了OpenCV 库。下面我们来把来把它们导入到工作空间吧。(注:OpenCV 样例程序依赖于 OpenCV 库工程,所以不要忘记把库导入到工作空间)
- 右击窗口Package Explorer ,然后选择在内容菜单里选择Import...
- 在主面板上选择 General ‣ Existing Projects into Workspace ,然后单击 Next 按钮。
- 在 Select root directory 定位你的 OpenCV 包文件夹。 Eclipse 能够在动的找到 OpenCV 库和样例程序。
-
- 点击 Finish 按钮就可以结束导入操作了。
点击按钮后,Eclipse 会加重所有选择的工程到工作空间,由于需要初始化来构建 OpenCV 样例,可能会消耗一段时间。
警告
当导入初始化后,在非Windows 操作系统上 (Linux and Mac OS) Eclipse 将仍然会在本地 C++ 代码中显示构建错误。为了解决这个问题,请按下面的步骤操作:
打开Project Properties -> C/C++ Build, 然后把 "Build command" 文本区的内容替换为 "${NDKROOT}/ndk-build" (把末尾的.cmd去掉).
注意
有些情况下构建错误不会显示,可以尝试下面的操作:
- 右击 OpenCV Library 项目-> Android Tools -> Fix Project Properties, 然后菜单 Project -> Clean... -> Clean all
- 右击有错误的项目 -> Properties -> Android, 确保目标被选中且版本为 Android 3.0 或者更高。
- 在 Problems 试图窗口中检查错误,然后自己努力解决它。
一旦 Eclipse 完成了构建后你的工作空间将没有错误,如下:
运行 OpenCV 样例
此刻我们将要构建和运行样例,不过要时刻记住,face-detection 和 Tutorial 2 – Mixed 包含了一写本地代码,因此需要 Android NDK 和 NDK/CDT 插件。如果你还没有安装这些工具的话,请访问相应的部分 Introduction into Android Development。或者访问我的译文 OpenCV4Android 之 Android 开发简介。
警告:样例中可以通过 AVD (安卓虚拟设备)访问 Android Java Camera API, 但是使用了本地代码的样例通过虚拟设备可能会出问题。
注意:Recent Android SDK tools, revision 19+ can run ARM v7a OS images but they available not for all Android versions
好了,开始运行例子吧。非常简单滴。
- 用adb 工具连接你的设备或者创建一个支持相机的虚拟机。
- 选择你想运行的工程按 Ctrl + F11 运行或者在菜单中选择选项 Run ‣ Run,也可以按工具栏中的 Run 按钮。
注意:Android 虚拟机起动很慢,所以耐心点吧。或许可以喝杯咖啡。
- 第一次运行 Eclipse 可能会询问你想运行的应用程序的类型:
- 选择 Android Application 选项 并按 OK 按钮。Eclipse 将会安装和运行程序。
起动是如果你没有安装 OpenCV Manager包的话,将会看到下面的提示信息。
为了解决这个问题,需要安装 OpenCV Manager 和 适当的OpenCV 包。不过你只需要单击 Yes 按钮,Manager 包将会从 Google Play 下载。
如果你访问不了谷歌市场的话,你也可以到 OpenCV4Android SDK 文件夹中手动安装。具体的请访问 How to select the proper version of OpenCV Manager 了解吧。
<Android SDK path>/platform-tools/adb install <OpenCV4Android SDK path>/apk/OpenCV_2.4.9_Manager_2.18_armv7a-neon.apk
- 样例 Sample - image-manipulations运行结果如下:
下一步该做什么? OpenCV4Android SDK
现在,你已经配置好了 OpenCV4Adroid SDK ,下面可以把 OpenCV 应用到自己的程序中去了。你将在 Android Development with OpenCV 部分学习到具体怎么去做。