开始使用Intel® INDE OpenCV for Android Targets





0/5 (0投票)
本文档重点介绍为 Android 创建支持 OpenCV 的应用程序。如果您的应用程序的目标操作系统是 Windows
Intel® Developer Zone 提供跨平台应用程序开发工具和操作指南、平台和技术信息、代码示例以及同行专业知识,以帮助开发者创新和取得成功。加入我们的社区,获取 Android、物联网、Intel® RealSense™ 技术 和 Windows 的相关信息,下载工具,获取开发套件,与志同道合的开发者交流想法,并参与黑客马拉松、竞赛、路演和本地活动。
关于 Intel INDE OpenCV
Intel® Integrated Native Developer Experience (Intel® INDE) 是一款跨架构的生产力套件,为开发者提供工具、支持和 IDE 集成,以在 Intel® 架构的 Windows* 上以及 ARM* 和 Intel® 架构的 Android* 上创建高性能 C++/Java* 应用程序。
Intel INDE 的新 OpenCV Beta 版本与新的开源 OpenCV 3.0 Beta 版本(开源计算机视觉库:https://opencv.ac.cn)兼容。OpenCV Beta 版本为计算机视觉应用程序的开发和生产提供免费的二进制文件,用于增强摄影、增强现实、视频摘要等用途。
Intel® INDE OpenCV 的主要功能包括:
- 与 OpenCV 3.0 兼容
- 预构建和验证的二进制文件,已移除受 IP 保护的构建块。
- 易于使用和维护,支持 Windows 和 Android 开发的 IDE 集成。
- 针对 Intel® 平台上的异构计算进行了优化。
本文档重点介绍为 Android* 创建支持 OpenCV 的应用程序。如果您的应用程序的目标操作系统是 Windows*,请参阅 Getting Started with Intel’s INDE OpenCV for Windows*。
Intel INDE OpenCV for Android* Targets 安装指南
有关安装详情,请参阅 Intel® INDE OpenCV 快速安装指南。
Intel INDE OpenCV Android* 支持为 BETA 版本
OpenCV 3.0 Beta 的社区版本不提供 Android 支持。Intel INDE OpenCV 提供 **预览版** Android 32 位二进制文件。在此版本发布时,社区 OpenCV 3.0 API 尚未最终确定(仍为 Beta 版)。同样,对于 Intel INDE OpenCV 的 Android* Target 二进制文件,API 也不是最终版本,您可能会随着时间的推移遇到 API 的微小更改。
OpenCV 3.0 的部分功能在 Android* 上仅限于 JNI
请注意,对于 Beta 版本,OpenCV 3.0 在 Android* 上的某些重要功能仅限于 JNI。JNI 是 Java Native Interface 的缩写,是一种应用程序开发方法,通过 JNI 使 C/C++ 代码与其余 Java 代码进行通信。
例如,UMat 支持仅在原生的 C++ 代码中可用,而无法通过 OpenCV Java API 访问。有关详细信息,请参阅 Intel INDE OpenCV 的 OpenCV 3.0 架构指南。
尽管如此,Intel INDE OpenCV 的 Android* 预览版二进制文件仍能让您开始为 Android* Target 开发和测试应用程序。
Intel INDE OpenCV for Android Targets 组件
Intel INDE OpenCV 包含以下用于 Android* Target 的组件:
- 可直接用于 Android* 应用程序开发(x86)的二进制文件
- Intel INDE OpenCV 版本的 OpenCV4Android
- 集成到 Eclipse* 和 Android Studio* IDE 中
Intel 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
Intel INDE OpenCV:Android* OpenCV Manager 的替代方案
Android* OpenCV Manager(https://docs.opencv.ac.cn/platforms/android/service/doc/index.html)是一个管理最终用户设备上 OpenCV 库二进制文件的服务。该服务使用常数(标签)机制来区分 OpenCV 版本,这在 OpenCV 文档 中已有说明。
您可以将应用程序切换为使用 Intel INDE OpenCV 版本。 **Intel INDE OpenCV 二进制文件不通过 Android OpenCV Manager 提供。** 要在您的应用程序中启用 Intel INDE OpenCV 二进制文件支持,请在常规的 initAsync() 调用中提供一个特定的标签(参见下面的代码示例)。否则,应用程序默认使用社区 OpenCV 库。
本章与 **使用 Android OpenCV Manager 的现有 OpenCV 应用程序** 相关,该应用程序通过 Java OpenCV Loader 的 initAsync() 方法进行操作。使用 Intel INDE OpenCV 时,您应该使用此函数,即使二进制文件实际是从应用程序的 *.apk 文件加载的。通过 Intel INDE OpenCV Android Studio* 和 Eclipse* 向导创建的应用程序默认使用此方法。
请注意,**Intel INDE OpenCV 二进制文件必须显式打包到您应用程序的最终 *.apk 文件中**。打包二进制文件的方法在本文章的 IDE 特定章节中有所描述。
实际二进制文件加载的通用机制及相关回调在 https://docs.opencv.ac.cn/platforms/android/service/doc/index.html 中进行了解释。Intel 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
}
}
使用 Intel INDE OpenCV 向导为 Android Studio* 和 Eclipse* 创建的应用程序默认使用正确的标签。
使用 Intel INDE OpenCV IDE 向导创建支持 OpenCV 的应用程序
Intel INDE 是 Android 的完整开发套件。安装 Intel INDE 后,Intel INDE OpenCV 使您能够使用 Eclipse* 和 Android Studio* IDE 开发计算机视觉应用程序。
有关按 IDE 的安装详情,请参阅 Intel INDE OpenCV 快速安装指南。
Android Studio* 对 Intel INDE OpenCV 的支持:创建新项目
Intel INDE OpenCV 为 Android Studio* 提供了 Java 和 JNI 项目向导。JNI 是 Java Native Interface 的缩写。它是一种应用程序开发方法,通过 JNI 使 C/C++ 代码与其余 Java 代码进行通信。根据 JNI 方法,您的代码直接在 C/C++ 中使用 Intel INDE OpenCV,就像使用任何其他原生库一样。
要创建任何类型的应用程序,请执行以下操作:
- 从常规的 **创建新项目** 向导(Ctrl-N)开始。
- 在 **配置新项目** 步骤中,指定 **应用程序名称**、**项目位置** 等:
-
在 **选择应用程序将运行的设备类型** 中,选择 **手机和平板电脑**,并指定 API 级别 19 以符合一般的 Intel INDE 要求:
-
选择 **Intel INDE OpenCV Project**(纯 Java)或 **Intel INDE OpenCV JNI Project**:
-
最后,为新项目活动指定 **Activity 名称**、**布局名称**、**标题**、**主资源名称**:
-
点击 **完成**,然后在 Android Studio* 中开始处理您的第一个 Intel INDE OpenCV 项目:
我们通常建议从 JNI 项目开始(“Intel INDE OpenCV Android Project”向导)。要编辑 JNI 文件,请直接导航到“*
Android Studio 对 Intel INDE OpenCV 的支持:启用现有项目
要为现有项目启用 Intel INDE OpenCV 支持,请为 **使用 Intel INDE OpenCV 的每个模块** 的 build.gradle 文件打补丁。
根据您是通过 Java 接口还是 JNI 支持使用 Intel INDE OpenCV,应将略有不同的补丁应用于您模块的 build.gradle 文件。具体来说,请使用不同的 AAR 文件。
如果您的模块使用纯 Java OpenCV 接口,并且您没有任何原生 OpenCV 代码是用 NDK 构建的,那么以下代码片段应添加到您模块的 build.gradle 文件末尾:
repositories {
flatDir {
dirs System.getenv("INDE_OPENCV_AAR_DIR")
}
}
dependencies {
compile(name: 'openCVLibrary300intelJava', ext: 'aar')
}
对于 JNI 项目,请使用 Intel INDE OpenCV JNI Project 模板重新创建 Activity,而不是启用具有 Intel 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
- 确保 Application.mk 文件中使用
APP_STL := gnustl_shared
以与 Intel INDE OpenCV 二进制文件兼容。使用其他类型的运行时库可能会导致应用程序执行期间出现未定义的行为。
Eclipse* 对 Intel INDE OpenCV 的支持:创建新项目
Intel INDE OpenCV 提供了一个 Eclipse* 项目向导,用于创建 Android* 应用程序。要创建支持 Intel INDE OpenCV 的新项目,请选择 **File** > **New** > **Project**(Ctrl -N)。
在项目列表中选择 **OpenCV Project**,然后在下一个向导页面中输入新项目的名称和位置。
完成后,点击 **Finish**。
现在,新项目和 Intel INDE OpenCV 库项目都已导入并打开在 Eclipse* 中,项目的依赖项和 Java 构建路径已相应解决。现在就可以开始编码了!
如果您愿意使用 JNI 开发支持 OpenCV 的应用程序,请参考 Android Studio*(上一节)。
Eclipse* 对 Intel INDE OpenCV 的支持:启用现有项目
要为现有的 Android* (Java) 项目启用 Intel INDE OpenCV,请在 Eclipse* 的 **Package Explorer** 视图中右键单击您的项目,然后选择 **Enable OpenCV support**。
使用此命令,您会将 Intel INDE OpenCV 库导入您的工作区,并为您的项目设置到 Intel INDE OpenCV 的依赖项。
关于使用 Microsoft Visual Studio* 为 Android* Target 开发的注意事项
请注意,在当前版本中,Visual Studio 不支持使用 Intel INDE OpenCV 进行 Android* 开发。请在安装过程中选择其他 IDE,如 Android Studio 或 Eclipse。有关安装详情,请参阅 Intel® INDE-OpenCV 快速安装。