参考网址:
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 文件
-
# For more information about using CMake with Android Studio, read the
-
# documentation: https://d.android.com/studio/projects/add-native-code.html
-
# Sets the minimum version of CMake required to build the native library.
-
cmake_minimum_required(VERSION 3.4.1)
-
# Creates and names a library, sets it as either STATIC
-
# or SHARED, and provides the relative paths to its source code.
-
# You can define multiple libraries, and CMake builds them for you.
-
# Gradle automatically packages shared libraries with your APK.
-
add_library(
-
//外部引入的名称
-
opencv_java3
-
SHARED
-
IMPORTED)
-
set_target_properties(
-
opencv_java3
-
PROPERTIES IMPORTED_LOCATION
-
../../../../src/main/jniLibs/armeabi-v7a/libopencv_java3.so)
-
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
-
if(CMAKE_COMPILER_IS_GNUCXX)
-
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
-
message(STATUS "optional:-std=c++11")
-
endif(CMAKE_COMPILER_IS_GNUCXX)
-
include_directories(src/main/jniLibs/include)
-
add_library( # Sets the name of the library.
-
detection_based_tracker
-
# Sets the library as a shared library.
-
SHARED
-
# Provides a relative path to your source file(s).
-
src/main/cpp/DetectionBasedTracker_jni.cpp )
-
# Searches for a specified prebuilt library and stores the path as a
-
# variable. Because CMake includes system libraries in the search path by
-
# default, you only need to specify the name of the public NDK library
-
# you want to add. CMake verifies that the library exists before
-
# completing its build.
-
find_library( # Sets the name of the path variable.
-
log-lib
-
# Specifies the name of the NDK library that
-
# you want CMake to locate.
-
log )
-
# Specifies libraries CMake should link to your target library. You
-
# can link multiple libraries, such as libraries you define in this
-
# build script, prebuilt third-party libraries, or system libraries.
-
target_link_libraries( # Specifies the target library.
-
detection_based_tracker opencv_java3
-
# Links the target library to the log library
-
# included in the NDK.
-
${log-lib} )
不懂cmake的 可以去百度学习。
8.别忘了 在build-gradle文件中加入要支持的架构
9.启动页面加入
可以不用安装 manager.apk文件。
10.注释掉代码
运行成功,如果有问题,可以下方留言探讨
AndroidStudio 引用 aidl 文件的两种方法
xujun9411 关注
2017.11.04 16:49* 字数 216 阅读 579评论 0喜欢 0
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开发相关知识和一些相关的优秀文章,包括个人总结,职场经验等。