opencv导入到android studio

215 篇文章 4 订阅

参考网址:

android 导入opencv:

https://blog.csdn.net/ye_gudu/article/details/79929995

aidl文件到使用:

https://www.jianshu.com/p/c0d9cd56d339

 

Android opencv 人脸识别(一)人脸检测

2018年04月13日 16:25:50 ye_gudu 阅读数:2256

关于Android开发人脸识别,市面上有不少的sdk,不过都不是免费的,离线的更是少。市面上的商用的一般都卖钱了,定制的话很贵,虹软有离线的,还免费,识别还是挺不错的。开源的有opencv,不过识别的不是很好,sdk下载地址

这篇文章主要讲讲怎么使用opencv的人脸检测功能sdk。

下载好sdk(3.3.3),目录的样子

1.首先新建一个android项目,(android studio 3.+),需要用到ndk和cmake,没有的提前下好。

2.导入opencvLibrary, importModule->sdk->java

导入之后,添加到自己module做library。

这里博客没有写,原博主可能觉得这里比较简单,sdk里面有aidl文件,参考第二个网址,编译aidl。添加如下代码:

    sourceSets{
        main{
            jniLibs.srcDirs = ['libs']
            aidl.srcDirs = ['src/main/java']
        }
    }

 

3.samples目录下的face-detection中的src复制到app这个项目的src下(把系统生成的删除),或者只将两个类复制过来(由于c文件的方法名要和包名一致,不改的话,就要改掉cpp文件和.h文件中的方法名)

4.导入res文件

这里介绍的不详细,res文件,不知道导入是怎么搞,我直接到原工程复制粘贴,发现不能识别。同aidl文件,加到gradle里面解决,这里加的是文件名,不知道为什么写文件夹values不可以,必须要写文件:

    sourceSets{
        main{
            jniLibs.srcDirs = ['libs']
            aidl.srcDirs = ['src/main/java']
            res.srcDirs += ['res/values/attrs.xml']
        }
    }

上面的解法有问题,这样改完java文件依然报错。正确解法:

把res放到main里面和java文件夹平级,不需要修改gradlew,编译通过。

5.把jni目录下的DetectionBasedTracker_jni.cpp和DetectionBasedTracker_jni.h拷贝到cpp目录下

6.在main目录下新建jniLibs目录,在jniLibs下新建armeabi,再sdk/native/libs/armeabi-v7a目录下的libopencv_java3.so,拷贝到新建的jniLibs目下的armeabi-v7a,

6.将sdk/native/jni/include文件下的所有东西,全部考入到jniLibs目录下。

完整目录如下图

7.修改CMakeList.txt 文件

 
  1. # For more information about using CMake with Android Studio, read the

  2.  
  3. # documentation: https://d.android.com/studio/projects/add-native-code.html

  4.  
  5. # Sets the minimum version of CMake required to build the native library.

  6.  
  7. cmake_minimum_required(VERSION 3.4.1)

  8.  
  9. # Creates and names a library, sets it as either STATIC

  10.  
  11. # or SHARED, and provides the relative paths to its source code.

  12.  
  13. # You can define multiple libraries, and CMake builds them for you.

  14.  
  15. # Gradle automatically packages shared libraries with your APK.

  16.  
  17. add_library(

  18. //外部引入的名称

  19. opencv_java3

  20.  
  21. SHARED

  22.  
  23. IMPORTED)

  24.  
  25. set_target_properties(

  26.  
  27. opencv_java3

  28.  
  29. PROPERTIES IMPORTED_LOCATION

  30.  
  31. ../../../../src/main/jniLibs/armeabi-v7a/libopencv_java3.so)

  32.  
  33. #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

  34.  
  35. if(CMAKE_COMPILER_IS_GNUCXX)

  36.  
  37. set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")

  38.  
  39. message(STATUS "optional:-std=c++11")

  40.  
  41. endif(CMAKE_COMPILER_IS_GNUCXX)

  42.  
  43. include_directories(src/main/jniLibs/include)

  44.  
  45. add_library( # Sets the name of the library.

  46.  
  47. detection_based_tracker

  48.  
  49. # Sets the library as a shared library.

  50.  
  51. SHARED

  52.  
  53. # Provides a relative path to your source file(s).

  54.  
  55. src/main/cpp/DetectionBasedTracker_jni.cpp )

  56.  
  57. # Searches for a specified prebuilt library and stores the path as a

  58.  
  59. # variable. Because CMake includes system libraries in the search path by

  60.  
  61. # default, you only need to specify the name of the public NDK library

  62.  
  63. # you want to add. CMake verifies that the library exists before

  64.  
  65. # completing its build.

  66.  
  67. find_library( # Sets the name of the path variable.

  68.  
  69. log-lib

  70.  
  71. # Specifies the name of the NDK library that

  72.  
  73. # you want CMake to locate.

  74.  
  75. log )

  76.  
  77. # Specifies libraries CMake should link to your target library. You

  78.  
  79. # can link multiple libraries, such as libraries you define in this

  80.  
  81. # build script, prebuilt third-party libraries, or system libraries.

  82.  
  83. target_link_libraries( # Specifies the target library.

  84.  
  85. detection_based_tracker opencv_java3

  86.  
  87. # Links the target library to the log library

  88.  
  89. # included in the NDK.

  90.  
  91. ${log-lib} )

不懂cmake的 可以去百度学习。

8.别忘了 在build-gradle文件中加入要支持的架构

9.启动页面加入

可以不用安装 manager.apk文件。

10.注释掉代码

运行成功,如果有问题,可以下方留言探讨

 

AndroidStudio 引用 aidl 文件的两种方法

96 xujun9411 关注

2017.11.04 16:49* 字数 216 阅读 579评论 0喜欢 0

AndroidStudio 引用 aidl 文件的两种方法

Android AIDL 教程 (一)—— 简单的示例

Android AIDL 传递对象(Parceable)

AndroidStudio 引入 aidl 文件,一般来说,有两种方法.

第一种方法

直接在 src/main 目录下新建 aidl 文件夹,并将我们的 aidl 文件放到该目录下。因为 AndroidStudio 默认的 aidl 文件默认配置是这样的。

第二种方法

  • 把 adil 文件拷贝到libs文件夹下
  • 在build.gradle文件中配置

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
            aidl.srcDirs = ['src/main/java']
        }
    }

最后的最后,卖一下广告,欢迎大家关注我的微信公众号,扫一扫下方二维码或搜索微信号 stormjun,即可关注。 目前专注于 Android 开发,主要分享 Android开发相关知识和一些相关的优秀文章,包括个人总结,职场经验等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值