Android FaceDetector实现人脸检测功能

所属分类: 软件编程 / Android 阅读数: 40
收藏 0 赞 0 分享

关于人脸检测被折磨了半个月,前2周开需求会时需要要做一个“人脸认证上传功能,具体是打开前置摄像头,识别出用户的脸并且脸在一个指定的圆圈内然后自动保存这个状态的图像待用户是否确定上传”。听到这个需求我第一时间想到比较专业的图形处理库OpenCV。去github上面搜了一下关于openCV识别人脸的demo,样例确实有点多,也确实是可以实现 但是OpenCV库实在是有点大8M,用这个库估计会被构架师说死。然后我还搜过其它的第三方库(虹软,face++,阿里云人脸检测)这几款都不是省油的灯一款需要兼容android5.0以上,其它2款都是收费版,至于阿里云更厉害了不支持离线检测。

后来才选择了google自带api,网上一搜发现google 的一个类android.hardware.Camera里面有已经帮你封装好的人脸检测的api有这方面了解的同学可以参考一下点击打开链接。我开始也是使用这种方式实现的,磕磕碰碰的写完后最终发现合乎需求,后来自己打算测试一下机子兼容性,拿了一台华为机子一测试,发现人脸的那个接口没有任何回调(nexus6P调用还会发现闪退,打log发现是ndk层抛出来的),心马上沉入谷底。

最后发现好像没有啥捷径可走了,只好老实实使用android.media.FaceDetector进行开发。这种方式的使用的思路是,使用Camera+TextureView(鉴于对开发时间紧,对已过时有点了解就没有使用Camera2)进行预览,通过设置PreviewCallback实时抓取每一帧图像进行检测是否合格。图像预览本人推荐google关于Camera使用demo进行修改,因为在实际中有很多机型未必都能合乎预想(本人也确实被坑过,自己封装的Camera发现跑在一些机子上图像方向是反向的。当然如果对Camera很熟悉那也是可以自己写的)。好了啰嗦了一大堆下面来看看正题

先看看集成到app里面的实际效果

这里说明不是APP卡,我用的录屏软件共享桌面时一卡一卡的

首先图像预览改自google demo,demo拿过来是不能直接使用的,里面需要自己手动添加每一帧的回调,代码如下(这里直接贴图了,更直观,稍后我会把demo发出来)

google CameraDemo主要改了这么多,下面来看看在获取到每一帧时对图像的处理跟识别

再看看FaceThread做的Bitmap转换,Bitmap旋转及对Bitmap是否有人脸的识别

好了,主要逻辑就这些吧,关于FaceDetector具体使用,这是我写好的demo(上面演示是把demo验证没问题情况拷贝到项目中,最终实现需要按照你的需求来。演示地址)

最后给一个忠告,在开发中遇到完全不熟悉的api最好去找google的实现的demo看效果,看代码的实现。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android中加入名片扫描功能实例代码

这篇文章主要介绍了Android中加入名片扫描功能实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿微信发表说说实现拍照、多图上传功能

这篇文章主要为大家详细介绍了Android仿微信发表说说实现拍照、多图上传功能,使用Retrofit2.0技术,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

设置Android系统永不锁屏永不休眠的方法

在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠。本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删除设置中休眠时间选项,需要的朋友一起学习吧
收藏 0 赞 0 分享

Android Retrofit 2.0框架上传图片解决方案

这篇文章主要介绍了Android Retrofit 2.0框架上传一张与多张图片解决方案,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义等待对话框

这篇文章主要为大家详细介绍了Android自定义等待对话框的实现方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中Window添加View的底层原理

这篇文章主要介绍了Android中Window添加View的底层原理,需要的朋友可以参考下
收藏 0 赞 0 分享

Android调用系统默认浏览器访问的方法

这篇文章主要介绍了Android调用系统默认浏览器访问的方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发退出程序的方法汇总

Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面脚本之家小编就给大家介绍android开发退出程序的几种方法,感兴趣的朋友参考下吧
收藏 0 赞 0 分享

Android程序开发中单选按钮(RadioGroup)的使用详解

在android程序开发中,无论是单选按钮还是多选按钮都非常的常见,接下来通过本文给大家介绍Android程序开发中单选按钮(RadioGroup)的使用,需要的朋友参考下吧
收藏 0 赞 0 分享

Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中

这篇文章主要介绍了Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多