通过faceID 来说说人脸识别相关技术
先说怎么和人脸识别技术结缘,记得13年初像做一款人脸和动物变形的效果,可以从比如豹子脸平滑过渡到人脸,相当的帅。当时OpenCV 在iOS 上支持比较不是太友好,需要移植C++ 库。现在OpenCV 这两年对移动端做出了大量工作,有相应的framework。
现在一些人脸识别的技术底层也是用的OpenCV这个相当强大的图形处理库,他有很多相当成熟的算法。典型的一个成熟的SDK供应商 face++。现在也会配合一些新技术更加精确识别人脸比如下面说的苹果的FaceID。
苹果的iPhoneX 很让人别扭的刘海全面屏幕是有他的原因的叫TrueDepth Camera System,包含红外镜头、泛光感应元件、距离传感器、环境光传感器、扬声器、麦克风、700万像素摄像头、点阵投影器,苹果的一些最新研发的尖端技术都是基于此,比如faceID面部识别技术,借助ARKit 实现AR方面应用。所以那么贵不只是他为了高利润,确实硬件里有大惊喜。
先说说人脸识别技术的应用领域吧。比如手机的刷脸解锁,刷脸支付,刷脸打卡,可以检测一个人的性别,年龄,肤色甚至皮肤的水分,油脂等等。现在我参与的一个应用里面就有扫脸登录。
再说说大家对人脸识别安全性的担忧吧。比如:第一级别拍一张别人照片,第二级别视频播放拍一个人的视频,第三级别假面具,3D打印人脸。还有其他一些环境因素光亮,遮挡,角度问题。
那针对担忧说说相关的技术应对吧。
1:对于照片。对于照片检测时候通过眨眼以及嘴巴动作,摇头动作来解决。
2:对于视频可以因为拍摄时候图片的清晰度比较差,反光点多,有明显的摩尔纹,如果有条件可以红外检测真实的人脸和纸片、屏幕、立体面具等攻击媒介的反射特性都是不同的。
3:苹果的faceID技术甚至用到了红外检测,以及点阵投影器,AI芯片 A11 Bionic 神经引擎。用 3 万多个点,以 3D 形式识别用户面部,通过训练神经网络建模、识别人脸。
最后说说我们的技术思路吧。
苹果的这个东西出来可以把人脸识别分为老的人脸识别技术和新的人脸识别技术。新的人脸识别技术借助了一些硬件技术比如红外摄像头,点矩阵甚至AI技术不断精确训练数据。
对于老系统的人脸识别可以借助OpenCV算法来实现。
1:用Adaboost算法,导入人脸眼睛等训练数据。
2:对于活体检测可以计算眨眼睛嘴巴动作,摩尔纹检测,清晰度检测。对于清晰度计算图片的快速傅里叶变换,然后查看高低频的分布。如果图片有少量的高频成分,那么该图片就可以被认为是模糊的。然而,区分高频量多少的具体阈值却是十分困难的,不恰当的阈值将会导致极差的结果。对于摩尔纹检测可以,将图像转换成傅里叶频域,检测频率峰值,摩尔纹图像中的波纹相当强大。
3:对比原图和现图的相似度来判断是不是本人。如果是证件照可以通过感知哈希算法(perceptualhash algorithm),它的作用是对每张图像生成一个“指纹”(fingerprint)字符串,然后比较不同图像的指纹。结果越接近,就说明图像越相似。或者用直方图模型比对两张图片,如果两张图片一模一样的话,结果为0.00;比对的结果越小,图片相似性越高。这些要求人脸图的姿势比较准确。比较准确的做法是可以用OpenCV捕捉人脸的关键点,几何校正主要对于角度,人脸光学校正模块,通过一些滤波的方法,去除一些对光照更加敏感的面部特征,生成人脸特征,这样在一些角度,和光线不好的情况下比较有利,比如完全可以扫描到双眼就可以快速识别。
4:对于更精确识别没有苹果这些硬件支持还是要通过大数据和深度学习算法,神经网络算法更好的训练数据弥补硬件的不足。
对于OpenCV的展望。要是我,我会用OpenCV仿照做一个手机端的PS 图形处理软件,因为他的一些算法相当成熟,可以很轻松实现滤镜,魔术棒等等。对于去年阿里月饼时间找到那个发截图的人也用到了一些OpenCV的东西,因为阿里可能对于截图添加盲水印就是用了OpenCV,原理是频域添加数字水印的方法,通过某种变换手段(傅里叶变换,离散余弦变换,小波变换等)将图像变换到频域(小波域),在频域对图像添加水印,再通过逆变换,将图像转换为空间域。相对于空域手段,频域手段隐匿性更强,抗攻击性更高。所以很快定位到谁截图了。