android下OpenCV实现人脸检测既然如此简单

这两天在踩OpenCV的坑,需求:在不安装OpenCV Manager apk的情况下跑通opencv下的人脸检测demo。写下此文记录下;

注:本文采用opencv下的原始人脸检测的demo,所以里面的c代码都是原始包名的,如果你想修改包名则需要自己会jni的知识;如果不太会请看:像小白一样学习android jni编程 ;后面我自己会修改包名重新生成新的so,如果这部分大家有问题的话,欢迎留言;

openCV—SDK源码

openCV—SDK下载地址
现在最高版本3.2,现在网上部分资料都是采用2.4的sdk,本人亲测3.2的版本要比2.4的版本流畅的不要太多。

下载下来的目录结构

《android下OpenCV实现人脸检测既然如此简单》 opencv_sdk目录结构

  • apk:OpenCV Manager apk的存放目录(根据不同cpu型号有不同的apk请根据自己的机器cpu型号来对应,一般v7a的就好了)。
  • samples:opencv代码案例里面包括了人脸检测和其他。
  • sdk:包括了sdk和lib包。

《android下OpenCV实现人脸检测既然如此简单》 人脸检测案例

用AS直接导入人脸检测demo

注:

1:demo是eclipse的,导入的时候可能会有问题,但是应该是很容易解决的;

2:一定要导入import moudule opencv java库。

导入的最后结果如下图所示:

《android下OpenCV实现人脸检测既然如此简单》 完整项目结构

在此过程中可能会出现ndk的配置问题:

  • ndk的配置。

1:在gradle.properties中添加

android.useDeprecatedNdk=true

2:在local.properties中添加ndk路径(是你的ndk安装路径)

ndk.dir=D\:\\android\\ndk\\android-ndk32-r10-windows-x86_64\\android-ndk-r10

如果不知道如何配置ndk请自行百度;

3:在app的build.pradle中添加

sourceSets.main {
    jni.srcDirs = ['libs']
}

至此所有的准备工作都已OK了,下面开始实干了。

实干步骤

  • 修改jni下的Android.mk
    《android下OpenCV实现人脸检测既然如此简单》 需要修改的Android.mk

1:注意前面的“#”号,那特么是注释的意思,请干掉。

2:注意这里有2个if else的判断(我直接去掉判断了),里面include的是opencvsdk中的OpenCV.mk文件,这个修改成你自己的opencv—sdk路径;如果mk路径错误在jni编译的时候会报错的;仔细看下错误会说明是OpenCV.mk路径找不到。

修改之后成

《android下OpenCV实现人脸检测既然如此简单》 修改后的Android.mk

  • 导入opencv下的libs

这个时候我们需要将opencvSDK下的libs导入到我们项目中去,这样我们的项目就不需要安装OpenCV Manager apk了。

《android下OpenCV实现人脸检测既然如此简单》 libs下的so

这里可以只导入你cpu对应的版本即可能减小项目的大小,但我全部导入了;

《android下OpenCV实现人脸检测既然如此简单》 导入libs

  • 根据jni生成so

我们看到jni目录下有h和cpp文件,这里面就实现了检测的相关代码,这里我们并不需要动他。

然后我们在jni下ndk_build一下来生成so文件。(如果不知道ndk_build的请看我上篇文章或百度)。

《android下OpenCV实现人脸检测既然如此简单》 ndk_build生成so

如果这样就生成了so了,我们可以在项目中看到生成了一个obj的目录,

《android下OpenCV实现人脸检测既然如此简单》 生成的so目录

然后我们在将生成的libdetection_based_tracker.so放到jniLibs下的armeabi-v7a目录下。

《android下OpenCV实现人脸检测既然如此简单》 导入so

至此已经完成所有工作。

运行项目

《android下OpenCV实现人脸检测既然如此简单》 运行结果

总结

虽然这个demo简单,但是在没使用过opencv的人可能在配置中会出现各种问题;

1:导入opencv——sdk项目需修改版本号,保持跟app版本一致;

2:配置ndk(上面有写到出现的问题);

3:引用opencv下的libs;在app下直接导入即可,不需要再opencvLibrary下导入。

4:生成so;

5:将生成的so放入到jniLibs下的armeabi-v7a目录下。

github下载地址

附上github下载地址,此项目是完整项目导入了opencv的sdk,所有有点小大。
openCV人脸检测demo下载地址

    原文作者:Souv
    原文地址: https://www.jianshu.com/p/3f076d65c2e6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞