Android studio3.0上运行opencv3.2.0自带人脸识别实例Demo

开发环境

  • win10
  • android studio 3.0
  • opencv3.2.0

准备工作

Android studio下载地址
opencv各版本下载地址

android studio 的安装过程网上有很多,不再赘述。
打开opencv下载地址,往下拉,找到并下载对应版本的android包,如下图

下载后解压,解压后的目录是这样:

其中,
- apk 是示例安装包
- samples是示例代码(eclipse工程)
- sdk是opencv库

开始导入项目

打开android studio ,选择import project(Gradle,Eclipse ADT,etc.)

选择samples下的face-detection项目

点击ok后选择工程要放置的位置,然后next

接下来都保持默认即可,点finish

由于这个自带demo的api版本,gradle版本等与你电脑的不同,所以不出意外的话,出错是肯定的。

这个错是说gradle版本不对,当前项目的版本是2.14.1,而我的电脑里已有的版本是4.1,因此打开gradle-wrapper.properties文件,把版本改为4.1(或者你电脑已有的可用的一个版本)就行了。

如果不知道自己该用哪个版本,可以找一个可以运行的项目(比如新建个最简单的hello world项目,只要能运行就行),看一下它里面的gradle-wrapper.properties文件用的gradle版本就行了。

更改前
更改后

可以看出,更改后那个错是没有了,又出现一个新的错误:

Error:Failed to find target with hash string 'android-14' in: E:\Android\android-sdk
<a href="install.android.platform">Install missing platform(s) and sync project</a>

很明显,是api版本不对。打开moudle的build.gradle(不是project的),这里有两个moudle,所以要改两处,别忘了主moudle所依赖的opencvLibrary这个moudle也要改。
修改前

修改后
可以看出,下面这四个版本修改为你电脑配置的可用的版本之后,令人欢呼的BUILD SUCCESSFUL !出现了!惊喜不惊喜,意外不意外~
- compileSdkVersion
- buildToolsVersion
- minSdkVersion
- targetSdkVersion
至于具体要改为哪个版本,同上面一样,找一个可运行的项目,看一下它里面怎么配置的,这里也怎么配置。

到这里就结束了吗?当然没有,道路是曲折的。

运行到模拟器或真机上后会出现,找不到opencv manager的提示,提示你安装,但是很可能安装失败。这是opencv在试图调用你手机本地的库,这种调用方式成为动态库,但是你手机上没安装opencv amnager这个应用库啊,所以找不到喽。
这时候,可以使用调用opencv静态库的方式。所谓静态库,就是把要哦调用的库提前都打包到apk中去,这样运行的时候调用自带的库就行了,不用在调用运行环境中的寻找需要调用的库。

两种方式的优缺点也很明显,静态库对运行环境没有要求,因为自带的有,缺点是安装包大,因为自带库了嘛;动态库刚好相反,要求运行环境中必须有相关库,优点是安装包小。

具体做法是,将opencv-3.2.0-android-sdk\OpenCV-android-sdk\sdk\native下的libs文件夹复制到openCVSamplefacedetection\src\main下,并重命名为jniLibs

这时候却出现了另一个错误!

Error:Execution failed for task ':openCVSamplefacedetection:compileDebugNdk'.
> Error: Your project contains C++ files but it is not using a supported native build system.
  Consider using CMake or ndk-build integration. For more information, go to:
   https://d.android.com/r/studio-ui/add-native-code.html
  Alternatively, you can use the experimental plugin:
   https://developer.android.com/r/tools/experimental-plugin.html

原因是没有设置ndk

至此,大功告成!

参考文章:https://www.2cto.com/kf/201707/656287.html

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Android Studio中使用OpenCV进行人脸识别,可以按照以下步骤进行: 1. 下载OpenCV for Android SDK 在OpenCV官网下载OpenCV for Android SDK,解压后获得一个名为“OpenCV-android-sdk”的文件夹。 2. 创建一个Android项目 在Android Studio中创建一个新的Android项目,并在项目中添加OpenCV for Android SDK。 在项目的“build.gradle”文件中添加以下代码: ```java dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.0.0' compile project(':openCVLibrary2410') } ``` 这里的“openCVLibrary2410”是OpenCV for Android SDK的库文件。 3. 创建一个OpenCVLoader 在项目中的Java类中创建一个OpenCVLoader,以加载OpenCV for Android SDK: ```java private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: // OpenCV加载成功 break; default: super.onManagerConnected(status); break; } } }; @Override public void onResume() { super.onResume(); if (!OpenCVLoader.initDebug()) { // OpenCV加载失败,重新加载 OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10, this, mLoaderCallback); } else { mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); } } ``` 4. 加载人脸识别器 在Java类中加载人脸识别器,并在OpenCVLoader成功加载时进行初始化: ```java CascadeClassifier mCascadeClassifier = null; @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface); File cascadeDir = getDir("cascade", Context.MODE_PRIVATE); File cascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml"); FileOutputStream os = new FileOutputStream(cascadeFile); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } is.close(); os.close(); mCascadeClassifier = new CascadeClassifier(cascadeFile.getAbsolutePath()); if (mCascadeClassifier.empty()) { mCascadeClassifier = null; } else { cascadeDir.delete(); } break; default: super.onManagerConnected(status); break; } } ``` 这里使用了OpenCV提供的lbpcascade_frontalface人脸识别器。 5. 进行人脸识别 在Java类中进行人脸识别,可以使用以下代码: ```java Mat grayMat = new Mat(); Mat rgbaMat = new Mat(); Utils.bitmapToMat(bitmap, rgbaMat); Imgproc.cvtColor(rgbaMat, grayMat, Imgproc.COLOR_RGBA2GRAY); MatOfRect faces = new MatOfRect(); if (mCascadeClassifier != null) { mCascadeClassifier.detectMultiScale(grayMat, faces, 1.1, 2, 2, new Size(100, 100), new Size()); } Rect[] facesArray = faces.toArray(); for (int i = 0; i < facesArray.length; i++) { Imgproc.rectangle(rgbaMat, facesArray[i].tl(), facesArray[i].br(), new Scalar(0, 255, 0, 255), 3); } Utils.matToBitmap(rgbaMat, bitmap); ``` 这里将原始图像转换为灰度图像,并使用人脸识别器检测人脸。如果检测到人脸,则在图像中绘制矩形框。最后将结果转换为Bitmap图像。 完成以上步骤后,即可在Android Studio中使用OpenCV进行人脸识别

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子林Android

感谢老板,老板大气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值