参考基于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。

opencv从官网下载的4.0

下载后的opencv目录如下

OpenCV-android-sdk

    -samples

    -sdk

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

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

package org.opencv.samples.facedetect;

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

二新建opencv工程

 

 

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

导入opencv

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

修改结构

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

添加libs

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

然后粘贴到了libs下

修改build.gradle

我把这个AndroidManifest.xml删掉了

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

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

 

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

build一下

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

下面导入例程测试效果

三导入opencv4人脸识别例程

导入java

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

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

导入xml

复制xml拷贝到app src res layout下

导入模型

例程的raw有个xml模型

直接复制下raw文件夹

粘贴到app - src - main res下

 

 

导入jni文件

新建一个jni文件夹

复制这下面四个文件

拷贝到jni下

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路径对应

修改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路径

修改AndroidManifest.xml

修改app的AndroidManifest.xml

启动文件改成FdActivity

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

                    

 

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

build编译

编译一下没有问题

run

连接手机,run

没问题

注意

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

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

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

 

四 生成apk

最后生成可导出的apk

点击generate

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

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

我先新建一个key文件夹

选择这个目录

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

next

选了v1,。finish

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

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

 

更多相关文章

  1. android(25)(android下实现多线程断点下载)
  2. 单独编译android模块
  3. Android编译系统详解(三)
  4. Android(安卓)编译提示R文件找不到
  5. 总结系列-Android的文件系统
  6. 導入android項目出錯問題解決
  7. 解决Eclipse3.6中Android(安卓)代码自动补全卡死的问题
  8. android studio更新提示网络连接失败的解决办法
  9. Android练习—修改背景颜色

随机推荐

  1. Android TabSwitcher自定义控件
  2. android显示和隐藏键盘
  3. Android application Software Engineer
  4. Understanding the takePicture in Andro
  5. Android 禁止 ListView 上下滑动
  6. Android程序员指南(12)
  7. Android实现打开系统照相机&相册图片展示
  8. Android生成签名文件并用其对apk文件进行
  9. Android实现引导页并滑动跳转到主界面
  10. Android自由选择TextView的文字