导入opencv4Android人脸检测例子

时间:2022-04-19 20:27:10

本来公司也不需要这个功能,想到有些软件有银行卡识别,很好奇怎么弄得,然后查到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

导入opencv4Android人脸检测例子
这个地方必须要改,请直接拷贝下列代码到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导入,直接拷贝即可:
导入opencv4Android人脸检测例子

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的上一层文件夹
导入opencv4Android人脸检测例子

5.编译so库

首先要在gradle.properties加入如下句子:

android.useDeprecatedNdk=true

重点来了,请务必clean!否则接下来的步骤可能会一直失败!这个点坑了我好久,无意中clean才通过了。
导入opencv4Android人脸检测例子

导入opencv4Android人脸检测例子

进入到这个工程下的这个目录,然后执行命令ndk-build然后需要检查一下:
导入opencv4Android人脸检测例子
如果出现这句,说明没有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