Android开发实现OpenCV人脸检测

前言

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

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

一、OpenCV—SDK源码

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

下载下来的目录结构

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

二、用AS直接导入人脸检测demo

 注:

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

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

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

在此过程中可能会出现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

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

修改之后成下图:

  • 导入opencv下的libs

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

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

  • 根据jni生成so

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

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

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

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

至此已经完成所有工作。

四、运行项目


上图就是运行后的结果

总结

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

  • 1:导入opencv——sdk项目需修改版本号,保持跟app版本一致;
  • 2:配置ndk(上面有写到出现的问题);
  • 3:引用opencv下的libs;在app下直接导入即可,不需要再opencvLibrary下导入。
  • 4:生成so;
  • 5:将生成的so放入到jniLibs下的armeabi-v7a目录下。

各位对于NDK方面的进阶学习可以参考下图:

欢迎加入Android开发技术交流群:150923287,获取上图关于NDK开发教程!

猜你喜欢

转载自blog.csdn.net/AndroidO2O/article/details/86526185