AR技术之--基于opencv的人脸识别(二)

下载的OpenCV-android-sdk目录结构如下




apk目录:manager的apk安装包

samples目录:示例代码

sdk目录:是java层代码和jni层代码


OpenCV最简单的使用方式是使用manager,也就是使用apk目录下的安装包,安装对应的apk,将java层代码导入,使用OpenCVLoader.initAsync()加载库,之后你就可以直接用java代码调用Opencv相关的功能了。
但是这种方式除了安装我们自己的apk还需要安装上面提到的manager的apk,用户体验十分不好,不推荐使用,本文的将完全脱离这个manager的apk。


首先,新建项目,将OpenCV中sdk目录下的native目录拷到项目根目录;然后新建一个module为opencv-lib,以下都是基于opencv-lib的配置


1、在gradle.properties中添加配置:

android.useDeprecatedNdk=true


2、在local.properties中添加配置:

ndk.dir=/Users/lisc/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/lisc/Library/Android/sdk
注:需要将sdk和ndk的目录修改为自己本机配置的位置


3、在opevcv-lib的main/src中新建jin目录,并增加Application.mk文件,添加配置:

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-8

4、在opevcv-lib的main/src中增加Android.mk文件,添加配置:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)


OpenCV_INSTALL_MODULES := on
OpenCV_CAMERA_MODULES := off

OPENCV_LIB_TYPE :=STATIC

ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
include /Users/lisc/Documents/examples/ar/native/jni/OpenCV.mk

else
include $(OPENCV_MK_PATH)
endif

LOCAL_MODULE := OpenCV

LOCAL_SRC_FILES :=

LOCAL_LDLIBS +=  -lm -llog

include $(BUILD_SHARED_LIBRARY)

注:

include /Users/lisc/Documents/examples/ar/native/jni/OpenCV.mk
需要修改为自己的路径

在build.gradle文件里面的android{}中添加配置:
sourceSets.main.jni.srcDirs = []

sourceSets.main.jniLibs.srcDirs = ['src/main/libs', 'src/main/jniLibs']

task ndkBuild(type: Exec, description: 'Compile JNI source with NDK') {
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    def ndkDir = properties.getProperty('ndk.dir')

    if (org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)) {
        commandLine "$ndkDir/ndk-build.cmd", '-C', file('src/main/jni').absolutePath
    } else {
        commandLine "$ndkDir/ndk-build", '-C', file('src/main/jni').absolutePath
    }
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

task ndkClean(type: Exec, description: 'Clean NDK Binaries') {
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    def ndkDir = properties.getProperty('ndk.dir')

    if (org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)) {
        commandLine "$ndkDir/ndk-build.cmd", 'clean', '-C', file('src/main/jni').absolutePath
    } else {
        commandLine "$ndkDir/ndk-build", 'clean', '-C', file('src/main/jni').absolutePath
    }
}

clean.dependsOn 'ndkClean'

最后:运行ndkBuild,查看日志,如果出现以下日志,并生成文件即成功



 成功生成libOpenCV.so文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值