AndroidStudio不需要安装OpenCV Manager,就可以运行openCV,实现人脸检测
我用的是官方demo,版本是OpenCV-3.0.0-android-sdk
那首先就要下载OpenCV的SDK啦
SDK下载 http://opencv.org/downloads.html
看下目录
一、用AndroidStudio导入工程,直接从这文件夹里导入face-detection项目
因为是eclipse工程,导入时会有些错误,但是很容易就解决的
二、修改项目jni文件夹下的android.mk文件
其实主要是修改这个4个地方
OpenCV_INSTALL_MODULES:=on OPENCV_CAMERA_MODULES:=on OPENCV_LIB_TYPE:=SHARED include 你的OpenCV.mk位置
三、打开FdActivity.java文件,在oncreate()上面添加一个静态初始化块代码,它是用来加载OpenCV_java库的,由于FaceDetection中还用了另一个库detection_based_tracker,所以要在else子句中加载进来:
static { Log.i(TAG, "OpenCV library load!"); if (!OpenCVLoader.initDebug()) { Log.i(TAG, "OpenCV load not successfully"); } else { System.loadLibrary("detection_based_tracker");// load other libraries } }
删除FdActivity.java的OnResume()方法的OpenCVLoader.initAsync()方法,不让它去访问OpenCV Manager。
super.onResume(); if (!OpenCVLoader.initDebug()) { Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization"); //OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback); } else { Log.d(TAG, "OpenCV library found inside package. Using it!"); mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); }
四、编译,编译成功,但是你会发现屏幕一片黑,因为还要把armeabi-v7a复制到opencvLibrary的mian目录的jniLibs目录下
armeabi-v7a在你下载的SDK的native\libs里
五、再编译你会发现这个错误
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load detection_based_tracker from loader dalvik.system.PathClassLoader
这里是说缺少detection_based_tracker这个库文件
这里就需要你自己去配置NDK环境了(百度或谷歌),配置好NDK环境之后,用cmd进入工程文件的src\main\jni目录,执行ndk-build命令,就会生成detection_based_tracker库文件
编译好后,这个文件会出现在你的项目里,把它复制到opencvLibrary的jniLibs\armeabi-v7a目录下,然后再run就ok了
作者测试了OpenCV3.0和OpenCV2.4版本,发现3.0版本比较流畅,2.4版本会比较卡顿