关于英特尔 INDE OpenCV
英特尔® Integrated Native Developer Experience(英特尔® INDE)是一款跨架构办公套件,可为 开发人员提供工具、支持和 IDE 集成,从而帮助他们面向基于英特尔® 架构的 Windows* 和面向 ARM* 和英特尔® 架构的 Android* 创建高性能 C++/Java* 应用。
全新 OpenCV 测试版(具备英特尔 INDE 特性)可兼容全新的开放源 OpenCV 3.0 测 试版(开放源码计算机视觉库: http://opencv.org)。 OpenCV 测试版可为计算机视觉应用开发和生产提供免费二进制,以支持增强摄影、 增强现实,视频摘要等用法。
英特尔® INDE OpenCV 的主要性能包括:
- 可兼容 OpenCV 3.0
- 预先构建和验证的二进制,已清除 IO 保护的构建模块。
- 可轻松借助面向 Windows 和 Android 开发的 IDE 集成功能进行使用与维 护。
- 面向带有异构计算的英特尔® 平台而优化。
本文将着重介绍面向 Android* 创建的支持 OpenCV 的应用。 如果应用的目标操作系 统为 Windows*,请参考 面 向 Windows* 的英特尔 INDE OpenCV 入门。
英特尔 INDE OpenCV(面向 Android* 对象)安装指南
请参考英特尔® INDE OpenCV 快速安装指南,获取安装详情。
测试版英特尔 INDE OpenCV Android* 支持
社区版 OpenCV 3.0 Beta 不提供 Android 支持。 英特尔 INDE OpenCV 提供 预览版 Android 32 位二进制。 发布之时,社区 OpenCV 3.0 API 尚未最终确定(仍为测试版)。 同样,就面向 Android* 对象的英特尔 INDE OpenCV 二进制来说,API 也未最终确定,因此您会发现,随着时间的推移,API 将会发 生细微变化。
部分 OpenCV 3.0 特性仅限于基于 Android* 的 JNI
请注意,就该测试版而言,基于 Android* 的部分重要 OpenCV 3.0 特性仅限于 JNI 。 JNI 表示 Java 原生接口 — 一种应用开发方法,借助 C/C++ 代码通过 JNI 与 其他 Java 通信。
例如,UMat 支持仅在原生 C++ 代码中提供,而不通过 OpenCV Java API 提供。 更 多详情,敬请参考面向英特尔 INDE OpenCV 的 OpenCV 3.0 架构指南。
尽管如此,面向 Android* 的英特尔 INDE OpenCV 预览版二进制也可支持您开发和测 试面向 Android* 对象的应用。
英特尔 INDE OpenCV 组件(面向 Android* 对象)
Intel INDE OpenCV 包含以下面向 Android* 对象的组件:
- 面向 Android*应用开发的就绪型二进制 (x86)
- OpenCV4Android的英 特尔 INDE OpenCV 版本
- 与 Eclipse* 和 Android Studio* IDE 的集成
与英特尔 INDE OpenCV Android* 相关的文件结构如下:
<Intel-OpenCV root dir> (e.g. C:\Intel\INDE\OpenCV) |_sdk - INDE OpenCV “root” folder for Android (x86) |_aar - binary distribution of the INDE OpenCV library (for Android Studio*) |_etc - classifiers data for object detection functions (in xml) |_java - root folder for INDE OpenCV Android (Java) |_3rdparty - 3rd party components libs (like libtiff, libjpeg, etc) |_libs - static (“.a”) and dynamic (“.so”) libraries INDE OpenCV |_res - resource files (strings, icons, etc) for INDE OpenCV |_src - INDE OpenCV Java and application helper classes |_native - root folder for Native INDE OpenCV for Android (for C/C++ dev) |_3rdparty - 3rd party components (like libtiff, libjpeg, etc) |_jni - Native Interface for INDE OpenCV |_include - header files for INDE OpenCV |_libs - static (“.a”) and dynamic (“.so”) libraries INDE OpenCV
英特尔 INDE OpenCV: 可替代 Android* OpenCV Manager
Android* OpenCV Manager (http ://docs.opencv.org/platforms/android/service/doc/index.html) 服务可用 来管理最终用户设备的 OpenCV 库二进制。 该服务使用常量(标记)机制区分 OpenCV 版本,OpenCV 文档对该机制进行了详细介绍。
您可以利用英特尔 INDE OpenCV 版本切换应用。 英特尔 INDE OpenCV 二进 制不通过 Android OpenCV Manager 提供。 如欲启用应用中的英特尔 INDE OpenCV 二进制支持,需为常规 initAsync()呼叫提供特定标记(参阅以下代码示例)。 否则应用将默认使用社区 OpenCV 库。
本章节将通过 Java OpenCV 加载器的 initAsync()方法介绍使用 Android OpenCV Manager 的现有支持 OpenCV 的应用。 借助英特尔 INDE OpenCV,即使二进制通过应用的 *.apk 文件加载,您也可以使用该功能。 借助英特尔 INDE OpenCV Android Studio* 和 Eclipse* 向导创建的应用默认使用该方法。
请注意,英特尔 INDE OpenCV 二进制应明确打包至您应用的结果 *.apk之中。 本文的 IDE 部分将具体 介绍打包二进制的方法。
关于通用机械中的实际二进制加载和相关回调的信息,请访问 http ://docs.opencv.org/platforms/android/service/doc/index.html。 英特尔 INDE OpenCV 的唯一特性是专用版本控制常量。 请考虑下列代码示例(为了清晰起见, 已忽略错误处理):
public void onResume() { super.onResume(); // load INDE OpenCV binaries right from the apk using the specific tag if(!OpenCVLoader.initAsync( OpenCVLoader.OPENCV_INTEL_INDE_VERSION_3_0_0_PREVIEW, this, mLoaderCallback)) { //if failed, report error and exit } }
借助面向 Android Studio* 和 Eclipse* 的英特尔 INDE OpenCV 向导而创建的应用 默认使用准确标记。
使用英特尔 INDE OpenCV IDE 向导创建支持 OpenCV 的应用
英特尔 INDE 是一款面向 Android 的交钥匙开发套件。 安装 INDE 时,英特尔 INDE OpenCV 可支持您借助 Eclipse* 和 Android Studio* IDE 开发计算机视觉应用。
请参考英特尔 INDE OpenCV 快速安装指南,了解各 IDE 的安装详情。
Android Studio* 支持与英特尔 INDE OpenCV: 创建新项目
英特尔 INDE OpenCV 可为 Android Studio* 提供 Java 和 JNI 项目向导。 JNI 指 Java 原生接口。 它是一种应用开发方法,借助 C/C++ 代码通过 JNI 与其他 Java 通信 。 根据 JNI 方法,您的代码可直接使用 C/C++ 中的 INDE OpenCV,与其他原生库类似 。
如欲创建任何类型的应用,
- 可从常规的 Create New Project向导开始 (Ctrl-N)。
- 在 Configure your new project步骤中,明确 Application name,project location等:
在 Select the form factors your app will run on中,选择 Phone and Tablet,并将 API 级别指定为 19,以匹配英特尔 INDE 的一般要求:
选择(纯 Java)Intel INDE OpenCV Project或 Intel INDE OpenCV JNI Project:
最后,为新项目行为指定 Activity Name、 Layout Name、Title和 Main Resource Name:
我们一般建议从 JNI 项目开始(“Intel INDE OpenCV Android Project” 向导)。 编辑 JNI 文件时,直接导航至 “<your_project_dir>/jni” 文件夹。
Android Studio 支持与英特尔 INDE OpenCV: 启动现有项目
如欲启用面向现有项目的英特尔 INDE OpenCV 支持,请针对您要在其中使用 INDE OpenCV的各模块为 build.gradle 文件安装补丁:
根据使用英特尔 INDE OpenCV 方式的不同(通过 Java 接口或 JNI 支持),用于模 块的 build.gradle 文件的补丁会稍有不同。 具体而言,使用不同的 AAR 文件。
如果您的模块使用纯 Java OpenCV 接口,而没有通过 NDK 创建的原生 OpenCV 代码 ,应该在模块的 build.gradle 文件的末尾添加以下代码片段:
repositories { flatDir { dirs System.getenv("INDE_OPENCV_AAR_DIR") } } dependencies { compile(name: 'openCVLibrary300intelJava', ext: 'aar') }
就 JNI 项目而言,重新创建活动将有助于英特尔 INDE OpenCV JNI 项目模板,而不 支持带有英特尔 INDE OpenCV 支持的现有模块。 如果不接受使用模板,请进行以下操作 :
借助以下代码为 build.gradle 文件安装补丁(AAR 文件名称中无 Java 后缀):
repositories { flatDir { dirs System.getenv("INDE_OPENCV_AAR_DIR") } } dependencies { compile(name: 'openCVLibrary300intel', ext: 'aar') }
在 Android.mk 文件中 include $(CLEAR_VARS) 行的后面添加以下 行:
include $(INDE_OPENCV_DIR)\sdk\native\jni\OpenCV.mk
- 请确保 APP_STL := gnustl_shared 用于 Application.mk 文件,以兼容英 特尔 INDE OpenCV 二进制。 使用其他类型的运行时库可能导致应用执行期间出现未定义 行为。
Eclipse* 支持与英特尔 INDE OpenCV: 创建新项目
英特尔 INDE OpenCV 可提供 Eclipse* 项目向导,支持创建 Android* 应用。 如欲 借助英特尔 INDE OpenCV 支持创建新项目,选择 File> New> Project (Ctrl -N)。
从项目列表中选择 OpenCV Project,并在下个向导页面中输入新 项目的名称和位置:
完成后,点击 Finish。
现在,新项目和英特尔 INDE OpenCV 库项目都可导入至 Eclipse*,并在其中打开, 项目的依赖性和 Java 构建路径也已相应解决。 立即开始编码吧!
如果您使用 JNI 开发支持 OpenCV 的应用,请参考 Android Studio* (前部分的介 绍)。
Eclipse* 支持和英特尔 INDE OpenCV: 启动现有项目
如欲启用面向现有 Android* (Java) 项目的英特尔 INDE OpenCV,请在 Eclipse* 的 Package Explorer视图中右击您的项目,并选择 Enable OpenCV support:
使用该命令将英特尔 INDE OpenCV 库导入至您的工作区,并为您项目的英特尔 INDE OpenCV 设置依赖性:
关于面向 Android* 对象和 Microsoft Visual Studio 的开发说明
请注意,在当前版本中,Visual Studio 不支持借助英特尔 INDE OpenCV 进行 Android* 开发。 请在安装过程中选择其他 IDE,比如 Android Studio 或 Eclipse。 请参考英特尔® INDE-OpenCV 快速安装,获取安装详情。