Android Studio 导入OpenCV 并调试运行face-detection例子
系统: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-detection
的
java
代码和
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-detection
的
C++
代码目录复制到
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例子相关推荐
- Android Studio 导入 Android 系统模块并编译和调试
FAQ: AS导入系统模块源码,并且能够编译调试,正常查看java doc ???? Android AOSP基础(五)Android Studio调试系统源码的三种方式 http://liuwang ...
- Android Studio导入Fresco
大概一周之前,Facebook开源了专为Android系统定制的图片下载缓存工具,当天该消息就上了各大技术论坛网站的头条,也成为了各个技术群里讨论的最主要的话题.也就在当天stay4it的QQ群里面就 ...
- Android笔记 - android studio导入源码
前提 安装好android studio 拉好代码并并编译OK 编译源码idegen模块及生成AS配置文件(*.ipr) 在开始编译idegen模块前,需要先全局编译出out目录及相关文件吧,我们通过 ...
- Android Studio导入ZXING
作为一个标准的野程序员,各种折腾,各种玩.今天突然想研究研究 二维码,于是拿来了zxing. 说实话,真心摸不到头脑哈.百度,google, stackoverflow,十八般兵器,各种尝试,终于得到 ...
- Android Studio使用OpenCV进行图像基本处理
Android Studio使用OpenCV进行图像基本处理 1.环境配置 ①进入OpenCV官网下载SDK包 进入官网(https://opencv.org/releases/)选择"An ...
- 使用Android Studio导入安卓源码
1 背景 这篇文章主要说明的是用它来看源码的相关配置(该实例依据官方源码进行配置说明).在android源码中发现有一个development/tools/idegen目录,查了一下发现是生成IDE的 ...
- Android Studio 1.5+ 中调试Native和Java代码
Android Studio 1.5+ 中调试Native和Java代码 步骤如下 1.安装了1.5版+的Android Studio 2.安装LLDB:(LLDB是Low Level DeBugge ...
- Android AOSP基础(四)Source Insight和Android Studio导入系统源码
本文首发于微信公众号「刘望舒」 关联系列 Android AOSP基础系列 Android系统启动系列 前言 在上一篇文章Android AOSP基础(三)Android系统源码的整编和单编中,我们对 ...
- Android Studio 导入 Android 项目
打开 Android Studio,选择 Open an Existing Project,然后选中 Android 项目的根目录即可导入 Android 项目. 如果你之前使用 Android St ...
最新文章
- Redis初学16:主从复制
- Flutter 21: 图解 ListView 下拉刷新与上拉加载 (三)【RefreshIndicator】
- sniffer使用查网络故障
- 【Python】matplotlib.pyplot 标题换行
- 字符串多模式精确匹配(脏字/敏感词汇搜索算法)——TTMP算法 之理论(转)...
- java获取数据库MetaData
- 【转】js日期时间函数
- python统计各分数段人数并可根据选择绘制不同的图形_python习题整理
- 从计算机系统结构的发展和演变看,近代计算机是以,西南民族大学计算机系统结构试卷B有答案.doc...
- UVA - 10298 后缀数组(仅观赏)
- 步步为营:因为数据库正在使用,所以无法获得对数据库的独占访问权
- Ubuntu 18.04 安装搜狗拼音 2022年版 Install sogou pinyin in Ubuntu 18.04 in 2022
- Pandas + Jinja,轻松创建一个 PDF 报表
- css3动画Animate.css插件与wow.js插件
- matlab给定振形用图表示,基于 MATLAB 的简谐振动合成图形的动态演示
- MTK(Android N)设置SDCard为默认存储
- B站 URL转16进制防止评论贴URL被屏蔽
- 7-40 奥运排行榜
- csgo跑图文件_[CSGO]Neko社区:跑图服务器简易使用指南
- 掌握电商后台设计,这一篇足矣(转载)