人脸识别技术相关问题分为四大块:人脸检测,特征点提取,人脸校验,人脸检索。
其中第一个问题旨在检查图片是否是人脸、检测一张图像中是否包含人脸,而这个问题早在2005年就已经有了解决方案。
即将一张彩制图片(通常是jpg格式)转化为黑白格式,然后对临近的像素点中用箭头标示出黑白区间变化(没有变化则不标),从而得到一张简化的(HOG)图片制式,可以快速而简便的检测人脸。
这个步骤opencv中早已存在,基于Viola-Jones算法,可以直接拿来用。
第二个问题,特征点提取,这个问题在2015年前后,在Python发布的anaconda支持库得到了普世化的解决方案。而在2015年以前,这个技术不能说没有,而是发展缓慢。
其基本原理为提取人脸特征中的68个特征点(鼻子两侧、眉心、嘴角等类似位置,也有算法是27个,这个数量不是固定的,特征点越多越精确(熵越低),同样计算效率也就越低,这是两个矛盾的对立面),从而确定需要处理的面部区域。
特征点并不是某个点,而是一个像素集合,主要由卷积核和卷积核周边的像素构成,这个结构就是传说中的智能领域的神经网络(具体分类为卷积神经网络,区别于递归神经网络)。它在某种程度上,和正则有着相似之处。
在这个过程之后,需要用到这些特征点,通过算法按照比例扭曲和旋转,以及等比缩放,从而得到一张几乎完全对称的正脸。
前两个问题都属于图像的预处理步骤。
后两个问题,人脸校验和人脸检索则是两个相对独立的问题,前者判断两张照片是不是同一个人,后者判断这是谁。
其中又需要广泛用到随机森林和深度学习。
随机森林(这里会用到高斯核)不需要过多解释,就是在脸上随机描边,所有的算法都会是在描边的区域内进行,从而达到某种目的(深度学习)。
深度学习则可以简单的理解为结果推倒论。
通常人类判断两个人是否是同一个人,会去仔细对比两个人的头发颜色、眉毛长度、鼻子形状等,从而而出结论:哦,这是/不是同一个人。
而对于计算机来说,则是恰恰相反,而是放两张照片先告诉它,这是一个人,给他制定一系列的决策标准(分类和决策),而后自己算着玩去吧!
计算机视觉最常用的监督训练学习的方法,就是给三张照片,其中两张是同一个人,第三张是其他人,要求上述所有步骤最终得到正确的计算结果,从数万个决策中得到的128个特征(这个数量也不是固定的)。
这128个特征,如果用日志记载下来的话,可能会让人感觉到啼笑皆非:它可能记录了一个人从左鼻孔到右眼角的距离,也有可能记录的是眼睛瞳孔的形状,或者可能只是睫毛的弯曲幅度,或者只是头皮屑的颜色。
实际上这个过程可能更复杂一些,它会不断的从a到b,再从b到a,不断的调整权值,从而达到人类要求得到的结果。
这人类无法完全理解的一套规则,谷歌两机器人互相以人类无法理解的语言对话,就是这个原理。
这个就叫做深度学习。
简单来讲,计算机视觉更像是鹦鹉说话,鹦鹉会说“你好”,但是它并不能理解“你好”是什么意思。对于人类来说,鹦鹉说出“你好”就是结果,也不关心它是怎么说出来的。
所以身份证取照需要人做出几个动作,额外多拍几张照片,这个过程就是为了让计算机能够深度学习,得到属于这个人的“特征库”。
手机的人脸解锁,相对于人脸识别的三维检测,则更为简单一些,因为手机普遍采用的是红外拍摄取图。
相对于彩色制式的标准图,手机对是不是本人的检测并不是特别严格,这个卷积核,也就是神经网络,它是基于二维结构的。
结果论是智能领域常用的解决方案,它有一个学名,叫做监督学习。
包括双足行走和跳跃,搬运货物,下棋,等等机器行为,都非常依赖于监督深度学习。
就先记到这里,这半年正在做这方面的项目。