您的位置:首页 > 移动开发 > Android开发

基于 opencv3.3 Android 人脸检测

2017-12-21 10:48 435 查看

视频演示

此demo 已经实现全屏 竖屏 横屏(90 度和270度) 检测,性能已经达到商业性能.

此demo的 源代码 未上传,请耐心等待

重写过的demo下载

视频截图





以下是opencv人脸检测 教程 (给新手用的)

1.下载 opencv3.3

2.创建Android 工程

3.导入library library

地址 \OpenCV-android-sdk\sdk\java

4.复制 native)到工程根目录

native 地址: \OpenCV-android-sdk\sdk\native

5.gradle.properties 添加

android.useDeprecatedNdk=true


6.复制 \OpenCV-android-sdk\samples\face-detection 下的java代码 和 res 文件到自己的app对应位置

6.复制 \OpenCV-android-sdk\samples\face-detection\jni 到 app\src\main\java 下

7.复制 \OpenCV-android-sdk\sdk\native\libs 里面的 文件 到 app\src\main\java\jniLibs(没有就创建一个)

我只复制 armeabi和armeabi-v7a

8.复制 \OpenCV-android-sdk\samples\face-detection 下的java代码 和 res 文件到自己的app

8.修改 app\src\main\java\jni\Android.mk 文件,内容如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#OPENCV_INSTALL_MODULES:=off
#OPENCV_LIB_TYPE:=SHARED
ifdef OPENCV_ANDROID_SDK
ifneq ("","$(wildcard $(OPENCV_ANDROID_SDK)/OpenCV.mk)")
include ${OPENCV_ANDROID_SDK}/OpenCV.mk
else
include ${OPENCV_ANDROID_SDK}/sdk/native/jni/OpenCV.mk
endif
else
include ../../../../native/jni/OpenCV.mk
endif

LOCAL_SRC_FILES  := DetectionBasedTracker_jni.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS     += -llog -ldl

LOCAL_MODULE     := detection_based_tracker

include $(BUILD_SHARED_LIBRARY)


8.在app的 build.gradle 文件里面 的 Android 节点 添加

sourceSets.main.jni.srcDirs = []
//禁止自带的ndk功能
sourceSets.main.jniLibs.srcDirs = ['src/main/libs', 'src/main/jniLibs']
//重定向so目录为src/main/libs和src/main/jniLibs,原来为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'


在AndroidManifest.xml 添加

<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true"/>

<uses-permission android:name="android.permission.CAMERA"/>

<uses-feature
android:name="android.hardware.camera"
android:required="false"/>
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false"/>
<uses-feature
android:name="android.hardware.camera.front"
android:required="false"/>
<uses-feature
android:na
4000
me="android.hardware.camera.front.autofocus"
android:required="false"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


目录结构

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android opencv 源代码