参考基于android studio开发的 opencv关于android人脸识别的DEMO

前言

/build/core/add-application.mk:178: *** Android NDK: APP_STL gnustl_shared is no longer supported. Please switch to either c++_static or c++_shared. See https://developer.android.com/ndk/guides/cpp-support.html for more information.    .  Stop.

[armeabi-v7a] SharedLibrary  : libface_detection.so
G:/software/android/projects/opencv/CameraTutorial/app/src/jni/haar_detect.cpp:39: error: undefined reference to 'cv::CascadeClassifier::detectMultiScale(cv::_InputArray const&, std::__ndk1::vector, std::__ndk1::allocator > >&, double, int, int, cv::Size_, cv::Size_)'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [G:/software/android/projects/opencv/CameraTutorial/app/src/obj/local/armeabi-v7a/libface_detection.so] Error 1
如果有人遇到以上报错可以参考我的 解决android studio3 导入opencv后ndk-build编译遇到的问题

本文不会有上述两个报错

 

一软件环境

Android studio使用的3.0版本。下载的ndk是19。

android studio3导入opencv4人脸识别例程安卓项目工程_第1张图片

android studio3导入opencv4人脸识别例程安卓项目工程_第2张图片

opencv从官网下载的4.0

android studio3导入opencv4人脸识别例程安卓项目工程_第3张图片

下载后的opencv目录如下

OpenCV-android-sdk

    -samples

    -sdk

这次我们用的人脸识别项目就是OpenCV-android-sdk\samples\face-detection

android studio3导入opencv4人脸识别例程安卓项目工程_第4张图片

这个目录下的FdActivity.java文件是人脸识别的界面程序,打开看下

android studio3导入opencv4人脸识别例程安卓项目工程_第5张图片

package org.opencv.samples.facedetect;

第一行是包名一会我们新建一个和这个包名一样的程序就能少改好多了

二新建opencv工程

 

android studio3导入opencv4人脸识别例程安卓项目工程_第6张图片

 

这是我新建的工程 ,其他的都无所谓包名是org.opencv.samples.facedetect。如果不是也没关系,可以在工程里再新建一个,反正需要一个org.opencv.samples.facedetect

android studio3导入opencv4人脸识别例程安卓项目工程_第7张图片

导入opencv

android studio3导入opencv4人脸识别例程安卓项目工程_第8张图片

android studio3导入opencv4人脸识别例程安卓项目工程_第9张图片

这里要选到java文件夹,我把下面的module name改成了opencv4

修改结构

找到project structure 到app下点那个加号,选择opencv4

android studio3导入opencv4人脸识别例程安卓项目工程_第10张图片

android studio3导入opencv4人脸识别例程安卓项目工程_第11张图片

android studio3导入opencv4人脸识别例程安卓项目工程_第12张图片

添加libs

到这个目录下复制一下下面这几个库,都加上也行,我只复制了armeabi-v7a

android studio3导入opencv4人脸识别例程安卓项目工程_第13张图片

然后粘贴到了libs下

android studio3导入opencv4人脸识别例程安卓项目工程_第14张图片

修改build.gradle

我把这个AndroidManifest.xml删掉了

android studio3导入opencv4人脸识别例程安卓项目工程_第15张图片

然后打开app下的build.gradle看一下这三个数

android studio3导入opencv4人脸识别例程安卓项目工程_第16张图片

opencv4下的build gradle改成与上面一样的

android studio3导入opencv4人脸识别例程安卓项目工程_第17张图片

 

往下翻,然后修改一下下面这个

android studio3导入opencv4人脸识别例程安卓项目工程_第18张图片

build一下

android studio3导入opencv4人脸识别例程安卓项目工程_第19张图片

android studio3导入opencv4人脸识别例程安卓项目工程_第20张图片

ok,没有错误。到这里opencv4的工程就导入成功了

下面导入例程测试效果

三导入opencv4人脸识别例程

导入java

到OpenCV-android-sdk\samples\face-detection\src\org\opencv\samples\facedetect目录下复制一下这两个文件

android studio3导入opencv4人脸识别例程安卓项目工程_第21张图片

拷贝到app - src - main - java -  org.opencv.samples.facedetect下

android studio3导入opencv4人脸识别例程安卓项目工程_第22张图片

导入xml

复制xml拷贝到app src res layout下

android studio3导入opencv4人脸识别例程安卓项目工程_第23张图片

android studio3导入opencv4人脸识别例程安卓项目工程_第24张图片

导入模型

例程的raw有个xml模型

android studio3导入opencv4人脸识别例程安卓项目工程_第25张图片

直接复制下raw文件夹

android studio3导入opencv4人脸识别例程安卓项目工程_第26张图片

粘贴到app - src - main res下

android studio3导入opencv4人脸识别例程安卓项目工程_第27张图片

 

 

导入jni文件

新建一个jni文件夹

android studio3导入opencv4人脸识别例程安卓项目工程_第28张图片

android studio3导入opencv4人脸识别例程安卓项目工程_第29张图片

复制这下面四个文件

android studio3导入opencv4人脸识别例程安卓项目工程_第30张图片

拷贝到jni下

android studio3导入opencv4人脸识别例程安卓项目工程_第31张图片

Android.mk和Application.mk文件我做了修改

 

修改Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)OPENCV_CAMERA_MODULES:=onOPENCV_INSTALL_MODULES:=oninclude G:/software/android/opencv-4.0.1-android-sdk/OpenCV-android-sdk/sdk/native/jni/OpenCV.mkLOCAL_MODULE := detection_based_trackerLOCAL_SRC_FILES := DetectionBasedTracker_jni.cppLOCAL_LDLIBS += -llog -ldlinclude $(BUILD_SHARED_LIBRARY)

注意这里面第5行的include要与你的opencv.mk路径对应

android studio3导入opencv4人脸识别例程安卓项目工程_第32张图片

修改Application.mk

APP_STL := c++_staticAPP_CPPFLAGS := -frtti -fexceptionsAPP_ABI := armeabi-v7aAPP_PLATFORM := android-16

修改app build.gradle

修改app下的build.gradle加入ndk编译的命令

    externalNativeBuild{        ndkBuild{            path "src/jni/Android.mk"}    }

这个path对应的路径就是jni下的android.mk路径

android studio3导入opencv4人脸识别例程安卓项目工程_第33张图片

修改AndroidManifest.xml

修改app的AndroidManifest.xml

android studio3导入opencv4人脸识别例程安卓项目工程_第34张图片

启动文件改成FdActivity

然后添加使用摄像头的权限

android studio3导入opencv4人脸识别例程安卓项目工程_第35张图片

                    

 

这时下面这两个文件就没用了,删除也可以

android studio3导入opencv4人脸识别例程安卓项目工程_第36张图片

build编译

编译一下没有问题

android studio3导入opencv4人脸识别例程安卓项目工程_第37张图片

run

连接手机,run

没问题

注意

1安装后要自己到手机设置里开启相机权限

2照相机的正方向是手机斜放(横着),竖向的图片是翻转的,这里就不修改了。

找个百度的图片试下,没问题

android studio3导入opencv4人脸识别例程安卓项目工程_第38张图片

 

四 生成apk

最后生成可导出的apk

点击generate

android studio3导入opencv4人脸识别例程安卓项目工程_第39张图片

这里可以选择choose existing 也可以选择create new。为了演示我选择create new

android studio3导入opencv4人脸识别例程安卓项目工程_第40张图片

到这个界面,第一个是要存放的key路径

android studio3导入opencv4人脸识别例程安卓项目工程_第41张图片

我先新建一个key文件夹

android studio3导入opencv4人脸识别例程安卓项目工程_第42张图片

选择这个目录

android studio3导入opencv4人脸识别例程安卓项目工程_第43张图片

然后剩下的密码用户名就随便了

next

android studio3导入opencv4人脸识别例程安卓项目工程_第44张图片

选了v1,。finish

android studio3导入opencv4人脸识别例程安卓项目工程_第45张图片

找到这个文件夹。恩,真的有了。

android studio3导入opencv4人脸识别例程安卓项目工程_第46张图片

这个apk就可以拷贝到别的安卓设备测试了

 

更多相关文章

  1. Android Studio新建项目Rendering Problems警告 处理办法
  2. 新建项目出现android support library问题解决
  3. 笔记:Android Studio发布项目到Bintray
  4. Android视频开发国人开发的Vitamio开源项目
  5. Android 项目中集成 Flutter
  6. android工程导出成为jar包。
  7. Android cocos2d-x开发(三)之创建Android工程和编译
  8. Android原生运行uniapp使用5+app创建项目时的SDK集成步骤(一)
  9. Android开源项目第二篇——工具库篇

随机推荐

  1. Android(安卓)ADB工具使用
  2. Android自学笔记:应用程序基本原理
  3. Android中XML解析-SAX解析
  4. Android(安卓)判断应用 第一次安装启动
  5. AsyncTask的用法
  6. 新书内容连载(3):Android(安卓)SDK中常用命
  7. android中activity的四种加载模式
  8. Android中文文档:安装SDK
  9. 澄迈NIIT Android(安卓)实训 后5天学习an
  10. 《Android(安卓)开发工程师面试指南》