系统:Ubuntu 14.04

Studio版本:2.3.3

OpenCV版本:2.4.11

第一部分 将OpenCV导入到项目中

1.从Google Android 开发中文网站上下载 Android Studio,下载完成后配置SDK,NDK

下载地址:https://developer.android.google.cn/studio/index.html

2.下载OpenCV android开发SDK,并解压

文件名:OpenCV-2.4.11-android-sdk.zip

下载地址:http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.11/OpenCV-2.4.11-android-sdk.zip/download

3.新创建一个的项目

Name :FaceDetection

Minimum SDK : API22

Empty Activity : MainActivity

4.将OpenCV导入项目中

File->New->import Module

Source-directory:{unzip-dir}/adk/java

Module name:默认不用修改

NEXT

这一页全部默认,然后Finish

可能会报如下错误

原因是OpenCV的build.gradle里指定的Android SDK 版本跟 本项目的build.gradle里设置的版本不一致

将两个文件里面下面这几个配置改成一样:

compileSDKVersion / buildToolsVersion / minSdkVersion / targetSdkVersion

然后在OpenCV的build.gradle 点 Try Again,错误解决。

5.复制OpenCV Native libs到项目中

复制{unzip-dir}/sdk/native/libs到项目{project_name}/openCVLibrary2441/src/main/目录下,重命名为jniLibs

6.设置Module依赖

File->Project Structure->app->Dependencies

点+号->3.Module dependency->选:openCVLibrary2411

7.如果APP是5.0以上的话,需要修改

FaceDetection/openCVLibrary2411/src/main/java/org/opencv/android/AsyncServiceHelper.java中的initOpenCV方法.

新方法代码如下:

public static boolean initOpenCV(String Version, final Context AppContext,final LoaderCallbackInterface Callback) {AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext,Callback);Intent intent = new Intent("org.opencv.engine.BIND");intent.setPackage("org.opencv.engine");if (AppContext.bindService(intent, helper.mServiceConnection,Context.BIND_AUTO_CREATE)) {return true;} else {AppContext.unbindService(helper.mServiceConnection);InstallService(AppContext, Callback);return false;}
}

到此为止就把OpenCV SDK加载到项目中了,可以在项目使用OpenCV了。

第二部分 调试运行OpenCV SDK中的 face-detection例子

1.face-detectionjava代码和res资源复制到项目 app下对应的目录中

{unzip-dir}/OpenCV-android-sdk/samples/face-detection/src/org/opencv/samples/facedetect

{unzip-dir}/OpenCV-android-sdk/samples/face-detection/res

2. 编译C++代码

face-detectionC++代码目录复制到app/main

{unzip-dir}/OpenCV-android-sdk/samples/face-detection/jni

将编译用的文件复制到项目根目录

{unzip-dir}/OpenCV-android-sdk/sdk/native

修改jni下的Android.mk文件,内容如下

注意OpenCV.mk的路径(红字部分)

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OpenCV_INSTALL_MODULES := on
OpenCV_CAMERA_MODULES := off
OPENCV_LIB_TYPE :=STATIC
ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
include ../../../../native/jni/OpenCV.mk
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE := detection_based_tracker
LOCAL_SRC_FILES :=DetectionBasedTracker_jni.cpp
LOCAL_LDLIBS +=  -lm -llog
include $(BUILD_SHARED_LIBRARY)

将DetectionBasedTracker_jni.cpp 和DetectionBasedTracker_jni.h里,对应的包信息根据项目的实际情况修改一下,内容如下红色部分:(会有很多处,建议整体替换)

原:JNIEXPORT jlong JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject

现:JNIEXPORT jlong JNICALL Java_cn_com_grufield_facedetection_DetectionBasedTracker_nativeCreateObject

在app中的build.gradle的android标签中加入如下内容:

sourceSets.main.jni.srcDirs = []
sourceSets.main.jniLibs.srcDirs = ['src/main/libs','src/main/jniLibs']task ndkBuild(type: Exec, description: 'Compile JNI source with NDK') {Properties properties = new Properties()properties.load(project.rootProject.file('local.properties').newDataInputStream())def ndkDir = properties.getProperty('ndk.dir')if (org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)) {commandLine "$ndkDir/ndk-build.cmd", '-C', file('src/main/jni').absolutePath} else {commandLine "$ndkDir/ndk-build", '-C', file('src/main/jni').absolutePath}
}
tasks.withType(JavaCompile) {compileTask -> compileTask.dependsOn ndkBuild
}
task ndkClean(type: Exec, description: 'Clean NDK Binaries') {Properties properties = new Properties()properties.load(project.rootProject.file('local.properties').newDataInputStream())def ndkDir = properties.getProperty('ndk.dir')if (org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)) {commandLine "$ndkDir/ndk-build.cmd",'clean', '-C', file('src/main/jni').absolutePath} else {commandLine "$ndkDir/ndk-build",'clean', '-C', file('src/main/jni').absolutePath}
}
clean.dependsOn 'ndkClean'

在右面Gradle projects中找到ndkBuild,双击ndkBuild,编译C++代码

FaceDetection->:app->Taks->other->ndkBuild

log如下则编译成功

3.修改AndroidManifest.xml文件

{unzip-dir}/OpenCV-android-sdk/samples/face-detection/AndroidManifest.xml中内容替换项目到项目的AndroidManifest.xml中

内容如下:

    <applicationandroid:label="@string/app_name"android:icon="@drawable/icon"android:theme="@android:style/Theme.NoTitleBar.Fullscreen" ><activity android:name="FdActivity"android:label="@string/app_name"android:screenOrientation="landscape"android:configChanges="keyboardHidden|orientation"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><supports-screens android:resizeable="true"android:smallScreens="true"android:normalScreens="true"android:largeScreens="true"android:anyDensity="true" /><uses-sdk android:minSdkVersion="8" /><uses-permission android:name="android.permission.CAMERA"/><uses-feature android:name="android.hardware.camera" android:required="false"/><uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/><uses-feature android:name="android.hardware.camera.front" android:required="false"/><uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>

到此为止导入完成

4.运行程序

运行结果如下:

OK完成了

参考文章:

http://www.jianshu.com/p/e90da53c4bb5

http://blog.csdn.net/zengxyuyu/article/details/52303659

转载于:https://www.cnblogs.com/grufield/p/7082130.html

Android Studio 导入OpenCV 并调试运行face-detection例子相关推荐

  1. Android Studio 导入 Android 系统模块并编译和调试

    FAQ: AS导入系统模块源码,并且能够编译调试,正常查看java doc ???? Android AOSP基础(五)Android Studio调试系统源码的三种方式 http://liuwang ...

  2. Android Studio导入Fresco

    大概一周之前,Facebook开源了专为Android系统定制的图片下载缓存工具,当天该消息就上了各大技术论坛网站的头条,也成为了各个技术群里讨论的最主要的话题.也就在当天stay4it的QQ群里面就 ...

  3. Android笔记 - android studio导入源码

    前提 安装好android studio 拉好代码并并编译OK 编译源码idegen模块及生成AS配置文件(*.ipr) 在开始编译idegen模块前,需要先全局编译出out目录及相关文件吧,我们通过 ...

  4. Android Studio导入ZXING

    作为一个标准的野程序员,各种折腾,各种玩.今天突然想研究研究 二维码,于是拿来了zxing. 说实话,真心摸不到头脑哈.百度,google, stackoverflow,十八般兵器,各种尝试,终于得到 ...

  5. Android Studio使用OpenCV进行图像基本处理

    Android Studio使用OpenCV进行图像基本处理 1.环境配置 ①进入OpenCV官网下载SDK包 进入官网(https://opencv.org/releases/)选择"An ...

  6. 使用Android Studio导入安卓源码

    1 背景 这篇文章主要说明的是用它来看源码的相关配置(该实例依据官方源码进行配置说明).在android源码中发现有一个development/tools/idegen目录,查了一下发现是生成IDE的 ...

  7. Android Studio 1.5+ 中调试Native和Java代码

    Android Studio 1.5+ 中调试Native和Java代码 步骤如下 1.安装了1.5版+的Android Studio 2.安装LLDB:(LLDB是Low Level DeBugge ...

  8. Android AOSP基础(四)Source Insight和Android Studio导入系统源码

    本文首发于微信公众号「刘望舒」 关联系列 Android AOSP基础系列 Android系统启动系列 前言 在上一篇文章Android AOSP基础(三)Android系统源码的整编和单编中,我们对 ...

  9. Android Studio 导入 Android 项目

    打开 Android Studio,选择 Open an Existing Project,然后选中 Android 项目的根目录即可导入 Android 项目. 如果你之前使用 Android St ...

最新文章

  1. Redis初学16:主从复制
  2. Flutter 21: 图解 ListView 下拉刷新与上拉加载 (三)【RefreshIndicator】
  3. sniffer使用查网络故障
  4. 【Python】matplotlib.pyplot 标题换行
  5. 字符串多模式精确匹配(脏字/敏感词汇搜索算法)——TTMP算法 之理论(转)...
  6. java获取数据库MetaData
  7. 【转】js日期时间函数
  8. python统计各分数段人数并可根据选择绘制不同的图形_python习题整理
  9. 从计算机系统结构的发展和演变看,近代计算机是以,西南民族大学计算机系统结构试卷B有答案.doc...
  10. UVA - 10298 后缀数组(仅观赏)
  11. 步步为营:因为数据库正在使用,所以无法获得对数据库的独占访问权
  12. Ubuntu 18.04 安装搜狗拼音 2022年版 Install sogou pinyin in Ubuntu 18.04 in 2022
  13. Pandas + Jinja,轻松创建一个 PDF 报表
  14. css3动画Animate.css插件与wow.js插件
  15. matlab给定振形用图表示,基于 MATLAB 的简谐振动合成图形的动态演示
  16. MTK(Android N)设置SDCard为默认存储
  17. B站 URL转16进制防止评论贴URL被屏蔽
  18. 7-40 奥运排行榜
  19. csgo跑图文件_[CSGO]Neko社区:跑图服务器简易使用指南
  20. 掌握电商后台设计,这一篇足矣(转载)

热门文章

  1. C Primer Plus note7
  2. Guacamole 介绍以及架构
  3. MS CRM如果在Tab页中有Iframe选项,原来速度不慢,突然速度变慢
  4. JavaScript学习(五十三)—借用构造方法继承
  5. PowerPoint是什么
  6. 26岁宝妈去汤臣倍健面试兼职工作
  7. 二月春风似剪刀的上一句是什么,二月春风似剪刀全诗赏析
  8. 有些投资人从机构出来,自己单干做投资,募资一毛钱都没募到
  9. 作为一个销售人员,要做到这些
  10. 如何经营一家培训机构?