点击上方“小白学视觉”,选择“星标”公众号
重磅干货,第一时间送达
圆栗子 编译整理
量子位 出品 | 公众号 QbitAI
我们先来看一个网络留言
△ 来自虾米妈咪
小朋友用妈妈的一寸照片通过了人脸识别,打击了小度音箱的家长监督机制。
活体检测没做好。
公交车身广告上的董明珠头像,被宁波交警系统拍了照,判定成“违法闯红灯”。
活体检测没做好。
所以,活体检测要怎么做?
名叫Adrian Rosebrock的程序猿,写了份事无巨细的教程,从构建数据集开始,一步步教大家用AI分辨真人和照片,精细到每行代码的用途。
△ 川川是假的,光头是真的
这个识别方法,用到了OpenCV和Keras,打开摄像头就可以实时检测。
重要的是,有源码提供,受到了推特用户的踊跃比心。
活体检测,可以检测些什么?
AI可以用哪些技巧,来区分真人和照片?
一是纹理分析 (Texture Analysis) 。皮肤的纹理特征是重要的依据,给2D照片拍照,比起给3D真人拍照,会损失一些纹理。
二是频率分析 (Frequency Analysis) 。照片脸部的频率组成,也不像真人那样丰富。
三是可变聚焦分析 (Variable focusing Analysis) 。连拍两张照片,聚焦在不同位置,查看像素值 (Pixel Value) 的变化。
四是启发式算法 (Heuristic-Based Algorithms) 。眼动、唇动、眨眼这些动作,照片是不会有的。
五是光流算法 (Optical Flow Algorithms) 。在相邻两帧之间,检测物体运动的方向和幅度,查出2D和3D物体之间的差别。
……
不过这里,就把活体检测看成一个粗暴的二分类问题,这些复杂的分析先抛到一边。
自制数据集
程序猿把问题又简化了一下:这里说的“假脸”,只是“屏幕里的人脸”而已。
现在,可以开始造数据集了。
他用手机的前摄像头拍了一段25秒的视频;又举着手机、对着电脑摄像头,把视频播了一遍。
这样,一段真人视频,和一段“假脸”视频,就准备好了。
程序猿拍下的这两条视频,都提供下载。不过,他还是建议大家多收集一些数据,不同的人脸,甚至不同的人种,帮助算法茁壮成长。
下一步,要用OpenCV的人脸检测算法处理两段视频,把有用的区域 (ROI) ,就是人脸部分框出来。
这步用了80多行代码,每一行在做些什么,教程里都写清了