Android Ndk and Opencv Development 1

Hujiawei Bujidao


     

Android Ndk and Opencv Development 1


从本节开始之后的几节将介绍关于Android NDK和OpenCV整合开发的内容,本节介绍Android NDK 和 OpenCV 整合开发的环境搭建以及人脸检测项目的运行测试。

在Samsung呆了段时间,还是学了不少东西的,主要做的任务是做Android NDK开发,也涉及到了OpenCV的内容,正好自己最近在开发XFace,这些知识都用得上,所以,想写几篇文章总结下这些知识。该系列内容均为原创,摘录的部分我都会引用提示,尊重版权嘛,嘿嘿,我保证这里有不少内容是搜索不到的独家秘笈哟!很多都是我的开发经验,嘿嘿。

该系列主要包括三大部分,分为下面三节来介绍,本节主要介绍第一部分
1.Android NDK 和 OpenCV 整合开发的环境搭建以及人脸检测项目的运行测试
2.Android NDK 的核心内容和开发总结
3.OpenCV 在 Android NDK 开发中的应用

[本文假设你是安装配置好了Java和Android SDK开发环境的,如果没有的话,可以看我以前在点点博客写的这篇文章,开发工具建议使用ADT,它更加方便,包含了Android SDK 和 安装了 ADT Plugin 的 Eclipse,何乐而不为呢?]

1. 下载Android NDK,解压即可

下载地址: Android NDK
如果不能下载(公司内部可能就不让访问或者访问很慢),可以查看这位作者的备用下载地址

2. 下载安装OpenCV2.6版本

下载地址:OpenCV首页 Linux平台的安装教程 Mac平台的安装教程

(1) 首先安装需要安装的工具和依赖包[详见前面的Linux安装教程],Mac平台基本上只要安装CMake即可
(2) 使用CMake编译opencv源码,然后通过make安装opencv[完成之后在/usr/local/include目录下便有了opencvopencv2两个目录,在/usr/local/lib目录下有很多的opencv相关的动态库,例如libopencv_core.dylib等等]

cd <path-to-opencv-source>
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install

3. 下载opencv_android_sdk 2.4.4版本,导入目录sdk/java作为Library Project (这个是OpenCV for Android)

下载地址:opencv-android on sourceforge

[2.4.2相对比较旧了,有些新特性不支持,比如人脸识别(但是有人脸检测),不推荐下载这个;2.4.6相对比较新,但是可能导入的Library Project一直报错,所以如果不能解决就考虑使用2.4.4,只要Library Project导入进来没问题就行]

关于opencv for android的目录结构的详细解释

4. 环境配置NDK和OpenCV环境

安装Android SDK(略过)和NDK,配置到系统PATH中

[推荐配置,方便以后在终端执行adb和ndk-build等命令]

export ANDROID_SDK_ROOT=/Users/hujiawei/Android/android_sdk
export PATH=${PATH}:${ANDROID_SDK_ROOT}/platform-tools:${ANDROID_SDK_ROOT}/tools
export ANDROID_NDK_ROOT=/Users/hujiawei/Android/android_ndk
export PATH=${PATH}:${ANDROID_NDK_ROOT}

使用ndk-build -v测试配置

GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin10.8.0

如果是在Windows下,并且安装了Cygwin的话,输出就略有不同,它使用的不是系统内置的GNU Make

$ ndk-build -v
GNU Make 3.82.90
Built for i686-pc-cygwin
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

在Eclipse(Android Development Tool)的设置中,在 C/C++ -> Build -> Environment 中添加下面两个配置 [添加这两项配置是为了后面进行各项关于路径配置的方便]

NDKROOT = /Users/hujiawei/Android/android_ndk
OPENCVROOT = /Users/hujiawei/Android/opencv_sdk

5. 运行OpenCV for Android中的Sample项目FaceDetection

导入OpenCV for Android中的Library Project - OpenCV Library - 2.4.4

修改Library Project,改为前面导入到workspace中的Library Project

[原有的配置默认该项目和Library Project是在同一个目录下,所以如果你以前接触过的话,会发现很多文章都是告诉你要把Library Project拷贝到和当前项目同一个目录下,其实是完全没有必要的!]

修改C/C++ Build,将Build Command改成: ${NDKROOT}/ndk-build
[Windows平台则不要删除末尾的.cmd,Linux和Mac平台则需要删掉.cmd]

修改C/C++ General,将Paths and Symbols中的GNU CGNU C++配置的最后一个路径修改成 ${OPENCVROOT}/sdk/native/jni/include (这个路径保存的是opencv的native code头文件) [建议将这个配置导出到文件中,方便以后做类似项目时可以快速进行配置]

修改jni目录下的Android.mk,将include OpenCV.mk这行改成:include${OPENCVROOT}/sdk/native/jni/OpenCV.mk [原有的配置是默认OpenCV的sdk文件夹和包含项目根目录的文件夹是同一个目录下]

经过上面的配置之后,FaceDetection项目便没有问题了,打开jni目录下的cpp和h文件也不会报错了,当然,手机必须安装OpenCV Manager才能成功运行FaceDetection

运行人眼检测的示例程序

项目来源:http://romanhosek.cz/android-eye-detection-and-tracking-with-opencv/
该作者根据原有的人脸检测做了一个人眼检测,博文最后附有下载地址,我的Github上已经有了一份备份,配置方式和Face Detection一样
[如果配置完了之后提示一个app_platform的警告的话,可以在Application.mk文件中添加 APP_PLATFORM := android-8]
仔细理解上面的配置和操作,如果还有啥问题或者不清楚的可以查看OpenCV官方这篇入门文档:Manual OpenCV4Android SDK setup

两个项目运行结果:[帮主,对不住啦,谁叫您长得这么帅呢!我的脸识别不了,只能用您老的啦!]

image

image

OK!本节结束!如果觉得好,请看下节Android NDK 的核心内容和开发总结

Hujiawei is a mobile developer Guangdong, China http://javayhu.me/ 本博客所有文章均为原创,请勿随意转载,如需转载请联系我 (hujiawei090807 AT gmail.com) 我在小专栏有个移动开发技术专栏,不定期分享移动开发的核心技术,总结移动开发的实战经验
所有文章皆为原创,内容制作精良,保证干货满满,欢迎订阅 (https://xiaozhuanlan.com/u/javayhu)
>>> 我最近在Android面试指南小专栏里面写了一篇稿子 [Android面试——算法面试心得] ,欢迎阅读!<<<
下面的二维码是我个人维护的微信公众号“潇涧技术专栏”,会不定期分享移动开发的核心技术,欢迎关注!