Android使用OpenCV实现「人脸检测」和「人脸识别」
来源:互联网 发布:淘宝开店一件代发流程 编辑:程序博客网 时间:2024/05/18 00:22
出自
DEMO
OpenCV+JavaCV实现人脸识别
—————————-分割线———————————
效果图
先上效果图,不好弄gif
在网上找了在Android平台上使用OpenCV相关的教程,很少,大部分也都主要是介绍下人脸检测,很少有讲人脸识别,还有的人连人脸检测和人脸识别的概念都没有搞清,人脸检测只是识别到有人脸,能获取到一个人脸的大概位置,有几个人脸,而人脸识别是要获取到人脸特征做对比,识别这个人脸。有好多文章都写自己在讲人脸识别,实际上他只是做了人脸检测。
OpenCV官网
官方给的Demo是在Eclipse工程下的,如果你现在已经是在Android Studio下开发,因为Eclipse工程有makefile文件,迁移到Android Studio好像还是有点麻烦,我是干脆就在Eclipse下跑的Demo。
先甩过来官方给的一些文档:
OpenCV4Android SDK
Android Development with OpenCV
实现方式
按照官方的文档,我们在Eclipse里导入Demo进去以后,是不能直接运行的,需要安装Manager的一个APK,然后在Demo工程里通过AIDL的方式,调用OpenCV的核心方法,不过Demo给实现的功能也只是一个人脸检测。
SDK
SDK下载
下面来看一下SDK
目录:
- apk:Manager的apk
- doc:一些文档
- samples:示例工程和一些编译好的apk
- sdk:一些库文件
当然, 如果你的C/C++足够好,你肯定可以自己编译一个库,直接导入到工程,就不用安装Manager了,可惜了我自己还不行,哈哈……无奈安装Manager把……
如何将Demo导入到Eclipse并运行,上面官方的文档已经说的比较清楚了,至于会有什么问题就自行Google吧。
人脸检测
其实人脸检测并不是重点,Demo里已经实现了人脸检测的功能。
主要的实现方式:OpenCV有一个自己的org.opencv.android.JavaCameraView
自定义控件,它循环的从摄像头抓取数据,在回调方法中,我们能获取到Mat数据,然后通过调用OpenCV的Native方法,检测当前是否有人脸,我们会获取到一个Rect
数组,里面会有人脸数据,最后将人脸画在屏幕上,到此为止,Demo的人脸检测功能,就结束了。
人脸识别
人脸识别我这里用到了JavaCV
人脸识别逻辑:人脸识别的主要方式就是获取到人脸的特征值,然后将两个特征值做比对,取到一个相似度去做人脸识别,OpenCV这里的特征值,其实就是一张图片。
我们的从回调的Mat数据检测到有人脸以后,提取特征值(也就是保存人脸的一张图片到某个路径),然后比较特征值
为了提高识别的准确度,需要在检测到人脸以后,把人脸的部分截取出来,然后置灰(置灰的目的是为了方式色泽和明暗度对识别有影响)。
保存人脸特征值
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
提取特征值
之前已经说了嘛,人脸特征其实就是一张人脸图片,所以提取人脸特征其实就是获取一张人脸图片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
人脸识别
这里主要使用了JavaCV的方法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
最后
看我轻描淡写了一篇博客写完了,看上去好像挺容易的,但是对于第一次做人脸识别的人或者对JNI还不是很熟的人来说,可能并没有想象的那么简单,你会遇到各种库找不到,编译不通过等等的问题,总之吧,一个大概的实现思路呈现出来,仅供参考,就是这样!
http://blog.lwons.com/archieve/use_opencv_in_android_to_detect_faces_from_camera_frames.html
- 顶
- 踩
- Android使用OpenCV实现「人脸检测」和「人脸识别」
- Android使用OpenCV实现「人脸检测」和「人脸识别」
- opencv 人脸识别和行人检测
- OpenCV人脸检测+识别
- QT+Opencv实现人脸检测与性别识别(1)
- QT+Opencv实现人脸检测与性别识别(2)
- Java使用OpenCV实现人脸识别/人眼检测/图片截取/合成/添加水印
- 【Android】Android使用OpenCV实现人脸识别(OpenCV+JavaCV)
- android opencv 人脸检测实现
- opencv人脸识别,瞳孔检测
- 简单OPENCV人脸检测识别原理
- android 人脸检测&&识别
- 人脸检测和识别
- Linux系统下利用OpenCV实现人脸检测和基于LBPH算法的人脸识别
- (opencv)Android人脸识别
- OpenCV实现人脸检测
- OpenCV实现人脸检测
- OpenCV实现人脸检测
- CentOS7图形化关闭屏幕保护
- 矩阵翻硬币.java
- J2EE系列之Spring4学习笔记(二)--IOC详解(介绍)
- FFMPEG AVCodecparameter 怎么用?
- BZOJ1079: [SCOI2008]着色方案
- Android使用OpenCV实现「人脸检测」和「人脸识别」
- [bzoj2463][中山市选2009] 谁能赢呢? 博弈论
- Ruby module和class的理解分析
- jdbc.properties
- SpringMVC 使用JSR-303进行校验 @Valid
- MyBatis中resultType和resultMap的区别
- java内部类
- Oracle匿名块
- StringBuilder