基于Python的face_recognation库的工作原理

face_recognation的确简单易用,可是实现原理究竟是什么?还需要追本溯源,看看作者怎么说的:

作者原文地址:https://medium.com/@ageitgey/machine-learning-is-fun-part-4-modern-face-recognition-with-deep-learning-c3cffc121d78

译文地址:https://zhuanlan.zhihu.com/p/24567586

整个模块工作可以分为四个步骤:

一、找出所有人脸

首先对图像做简化处理:

1、将图像转变为黑白图像。

2、然后将人脸图像转变为如下梯度直方图(HOG)。

为什么要转换为梯度直方图呢?

因为生成直方图的过程其实关注的是局部细节的相对特征,两张人脸图像在不同的光照亮度和色彩模式下肯定有显著的差异,但是局部细节的相对特征基本是一样的,这就是为何要做这样的转换。

另外还有一个原因是转换之后,图像就会变得简单,也就更容易从中挑选出所有的人脸图像。

二、脸部仿射变换

仿射变换,是用来解决人脸图像姿势的问题,比如侧脸、扭头等各种不同的姿态。通过仿射变换,力求把人脸尽可能摆端正。

具体实现方法是,首先找出68个人脸特征点:

然后通过仿射变换,将人脸尽可能调整端正,这样便于下一步的编码识别。从而提高准确率。

三、脸部编码

编码这是最为关键的一步,这一步就把图像数据转换为一组128维的向量数据。

编码具体实现是基于深度CNN网络。

1、为何使用深度学习技术?因为采用深度学习技术经过大量的人脸数据训练,训练好的模型可以自动采集人脸样本特征编码。而且这个编码的过程是非常鲁棒的,能够应对各种条件下的人脸图像。相比于传统的由人工定义特征的方式具有非常明显的性能优势,这也就是为何如今深度学习这么热门的原因。

2、本模型中采用的这个CNN模型是什么?作者说了,这个模型是使用的openface上面训练好的模型,具体原理可以参看https://cmusatyalab.github.io/openface/

四、分类识别

编码完成之后,接下来就是识别了。这一步可以采用任意一种分类模型来实现,比如SVM、余弦相似度、knn等分类器。

分类的过程就是用未知图像的编码与已知图像编码进行比较,相似度在一定范围的就认为是同一个人。

face_recognation模块采用的分类识别方法,是计算未知图片与已知图片编码之后的向量之间的欧几里得距离。

如果要采用其他的分类方法,比如SVM则需要自己根据第三步提取出来的编码值训练分类器,然后再用来进行识别。

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值