美文网首页其它技术点产品撸技术技巧文字
人脸识别--活体检测(眨眼检测)

人脸识别--活体检测(眨眼检测)

作者: 大么大二郎 | 来源:发表于2017-04-07 17:10 被阅读10911次
装逼专用图1.jpg

人脸识别在现在很多的项目中都有应用,最常见的就属此次315曝光的支付宝刷脸登录,当然支付宝也出来做了澄清,我们还是需要相信科技的.支付宝的刷脸可谓是相当成熟了.下面我们来简单的分析一下支付宝的刷脸登录流程.

** 1.前端采集人脸**

前端采集人脸的过程其实就是采集一张带有人脸的图像,然后我们对这个图像进行base64编码之后传给后台服务,后台服务去做人脸的识别,或者验证,如果这样的话,前端做起来其实是相对较复杂的,首先采集人脸的过程中,我们要做的是分析图片中有人脸然后将此图像保存,完成采集过程,当然这样是不安全的,因为我可以随便拿一个人的照片就可以骗过去前端采集的这一过程,所以如果仅仅如此做的话,还是比较简单的,在iOS中有苹果自带的识别人脸的API,当然现在用的最多的是opencv 但是这样做的话,那支付宝的产品和技术人员也就该卷铺盖回家了,所以我们需要在前端进行人脸采集的时候我们需要对识别到人脸进行活体检测,现在的活体检测技术有很多,有让摇头,有让张嘴,有人眨眼,当然也有让这些全部加起来的,(我的臆想..)就我自己的看法,出了眨眼都看起来有点奇怪,支付宝采用的就是眨眼来过滤掉静态图片的识别,但是我尝试过,如果把眨眼的视频拍下来来骗支付宝,是可以骗过去的哦,但是在后续的识别中却是通不过的,这点咱们在下个阶段再谈(你如果开通了支付宝的刷脸登录,可以录制一个自己的眨眼视频来骗下支付宝).支付宝的具体的采集人脸过程大概就是这样(个人理解,如果有人觉得不对的可以留言讨论哦)

** 2.后台服务验证识别**

其实后台的人脸识别验证不属于我们此篇文章要说的内容,在这儿我还是想大概的叙述一下,现在的后台人脸识别验证其实是有很好的第三方的,比较厉害的一个是"face++" 支付宝好像也有用face++ 的服务(face++ 的网站上有写),有兴趣的童鞋可以去网上搜一下,还有据我所知的讯飞,我有电联过讯飞的客服,他们有说他们的服务是基于face++的,识别率还是蛮高的,iOS,安卓都有封装好的对应的SDK,另外提一下face++人脸识别是基于接口的,当然如果自己公司想要开发自己的人脸识别服务也是可以的,但是就我知道的比较专业的好像就是opencv 了,不得不说opencv着实相当强大.

3.刷脸登录草图

我也大致写了下刷脸登录的流程草图,里面确实还有许多要优化的地方,也仅仅抛砖引玉了,希望可以帮助到需要的童鞋,(当初我做这块儿的时候,资料可谓少之又少,希望能够分享出来帮助一些正在迷茫的童鞋们)

Drawing4.png

4.划重点

重点是人脸识别中的活体检测
可以存在两种方式
1)客户端做人脸采集---本章重点
2)服务端做人脸采集---不会讲---类似于直播方式---服务端处理视频帧---有兴趣的童鞋可以尝试下,不知道体验好不好,没有那么强大的后台,所以只能做前端的眨眼检测了,但是即便服务器做,原理都是一样的吧.

5.检测思路

人脸采集的过程其实是客户端通过录像设备采集视频,然后我们拿到视频流,对视频流的每一帧做处理,进而来检测视频中是否有人脸和视频中的人脸是否---(再次感谢看远的github社区,感谢里面的人才,我可以把他们的思路借鉴下来)
(1)利用苹果自带的API(跟原生扫描二维码的类一样)来判断每一帧中是否有人脸,里面可以检测到两只眼是否存在以及两只眼是否睁开,然后记录上次睁开眼的时间,然后在下一次检测到闭眼的时候比较一下与上一次睁眼的时间差,如果在正常范围内则认为是一次正常的眨眼.---此方法,也还不错,但是误差较大,如果只是做一个眨盐拍照的娱乐应用还好,但是做活体检测就显得有点力不从心了.

(2)利用opencv首先对每一帧进行人脸检测,检测到后,算出眼镜的区域,截取眼镜区域再用opencv 对该图像中眼睛的数量进行检测,用一个数组来对每次的眼镜数量进行注册,当数组大小为3的时候,如果数组中第一次眼睛数量大于0,第二次等于0,最后一次大于0,则证明是一次眨眼,此方法可能很蠢,有专门做眨眼检测研究的可能会认为这种方法low到爆,可以利用阈值..大数据分析...反正那一堆堆高深的算法我是看不懂,前期也做过相对应的学习,但是实现起来太多复杂,领导给的时间不允许,所以就只有采用这种比较low的第二种方法了,不得不说这种方法效果还是蛮不错的,当然肯定比不上支付宝那种大牛写出来的算法,但是,至少可以信心满满的跟自己的领导交差了,可以半个小时之后,拿着demo去向领导邀功去了,然后坐上CEO,赢取白富美,从此走上人生巅峰的道路了,(没事,尽情的做梦吧)

6.代码就是王道

其实对于这块儿我已经封装成了一个服务CaptureFaceService
下面大概介绍一下这块儿的使用方法

  • 1.引入头文件--凑字数*
    #import "CaptureFaceService.h"
  • 2.创建对象 -- 凑字数 (懒加载)*
@property(nonatomic,strong)CaptureFaceService * captureFaceService;

  - (CaptureFaceService *)captureFaceService{
    if (!_captureFaceService) {
        _captureFaceService = [CaptureFaceService new];
    }
    return _captureFaceService;
}

  • 3.开始采集
- (void)startCaptureFace{
    __weak typeof(self)weakSelf = self;
    [self.captureFaceService startAutoCaptureFaceWithPreView:self.vidioView andCaptureFaceProgressBlock:^(float faceProgress, float eyeProgress, captureFaceStatus captureFaceStatus) {
        [weakSelf changeTipTextWithCaptureFaceStatus:captureFaceStatus];
    } andCompleteBlock:^(UIImage *resultImage, NSError *error) {
        if (error) {
            UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"检测人脸失败,请重试" message: nil preferredStyle:UIAlertControllerStyleAlert];
            [alertController addAction:[UIAlertAction actionWithTitle:@"重试" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
                [weakSelf startCaptureFace];
            }]];
            [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) {
            }]];
            [weakSelf presentViewController:alertController animated:YES completion:nil];
            return ;
        }
        //处理采集到的图片
        [self handleResultImage:resultImage];
    }];
}
  • 4.当然也可以中断采集
    [self.captureFaceService stopCaptureFace];

7.深度剖析

说实话,我真的想做一下深度的剖析,活体检测听起来太过高大上,我裤子都脱了,竟然给我看这个.这个.好吧,简答的做个介绍吧!---其实真的写的很简单,为了满足你们,我就凑点字数吧

#import <Foundation/Foundation.h>
#import <opencv2/highgui/cap_ios.h>
typedef enum
{
    captureFaceStatus_NoFace,       //未检测到脸
    captureFaceStatus_MoreFace,     //有多张脸
    captureFaceStatus_NoBlink,      //未眨眼
    captureFaceStatus_IllegalData,  //检测非法
    captureFaceStatus_OK,           //检测完成
    captureFaceStatus_NoCamare     //检测完成

}captureFaceStatus;

typedef void (^captureFaceProgressBlock ) (float faceProgress,float eyeProgress,captureFaceStatus captureFaceStatus);
typedef void (^captureFaceCompleteResultBlock) (UIImage *resultImage,NSError * error);
@interface CaptureFaceService : NSObject <CvVideoCameraDelegate>


/**
 开启智能扫描人脸(包含活体检测--眨眼)

 @param preView 视频预览区域
 @param captureFaceProgressBlock 过程回调
 @param captureFaceCompleteResultBlock 完成回调
 */
- (void)startAutoCaptureFaceWithPreView:(UIView *)preView andCaptureFaceProgressBlock:(captureFaceProgressBlock)captureFaceProgressBlock andCompleteBlock:(captureFaceCompleteResultBlock)captureFaceCompleteResultBlock;


/**
 停止采集
 */
- (void)stopCaptureFace;
@end

8.相信我了吧真的没有什么可以剖析的

什么,你想看我里面是怎么实现的?里面也总共200来行代码,贴出来浪费看官的流量,我就不再帖代码了,看到这里,你就可以拿出来我这个类来使用了,demo我会放到github上,有需要的童鞋可以去下载研究实现哦.

9.有一大波重点来袭 -- (重点)

demo下载下来是不可以直接使用的,对你没有听错,会报错,你根本跑不起来(你他么是不是在逗我,我需要下载下来直接能跑的程序,...)看官切勿烦躁,因为opencv 这个SDK太大,150多兆,,,git真的上传不上去啊,所以,按照以下步骤做,您所下载的程序就可以跑起来了

1.去opencv 官网,下载iOS的SDK,我demo中用的是2.4版本
<a>http://opencv.org/releases.html</a>
2.去度娘 (haarcascade_frontalface_alt2.xml) (haarcascade_eye.xml)这两个级联分类器并下载导入到自己的项目中
3.这下您就可以开心的跑起来体验了....

10.重点中的重点

源码直通车

装逼专用图2.jpeg

11.希望能帮助到需要的童鞋,如您喜欢,敬请留言

相关文章

  • 人脸识别活体检测系统,人脸识别活体检测数据分析平台

    人脸识别活体检测系统,人脸识别活体检测数据分析平台 [本文由汇新云李先生编辑/人脸识别活体检测系统开发搜索微信:h...

  • 人脸活体检测

    人脸检测 关键点检测 人脸对齐(仿射变换) 活体检测/身份识别

  • 人脸识别--活体检测(眨眼检测)

    人脸识别在现在很多的项目中都有应用,最常见的就属此次315曝光的支付宝刷脸登录,当然支付宝也出来做了澄清,我们还是...

  • 人脸识别离线采集sdk,智能设备利器

    基于深度学习技术FaceID技术,研发出安全帽人脸识别、口罩人脸识别、单目活体检测、双目活体检测、人脸特征属性...

  • 人脸识别活体检测技术最好是哪个? 请大家提供我活体检测技术方面的

    人脸识别是包含了人脸图像采集、人脸定位、人脸识别预处理、活体检测、身份确认以及身份查找等一系列相关技术,活体检测技...

  • 移动端活体检测

    关键词:实名制,人证合一,实名认证,人脸识别、活体检测 活体检测介绍 移动端活体检测,提供Android 、IOS...

  • 人脸识别略施小计形同虚设

    人脸识别技术的软件,其识别流程均大致如下:检测人脸→ 活体检测 → 人脸对比(和之前上传的自拍照或证件照)→ 分析...

  • 2020-06-30

    人脸识别终端具有机器视觉及活体辨别能力,在实际业务场景中,通过人脸检测和人脸识别、多分类物体检测与识别在设备进行数...

  • 2020-06-24

    人脸识别终端具有机器视觉及活体辨别能力,在实际业务场景中,通过人脸检测和人脸识别、多分类物体检测与识别在设备进行数...

  • 2020-06-16

    人脸识别终端具有机器视觉及活体辨别能力,在实际业务场景中,通过人脸检测和人脸识别、多分类物体检测与识别在设备进行数...

网友评论

  • Mr_Lucifer:视频 也能通过, 怎么解决这个问题?
    Mr_Lucifer:@NielLes 有什么建议吗? 确实找了很多, 都不太理想:smile:
    大么大二郎:@Mr_Lucifer 这个的话这块儿就不太好处理了,这个可能需要更加深入的图像处理相关内容了
  • 首席科学家:推荐一份 python深度学习Tensorflow人工智能AI机器学习 视频教程:https://blog.csdn.net/u012201811/article/details/81184113
  • kindomright:不依赖sdk的 离线安卓版本的
    实现可以看一下
    https://pan.baidu.com/s/1i5oXoJ7
    大么大二郎:@SoftBoy 666谢谢分享
  • 番茄那个鸡蛋:可以当做demo研究一下,活体检测要用的话还是有些简单,我试下用照片或者身份证也能测试通过。
    大么大二郎:@番茄那个鸡蛋 是的,提供一些思路么,下面评论中有一个新的不错的思路,可以尝试下,但最终解决真正的活体检测还是要聪图片处理上入手的
  • f9d4791198a2:你好,我导入了OpenCV2,和讯飞人脸识别sdk,编译一直报错,Core hpp header must be compiled with C++
    大么大二郎:@Leex253 可以在git上给我发邮件的
    f9d4791198a2:@NielLes 发不了图加下我Q978608151我发给你
    大么大二郎:@Leex253 git上下载源码,也或者把截图给我下
  • 我记得_dbd7:大佬啊,这个在python上可以实现吗?
    大么大二郎:@我记得_dbd7 思想是肯定可以实现的,前段时间看了个比较不错的,我还没来得及试呢。https://www.pyimagesearch.com/2017/04/24/eye-blink-detection-opencv-python-dlib/ 可以尝试下
  • ac9ab8b5c1e3:哥们 还挺幽默呀
    大么大二郎:过奖过奖
  • 小jie:2.去度娘 (haarcascade_frontalface_alt2.xml) (haarcascade_eye.xml)这两个级联分类器并下载导入到自己的项目中
    能分享一下这两个吗
    小jie:@NielLes 能加你QQ吗 有事情请教一下
    小jie:@NielLes 谢谢
    大么大二郎:https://github.com/June0611/EyeBlickCheck/issues/1
  • 小jie:你的GitHub是多少
  • I1015U:楼主 OpenCV 2.4.13.4框架加了 讯飞框架也加了 haarcascade_frontalface_alt2.xml haarcascade_eye.xml 这个也加了 为什么还会在 CaptureFaceService.mm 76行报错呢
    大么大二郎:@I1015U 收到邮件了,稍后我看下
    I1015U:@NielLes 嗯啊 好滴
    大么大二郎:76行报错的原因就是找不到haarcascade_frontalface_alt2.xml文件,您可以将您的工程报错截图给我发下,邮箱1540502624@qq.com,我猜测可能是文件没有加入到工程
  • 311c67f740c7:你好,请问有android版本的吗???
    Jack_wang_:有Android的源码吗 求一份
    Donal_5cf9:@NielLes 有android的源码吗?
    大么大二郎:@随飞 有啊,但是那个没有在我这儿哦,在同事那里呢
  • d1a0041ff973:同上,点击开始拍照程序崩溃在CaptureFaceService.mm的76行
    CFStringGetFileSystemRepresentation( (CFStringRef)faceCascadePath, CASCADE_NAME, CASCADE_NAME_LEN);
    Android小码农_:请问安卓呢??
    大么大二郎:有一大波重点来袭 -- (重点) 第2点
    大么大二郎:没有加入级联分类器..
  • 0e5697acd107:点击开始拍照程序崩溃在CaptureFaceService.mm的76行
    大么大二郎: @采代码的小蘑菇 没有加入级联分类器吧
  • 改变自己_now:貌似效果不是很好
    大么大二郎: @登低自高 还行吧,我们这儿用着效果还可以
  • 风华_绝代:你好,在CaptureFaceService.h 中,报 opencv2/highgui/cap_ios.h 找不到这个错误。 而且整个Demo 工程中都找不到这个头文件。
    大么大二郎: @风华_绝代 这个只要是2.4的就行吧,可以随便选择一个的
    风华_绝代:@NielLes 好的,谢谢您,您用的sdk具体是哪个版本?2.4.几
    大么大二郎:你好,需要导入OpenCV2的SDK
  • 我是派蒙:为什么service下的facerecognitionservice.m 报错 说是找不到iflyMSC/IFlyFaceSDK.h
    大么大二郎: @觅得佳人红烛亭 人脸识别的sdk
    我是派蒙:@NielLes 语音的SDK 还是人脸识别的SDK 一脸懵逼
    大么大二郎: @觅得佳人红烛亭 缺少讯飞sdk

本文标题:人脸识别--活体检测(眨眼检测)

本文链接:https://www.haomeiwen.com/subject/wyacattx.html