本来公司也不需要这个功能,想到有些软件有银行卡识别,很好奇怎么弄得,然后查到opencv,然后发现这东西能做人脸识别,好神奇,所以down了下来,之后发现要用ndk,没关系,之前有写过基础,有点印象。导入,额,导入了一天半,太麻烦了,麻烦到看到成功都要热泪盈眶的地步。
讲一下步骤:
1.下载opencv4Android,为了方便扔到百度网盘:
https://pan.baidu.com/s/1eSF9qDk 密码:v0g1
2.在android studio按照普通module的形式导入OpenCV-android-sdk/samples/face-detection,这个不讲了,会用android应该会这个,一律默认值就行。
3.修改Android.mk
这个地方必须要改,请直接拷贝下列代码到Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#OPENCV_CAMERA_MODULES:=off
#OPENCV_INSTALL_MODULES:=off
#OPENCV_LIB_TYPE:=SHARED
include ../../../../native/jni/OpenCV.mk
LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS += -llog -ldl
LOCAL_MODULE := detection_based_tracker
include $(BUILD_SHARED_LIBRARY)
可以看到,这里提到了这样一句:
include ../../../../native/jni/OpenCV.mk
所以需要把OpenCV-android-sdk\sdk\native拷贝到工程目录下,注意不要作为module导入,直接拷贝即可:
Application.mk也一样,直接拷贝即可,这个应该是和原版是一样的,注意此处的APP_ABI不要修改,否则生成的时候会有error:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-8
4.安装ndk,如果安装过了这一步可以跳过
http://blog.csdn.net/gyh198/article/details/75036686
这个网址提供的就很不错,注意要选择合适的版本
配置ndk
进入File-Protect Structure-在右边面板的下方看到如下位置需要进行配置,将ndk压缩包解压后,配置到ndk-build.cmd的上一层文件夹
5.编译so库
首先要在gradle.properties加入如下句子:
android.useDeprecatedNdk=true
重点来了,请务必clean!否则接下来的步骤可能会一直失败!这个点坑了我好久,无意中clean才通过了。
进入到这个工程下的这个目录,然后执行命令ndk-build然后需要检查一下:
如果出现这句,说明没有clean,请务必重新clean再进行操作。另外,需要检查生成的so库,如果只有几百k,那也是失败,请根据警告内容找答案。
6.导入库
gradle修改
在此module下的gradle要在android的defaultConfig内部添加:
ndk {
moduleName "detection_based_tracker"
abiFilters "armeabi-v7a"
}
android下再添加:
sourceSets {
main() {
jniLibs.srcDirs = ['src/main/libs','libs']
}
}
修改java文件
找到DetectionBasedTracker.java,添加静态初始化块:
static{
System.loadLibrary("detection_based_tracker");
}
FdActivity的onResume改为,此处如果不改,载入手机时需要额外安装环境:
@Override
public void onResume()
{
super.onResume();
if(OpenCVLoader.initDebug()){
mLoaderCallback.onManagerConnected( LoaderCallbackInterface.SUCCESS);
}
}
拷贝库文件
然后创建libs目录,将OpenCV-android-sdk\sdk\native\libs所有需要环境对应armeabi拷贝,最少需要armeabi和armeabi-v7a,注意只拷贝armeabi-v7a不成功!
删除jni目录
成功生成so库以后,这个目录已经没有用了,删掉即可
终于可以运行了,如果对着照片会出现绿色框则证明成功,可以进行人脸识别开发了,是不是很高大上呢?
参考博客:
http://blog.csdn.net/zengxyuyu/article/details/52303659?locationNum=7
http://blog.csdn.net/yi_shun/article/details/50956184