美文网首页安卓常用框架及依赖库Android自定义ViewOpenCV
android下OpenCV实现人脸检测既然如此简单

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

作者: Souv | 来源:发表于2017-02-08 17:32 被阅读10607次

    这两天在踩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的版本流畅的不要太多。

    下载下来的目录结构


    opencv_sdk目录结构
    • 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
      需要修改的Android.mk

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

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

    修改之后成


    修改后的Android.mk
    • 导入opencv下的libs

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

    libs下的so

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

    导入libs
    • 根据jni生成so

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

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

    ndk_build生成so

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


    生成的so目录

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

    导入so

    至此已经完成所有工作。

    运行项目


    运行结果

    总结

    虽然这个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下载地址

    相关文章

      网友评论

      • 首席科学家:推荐一份 python深度学习Tensorflow人工智能AI机器学习 视频教程:https://blog.csdn.net/u012201811/article/details/81184113
      • J大空:我也这么搞出来了 但运行起来直接就是一个界面显示摄像头 什么也操作不了啊。
      • f7e25d66ff14:请问一下,我利用虚拟机运行的时候,一直中断跳出来,请问可能是什么原因呀?
      • 7defa52046c0:你好楼主,在吗?我想问一下摄像头的切换在哪里?
        zhyp000329:这个比较简单,网上有很多关于摄像头切换的。你可以在onCreate()方法中调用 mOpenCvCameraView.setCameraIndex(1)切换到前置摄像头
      • 446fce01c97a:只是检测人脸 如何对比人脸呢?
        飞兔哥:@Newki openface 还行,
        Souv:@Newki 这个我就没太了解了。这属于深度学习的东西了吧。不过网上应该有很多开源的库可以使用。
        446fce01c97a:人脸识别有什么好办法呢?
      • 木子而东:你好我想问一下,像qq、美拍那样,在拍摄的过程中在头部、嘴巴,那种添加特效(比如动物的耳朵、彩虹等)的那种是用什么样的技术的啊,能推荐一些文章吗
        木子而东:@Souv 恩,谢谢
        Souv:其实这个我也玩的不深,不过应该是人脸检测的时候能检测到整个人脸的轮廓出来也就是相应的坐标。然后根据人类的五官结构计算出五官的位置。然后再显示特效吧。具体的我也不知道啦。
      • 云雨流年:你好,导入所有包还是在某些机型上崩溃 怎么办
      • KingGu:你好。使用了您的github的demo发现很容易出现绿框误出现,有没有什么好的方法解决呢?
        舒童1024:@冰岛寒月 去哪下载?
        836b0373066b:可以下载亚洲人脸库重新训练模型,识别率有可能会提高, 尤其是加rotate的.
        Souv:这个应该是他里面的算法问题,我没做其他修改
      • 5fca7646c98a: couldn't find "libdetection_based_tracker.so" atjava.lang.Runtime.loadLibrary(Runtime.java:367)
      • 榆木石头:你好,能方便加个好友吗?想咨询你

      本文标题:android下OpenCV实现人脸检测既然如此简单

      本文链接:https://www.haomeiwen.com/subject/ruqbittx.html